Bonjour,

Voila je rencontre un petit problème avec un de mes code:

J'ai créé une page pour essayer de faire un Update selon un ID. Mais il ne fonctionne pas comme je le souhaite.

En effet si je créer plusieurs champs dans ma table il ne m'update que le 1er et reste bloqué sur celui-ci.
J'ai fait un var_dump et il reste bloqué sur 1.

Si en revanche je fais une boucle While pour afficher tout les champs il ne m'update que le dernier.

j'ai essayé de faire par Nom et par Id et cela ne fonctionne pas non plus...

Je vous met le code concerné ainsi qu'une image de ma table.


<?php   

if(isset($_SESSION['id']) AND !empty($_SESSION['id']))

            {

                $id_planete_utilise=$_SESSION['planete_utilise'];

                $req_affichage_defense=$bdd->prepare('SELECT * FROM defense WHERE id_planete = ?');
                $req_affichage_defense->execute(array($id_planete_utilise));
                while($affichage_defense=$req_affichage_defense->fetch())
                {

                    $description_defense=$affichage_defense['description'];
                    $temps=$affichage_defense['temps'];

                    $nom_defense=$affichage_defense['nom_defense'];
                    $prix_gold=$affichage_defense['prix_gold'];
                    $prix_titane=$affichage_defense['prix_titane'];
                    $prix_cristal=$affichage_defense['prix_cristal'];
                    $prix_orinia=$affichage_defense['prix_orinia'];
                    $prix_orinium=$affichage_defense['prix_orinium'];
                    $prix_organique=$affichage_defense['prix_organique'];

                    $attaque_def=$affichage_defense['attaque'];
                    $defense_def=$affichage_defense['defense'];
                    $nombre_defense=$affichage_defense['nombre_defense'];

?>

<form method="POST" name="valider_achat">
<input type="submit"  class="valider_achat" value="" name="valider_achat"></input>
</form>

<?php

            }$req_affichage_defense->closeCursor();         /*fin whilde */
}
                if(isset($_POST['valider_achat']))
                {

                        $req_achat_organique = $bdd->prepare('UPDATE defense SET nombre_defense = nombre_defense+1 ');
                        $req_achat_organique->execute(array());

                        echo " Test Ok +1.";
                            /* Permet de rediriger la page */
                            $delai=1; 
                            $url='../vue/defense.php';
                            header("Refresh: $delai;url=$url");
                }

                ?>

(Pour info sur le code pour l'exemple j'ai retiré le WHERE puisqu'il ne fonctionnait pas)
Et voici le lien de la table en image:

http://hpics.li/40e93e5

Merci d'avance

2 réponses


malibx
Auteur
Réponse acceptée

Ahaha c'est gentil au moins d'essayer, je suis en train de finir les test mais a priori la solution a été trouvé, sur le chat il me manquait un hidden!

Salut,

Je suis pas sur de se que tu souhaites faire.
Je suis encore en apprentissage de php, alors ma reponse vaudra ce qu'elle vaudra hein ^^ :
En gros fetch ne retourne qu'une ligne comme expliqué sur la documentation de php.
Donc t'es obligé de preciser quelle ligne va être update par un id unique.
Ton input ne renvoi rien non ? et du coup ton update s'applique sur toute tes lignes là.

Désolé finalement je pose plus de question que de reponse.
mais vu qu'y a pas de personne callée qui t'a répondu.