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
Réponse acceptée
$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;

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

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

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

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

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

Super, merci beaucoup !

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>