Bonjour,
Via un api, je récupère des URL que j'affiche dans un tableau et pour chacune des URL, j'ai un bouton à côté qui doit permettre d'insérer l'URL dans une bdd. Je ne parviens pas à manipuler correctement mon code et il insère toutes les URL dans le tableau et non celle ciblée.
Décrivez ici votre code ou ce que vous cherchez à faire
foreach ($bills as $bill):
$pdfUrl = $bill["pdfUrl"];
echo '<form method="post">';
echo '<button name="add" value="Ajouter">ajouter</button>' ;
echo" </form>";
if(isset($_POST["add"])) {
echo $pdfUrl;
$pdoStat->bindValue(':url', $pdfUrl, PDO::PARAM_STR);
$executeIsOk = $pdoStat->execute();
}
endforeach;
Comme expliqué avant, dans mon tableau chaque colonne contient une URL avec à côté un bouton pour ajouter cette URL dans une bdd.
Quand je clique sur n'importe quel bouton, cela insère toutes les URL. Merci à vous si vous pouvez m'aider !
$pdoStat = $connect->prepare('SELECT * FROM bills_DF261465 WHERE id BETWEEN 1 AND 3');
$executeIsOk = $pdoStat->execute();
$bills = $pdoStat->fetchAll();
$pdoStat = $connect->prepare('INSERT INTO print VALUES (NULL, :url)');
if(isset($_POST["add"])) {
$pdoStat->bindValue(':url', $_POST["add"], PDO::PARAM_STR);
if ($pdoStat->execute())
echo "url ajouté";
else
echo "erreur d'ajout pour : ".$_POST["add"];
}
foreach ($bills as $bill):
echo '<form method="post">';
echo '<button type="submit" name="add" value="'.$bill["pdfUrl"];.'">ajouter</button>' ;
echo" </form>";
endforeach;
Je te mets le code au complet ça va de paraître plus clair :
$connect = new PDO('mysql:host=localhost;dbname=*****', '****','*****');
$pdoStat = $connect->prepare('SELECT * FROM bills_DF261465 WHERE id BETWEEN 1 AND 3');
$executeIsOk = $pdoStat->execute();
$bills = $pdoStat->fetchAll();
$pdoStat = $connect->prepare('INSERT INTO print VALUES (NULL, :url)');
foreach ($bills as $bill):
$pdfUrl = $bill["pdfUrl"];
echo '<form method="post">';
echo '<button name="add" value="Ajouter">ajouter</button>' ;
echo" </form>";
if(isset($_POST["add"])) {
echo $pdfUrl;
$pdoStat->bindValue(':url', $pdfUrl, PDO::PARAM_STR);
$executeIsOk = $pdoStat->execute();
}
endforeach;
Voila donc je récupère des URL via une table et je souhaiterai en transmettre certaines dans une autre. Dans un premier temps les récupères dans la variable $bills puis je les affiche avec chacune leur bouton ajouter via mon foreach.
comme je dis le formulaire est vide et identique à chaque fois (regarde dans l'inspecteur de code)
Donc si tu appuis sur le bouton Ajouter, il n'y a rien qui dit que c'est cette url qu'il doit enregistrer donc il enregistre tout
Tu pourras optimiser en faisant avec des checkbox. comme ça tu pourras en faire plusieurs en même temps.
Mais ça c'est un autre sujet
Comment je pourrais optimiser ça avec les checkbo x? ça m'interresse pas mal :)
Merci à toi.
Tu affiches chaque url dans une checkbox.
Lors du traitement tu parcours le tableau retourné par les checkbox et tu inséres les liens.
Hmm ok je vois l'idée mais comment la mettre en place ? je fais :
foreach ($bills as $bill):
echo '<form method="post">';
echo '<input type="checkbox" value="'.$bill["url"].'" /> <br />';
echo" </form>";
mais comment je parcour le tableau ?
Non là tu fais refais la même chose avec une seul checkbox
Ton formulaire dpoit englober TOUTES les urls/checkbox et de plus il faut un name pour tes checkbox (cf la doc)
Comment parcourir le tableau ? Alors que tu me montre un code qui parcourt le tableau....
Je ne comprend pas, je reprend l'ancien code, je modifie en mettant des checkbox comme ceci :
if(isset($_POST["add"])) {
$pdoStat->bindValue(':url', $_POST["add"], PDO::PARAM_STR);
if ($pdoStat->execute())
echo "url ajouté";
else
echo "erreur d'ajout pour : ".$_POST["add"];
}
foreach ($bills as $bill):
echo '<form method="post">';
echo '<input type="checkbox" name="add" value="'.$bill["url"].'" /> <br />';
echo "</form>";
endforeach;
Ou dois-je mettre mon submit ?
Je cite : "Ton formulaire doit englober TOUTES les urls/checkbox et de plus il faut un name pour tes checkbox (cf la doc)"
La tu fais un formulaire pour chaque checbox
<form ....>
<?php
foreach ...... {
?>
<label>mon url </label>
<input checbox..... >
<?php
}
?>
<input submit>
</form
Je te laisse adapter
Merci à toi
$checkboxes = isset($_POST['checkbox']) ? $_POST['checkbox'] : array();
foreach($checkboxes as $value) {
echo $value;
$pdoStat->bindValue(':url', $value, PDO::PARAM_STR);
$pdoStat->execute();
}
?>
<form method="post" >
<? foreach ($bills as $bill) {;?>
<label><input type="checkbox" name="checkbox[]" value="<?echo $bill["pdfUrl"]?>" /> <?echo $bill["pdfUrl"]?></label><br />
<? }?>
<input type="submit" name="submit" value="Envoyer"/>
</form>