Double ajout

Fermé
NightwishQc - 12 mai 2014 à 16:28
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 - 12 mai 2014 à 21:01
Bonjour,

Je vous explique en quelques mots mon problème. Cela fait plus de 3 ans je fait du développement web de base. J'ai récemment rencontré un problème que je n'arrive malheureusement pas à arranger. Mon problème est que lorsqu'un formulaire d'ajout dans la base de donnée, il me l'insert en double. Cela ne se produit pas uniquement sur un seul formulaire, mais sur l'ensemble.

Voici par exemple l'un des formulaires :

fichier : main.php

<form action=\"\" method=\"post\">
<input type=\"hidden\" name=\"addmusic\" value=\"1\">
<table class=\"table\">
<tr>
<td><input class=\"form-control\" type=\"text\" name=\"name\" placeholder=\"Titre de la chanson\" required></td>
<td><select class=\"form-control\" name=\"kind\">
<option value=\"\">Genre...</option>
<option value=\"1\">Chanson</option>
<option value=\"2\">Clip vidéos</option>
<option value=\"3\">Karaoké</option>
</select></td>
</tr>
<tr>
<td><select class=\"form-control\" name=\"singer\">
<option value=\"\">Choisir un artiste...</option>";
while ($list=$a->fetch(PDO::FETCH_OBJ)){
echo "<option value=\"".$list->artid."\">".$list->artname."</option>";
}
echo "</select></td>
<td><select class=\"form-control\" name=\"album\">
<option value=\"\">Choisir un album...</option>";
while ($list=$b->fetch(PDO::FETCH_OBJ)){
echo "<option value=\"".$list->albid."\">".$list->albname."</option>";
}
echo "</select></td>
<tr>
</table>
<input class=\"form-control\" type=\"text\" name=\"embedlink\" placeholder=\"http://www.youtube.com/watch?v=0NKUpo_xKyQ\" required>
<textarea cols=\"40\" rows=\"2\" name=\"commentadd\" placeholder=\"Laisser un commentaire\"></textarea>
<input type=\"button\" class=\"btn btn-success btn-sm\" id=\"showaddartistearea\" value=\"Ajouter un artiste\">
<input type=\"button\" class=\"btn btn-success btn-sm\" id=\"showaddalbumarea\" value=\"Ajouter un album\">
<input type=\"submit\" class=\"btn btn-primary btn-sm\" value=\"Partager\">
</form>

Voici les restriction apporté à ce formulaire dans le fichier restriction.php :
if (!empty($_POST['addmusic'])){
extract($_POST);
$valid = true;

if (empty($embedlink) || empty($singer) || empty($album) || empty($kind) || empty($name)){
$valid = false;
$erreurempty = "Tous les champs sont obligatoires.";
}

$checkSong = $bdd->query('SELECT songid FROM songs WHERE songname="'.$name.'" AND kind='.$kind.'');
if ($checkSong->rowCount()>0){
$valid = false;
$erreurtitre = "Ce titre à déjà été ajouté, essayé peut-être la vidéo, la chanson ou le karéoké.";
}

if (!empty($singer) && !empty($album)){
$check = $bdd->query('SELECT albid FROM albums WHERE albid='.$album.' AND artid='.$singer.'');
if ($check->rowCount()<1){
$valid = false;
$erreur = "Mauvais album avec le mauvais groupe.";
}
}

if (!empty($embedlink) && strlen($embedlink)<8){
$valid = false;
$erreurlen = "Votre extension de lien youtube est trop courte pour exister. Veuillez communiquer avec nous pour un soutien.";
}
if (!empty($embedlink) && strlen($embedlink)>100){
$valid = false;
$erreurlen = "Votre extension de lien youtube est trop longue pour exister. Veuillez communiquer avec nous pour un soutien.";
}

if ($valid){
$execute = $req->addMusic($userids,$embedlink,$album,$singer,$name,$kind);
$done = "Votre vidéos, chanson ou karéoké ".$name." a été ajouté correctement.";
}
}

et puis pour finir le code de la fonction addMusic dans le fichier fonction.php:

public function addMusic($userids,$embedlink,$album,$singer,$name,$kind) {
require ('query.inc.php');

$embedlink = strip_tags($embedlink);
$album = strip_tags($album);
$singer = strip_tags($singer);
$name = strip_tags($name);

$insert = $bdd->query('INSERT INTO songs (userid,artid,albid,songname,kind,link) VALUES ('.$userids.','.$singer.','.$album.',"'.$name.'",'.$kind.',"'.$embedlink.'")');

return $insert;
}

Je laisse action vide car normalement je me dit que le champs invisible renvoie une valeur de 1 donc non vide. Ce qui donne suite au restriction de ce formulaire et ainsi lorsque tous se termine, la page redirige sur elle même. Par contre on dirais qu'elle redirige deux fois car les utilisateurs non pas le droit d'ajouter une double chanson. Donc il renvoi l'erreur d'ajout en doublon mais m'affiche aussi le succès de l'ajout et on voit très bien qu'elle à été ajouté.

A voir également:

1 réponse

Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
12 mai 2014 à 21:01
Bonjour,
Tu utilise quoi pour ta redirection ?
(Au cas où que tu renvoi aussi les $_post, ça renverrai alors l'insert.)
0