Insertion ciblée dans BDD

Par Nicolas.L, il y a 6 ans


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.

Ce que je fais

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;

Ce que je veux

Comme expliqué avant, dans mon tableau chaque colonne contient une URL avec à côté un bouton pour ajouter cette URL dans une bdd.

Ce que j'obtiens

Quand je clique sur n'importe quel bouton, cela insère toutes les URL. Merci à vous si vous pouvez m'aider !

16 réponses

Carouge10, il y a 6 ans

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

Carouge10, il y a 6 ans

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

Nicolas.L, il y a 6 ans

D'accord donc comment dois-je faire pour en désigner une ?

Carouge10, il y a 6 ans

Bonjour,
Ton formulaire est vide, il devrait contenir le lien

Nicolas.L, il y a 6 ans

Bonjour,
C'est ma variale $pdfUrl qui contient le lien.

Carouge10, il y a 6 ans

Alors le formulaire est inutile et où est la requête ?

Nicolas.L, il y a 6 ans

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.

Carouge10, il y a 6 ans
$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;
Nicolas.L, il y a 6 ans

Super, merci beaucoup !

Nicolas.L, il y a 6 ans

Comment je pourrais optimiser ça avec les checkbo x? ça m'interresse pas mal :)
Merci à toi.

Carouge10, il y a 6 ans

Tu affiches chaque url dans une checkbox.
Lors du traitement tu parcours le tableau retourné par les checkbox et tu inséres les liens.

Nicolas.L, il y a 6 ans

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 ?

Carouge10, il y a 6 ans

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....

Nicolas.L, il y a 6 ans

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 ?

Carouge10, il y a 6 ans

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

Nicolas.L, il y a 6 ans

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>