Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: babawana, Jerem971, KingEwin, VemoTech
Ce topic a été résolu
Auteur Sujet: données qui ne s'écrivent pas dans la bdd

babawana

Messages: 5

Bonsoir, Je viens vers vous après mainte et mainte essais. Je ne comprends toujours pas pourquoi ? J'ai plusieurs table dont la table "membres" avec pseudo, email...et j'ai la table tokens, avec id_membre, tokens, tokens_attente Je ne comprends pas pourquoi quand je clique sur le submit, aucune information n'est retenu dans la bdd.Je souhaite entrer un nombre. Voici mon code


<?php
session_start();

 
include 'req.php';
 if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
   if(isset($_POST['formtokens'])) {
      if(isset($_POST['id_membre'],$_POST['tokens_attente']) AND !empty($_POST['id_membre']) AND !empty($_POST['tokens_attente'])) {
         $id_membre = htmlspecialchars($_POST['id_membre']);
         $attentetokens = htmlspecialchars($_POST['tokens_attente']);
         $id_destinatairetokens = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
         $id_destinatairetokens->execute(array($id_membre));
         $dest_exist = $id_destinatairetokens->rowCount();
         if($dest_exist == 1) {
            $id_destinatairetokens = $id_destinatairetokens->fetch();
            $id_destinatairetokens = $id_destinatairetokens['id'];
            $ins = $bdd->prepare('INSERT INTO tokens(id_membre,tokens_attente) VALUES (?,?)');
            $ins->execute(array($_SESSION['id'],$id_destinatairetokens,$attentetokens));
            $error = "Votre ajout a bien été effectué !";
         } else {
            $error = "Cet utilisateur n'existe pas...";
         }
      } else {
         $error = "Veuillez compléter tous les champs";
      }
   }
   $destinataires = $bdd->query('SELECT pseudo FROM membres ORDER BY pseudo');
 
 ?>

et le formulaire

<form method="POST" action="">
      <label>Destinataire:</label>
         <select name="id_membre">
            <?php while($d = $destinataires->fetch()) { ?>
            <option><?= $d['pseudo'] ?></option>
            <?php } ?>
         </select>
         <br /><br />
      <input type="text" placeholder="argent en attente" id="attentetokens" name="attentetokens" />
      <br /><br />
      <input type="submit" name="formtokens" value="Ajouter !" />
      <?php if(isset($error)) { 
         echo '<font color="red"'.$error.'</font>'; 
      } ?>
</form>

KingEwin

Messages: 4

Bonsoir @babawana[url=https://www.primfx.com/profil/babawana/]
[/url]
J'ai repris ton code est je les fait fonctionné. Il ya fait de nombreuses erreurs que je vais essayer de te lister pour que tu ne les refasses plus après.

Premièrement : Tu confond les champs name dans ton formulaire, ils sont vital pour la bonne réception des données en PHP. Le champ name doit exactement correspondre au champ POST ou GET que tu traite par la suite. Tu avait mis if(isset($_POST['pseudo'])), tu devais mettre ->  if(isset($_POST['id_membre']))  exemple :
 

Deuxièmement : La valeur du champs value dans un select->option est très importante, c'est cette valeur que contiendra ta variable php par la suite, toi tu ne l'avais pas spécifier, ta variable était donc vide a l'envoi du formulaire.

Troisièmement : Comme a dit @VemoTech, tu t'étais tromper a cette ligne -> $id_exist = $id->rowCount();
c'est plutôt -> $id_exist=$idtokens->rowCount(), puisque tu récupère la valeur de la variable $idtokens que tu as fait juste avant (c'est elle qui contient ta requête select). Ensuite, ta requête $idtokens = $id->fetch();  $idtokens = $id['id']; est inutile. puisque je te fais récupérer la valeur de l'id correspondant au pseudo choisie dans le select (grace a l'attribut value dont je te parlé plus haut). Et en plus, tu fais un rowCount() pour vérifier si l'id existe bien donc pas de soucis au niveau des erreurs.

Quatrièmement : Ce n'est pas un INSERT INTO que tu dois faire, mais un UPDATE. Les champs dont déjà renseigner dans ta BDD, alors il faut juste que tu modifie le champs que tu souhaite modifier selon l'utilisateur grace a son ID. En effet, une requête insert t'oblige a insérer un nouvelle ligne de tous les champs qui compose ta table.Un update lui modifie ce qu'on veut a une ligne déjà crée auparavant.

ps : Je te conseille d'utiliser la fonction var_dump($taVariable); ça te permet de faire du debbogage et connaitre la ou les valeurs de tes variables, ça fait gagner beaucoup de temps quand on est coincer 

CODE : 

HTML : 


PHP :
Publicité

Jerem971

Messages: 779

Hello @babawana,

C'est normal qu'à la ligne :
<form method="POST" action="">
"action" soit vide ? Puisque c'est là que l'action se fait, si c'est vide, les données sont envoyées où ?
Et tu n'as pas reçu de message d'erreur par rapport à la syntaxe du code ? Si oui ça pourrait aider à avancer 😉

KingEwin

Messages: 4

Salut @babawana

Quand tu essai d’insérer tes valeurs, dans ta requête prepare tu attend 2 paramètres (VALUES (?,?) ).


Cependant quand tu l’exécutes en bas, tu passes dans ton array 3 paramètre, la $session['id'], $id_destinatairetokens et $attentetokens c'est pour ça que ta requête ne s’insère pas.



Tu dois uniquement insérer les paramètres que tu demandes dans ta requête comme ceci :


Et si donc si tu souhaite faire une requête en y ajoutant le session id tu fais comme ceci :


De plus, tu as une erreur sur la récupération des données de ton formulaire avec ton POST. Tu enregistres dans la variable attentetokens ceci ->  $attentetokens = htmlspecialchars($_POST['tokens_attente']);
Mais 'tokens_attente' n'existe pas dans ton formulaire, tu dois avoir la même donnée que celle que tu as remplie dans le champs name du formulaire. C'est a dire 'attentetokens'. Donc tu auras maintenant :



Et pour répondre à la question de @Jerem971,on n'est pas obligé de spécifier une action sur un formulaire. Si l'action est vide il fera le traitement du formulaire sur la page courante (c'est a dire la même page).

babawana

Messages: 5

Merci pour vous reponses ! 
Comme ceci ?
   <form method="POST" action="">
      <label>Destinataire:</label>
         <select name="id_membre">
            <?php while($d = $destinataires->fetch()) { ?>
            <option><?= $d['pseudo'] ?></option>
            <?php } ?>
         </select>
         <br /><br />
      <input type="text" placeholder="argent en attente" id="tokens_attente" name="tokens_attente" />
      <br /><br />
      <input type="submit" name="formtokens" value="Ajouter !" />
      <?php if(isset($error)) { 
         echo '<font color="red"'.$error.'</font>'; 
      } ?>
   </form>



 
<?php 
session_start();

include 'req.php';

if(isset($_SESSION['id'])) {
      if(isset($_POST['formtokens'])) {
            if(isset($_POST['id_membre'],$_POST['tokens_attente'])) {
               $id_membre = htmlspecialchars($_POST['id_membre']);
               $tokens_attente = htmlspecialchars($_POST['tokens_attente']);
               $id_destinatairetokens = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
               $id_destinatairetokens->execute(array($id_membre));
               $dest_exist = $id_destinatairetokens->fetchColumn();
            if($dest_exist == 1) {
                  $id_destinatairetokens = $id_destinatairetokens->fetch();
                  $id_destinatairetokens = $id_destinatairetokens['id'];
                  $ins = $bdd->prepare(statement: 'INSERT INTO tokens([membres],id_membre,tokens_attente) VALUES (?,?,?)')
                  $ins->execute(array($_SESSION['id'],$id_destinatairetokens,$tokens_attente));
            $error = "Votre ajout a bien été effectué !";
         } else {
            $error = "Cet utilisateur n'existe pas...";
         }
      } else {
         $error = "Veuillez compléter tous les champs";
      }
   }
   $destinataires = $bdd->query('SELECT pseudo FROM membres ORDER BY pseudo');
 ?>


J'ai une erreur je pense à cause du 'statement'.
"Parse error: syntax error, unexpected ':', expecting ',' or ')' in /htdocs/ajout-tokens.php on line 17"

KingEwin

Messages: 4

Fais attention, à la ligne 19 tu as mis $ins = $bdd->prepare('INSERT INTO tokens([membre], id_me................). il ne faut pas mettre les "[ ]" moi je te l'es est mis en exemple ^^

Du coup ta requête sera comme ça : $ins = $bdd->prepare('INSERT INTO tokens(membre, id_membre, tokens_attente) VALUES(?,?,?)');

Et pour ton erreur je pense aussi avoir trouver, tu as oublié le ; a la fin de ta requête.

Que représente ton champs membre dans ta requête INSERT ? parce que tu lui passe après un SESSION['id'] donc ça doit être obligatoirement un champ de type int. Tu devrais plutôt l'appeler id_membre au lieu de membre (c'est une convention en générale). ça peut porter a confusion 😁

babawana

Messages: 5

Pour faire + simple, j'ai finalement créé une nouvelle colonne dans ma table 'membres' nommée 'tokens_attente'.
Rien ne fonctionne toujours :(
Pour ce qui est de mon 'id' il est en 'AI' int 11.

Voilà, maintenant, mon code refait.

<?php session_start();

include 'req.php';

if(isset($_SESSION['id'])) {
   if(isset($_POST['formtokens'])) {
      if(isset($_POST['pseudo'],$_POST['tokens_attente'])) {
         $pseudo = ($_POST['pseudo']);
         $tokens_attente = ($_POST['tokens_attente']);
         $idtokens = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
         $idtokens->execute(array($pseudo));
         $id_exist = $id->rowCount();
         if($id_exist == 1) {
            $idtokens = $id->fetch();
            $idtokens = $id['id'];
            $ins = $bdd->prepare('INSERT INTO membres(id,pseudo,tokens_attente) VALUES (?,?,?)');
            $ins->execute(array($_SESSION['id'],$pseudo,$tokens_attente));
            $error = "Votre ajout a bien été effectué !";
         } else {
            $error = "Cet utilisateur n'existe pas...";
         }
      } else {
         $error = "Veuillez compléter tous les champs";
      }
   }
   $destinataires = $bdd->query('SELECT pseudo FROM membres ORDER BY pseudo');

 ?>

HTML

<form method="POST" action="">
      <label>Destinataire:</label>
         <select name="id_membre">
            <?php while($d = $destinataires->fetch()) { ?>
            <option><?= $d['pseudo'] ?></option>
            <?php } ?>
         </select>
         <br /><br />
      <input type="text" placeholder="argent en attente" id="tokens_attente" name="tokens_attente" />
      <br /><br />
      <input type="submit" name="formtokens" value="Ajouter !" />
      <?php if(isset($error)) { 
         echo '<font color="red"'.$error.'</font>'; 
      } ?>
   </form>
 Merci encore à toi 😋

VemoTech

Messages: 26

Bonjour @babawana !
Ton problème d'insertion des données du formulaire dans ta bdd est dû à une variable non déclarée : $id !
<?php $id_exist = $id->rowCount(); ?>

C'est au niveau de ta vérification de l'id 😉
Le code ressemblerais plutôt à cela :
<?php 
   //Variables
   $pseudo = htmlspecialchars($_POST['pseudo']);
   $tokens_attente = htmlspecialchars($_POST['tokens_attente']);

   $idtokens = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
   $idtokens->execute(array($pseudo));
   $id_exist = $idtokens->rowCount();
   if($id_exist == 1) {
      //mon code d'insertion de bdd
   }
?>

Et n'oublie pas d'avoir toujours le réflexe d'ajouter le htmlspecialchars dans tes $_POST 😉
En espérant t'avoir aidé,

~A

babawana

Messages: 5

Merci beaucoup encore pour votre aide 😉 Mais toujours aucun résultat, je ne comprends pas, j'ai visionné plusieurs tutos, mais toujours rien.
Je vous explique ce que je souhaites faire avec ce code. 
Je veux modifier le champ tokens_attente qui a pour valeur 0, en toute autre valeur. (1,2,3..100...200..)
Je souhaite modifier ce champs pour une seul personne que je choisi dans mon <select>. 
C'est pourtant ce que j'ai entreprit de faire, mais toujours aucun resultat. 

<?php 
session_start();
include 'req.php';
if(isset($_SESSION['id'])) {
   if(isset($_POST['formtokens'])) {
      if(isset($_POST['pseudo'],$_POST['tokens_attente'])) {
        $pseudo = htmlspecialchars($_POST['pseudo']);
         $tokens_attente = htmlspecialchars($_POST['tokens_attente']);
         $idtokens = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
          $idtokens->execute(array($pseudo));
         $id_exist = $idtokens->rowCount();
         if($id_exist == 1) {
            $idtokens = $id->fetch();
            $idtokens = $id['id'];
            $ins = $bdd->prepare('INSERT INTO membres(id,pseudo,tokens_attente) VALUES (?,?,?)');
            $ins->execute(array($_SESSION['id'],$pseudo,$tokens_attente));
            $error = "Votre ajout a bien été effectué !";
         } else {
            $error = "Cet utilisateur n'existe pas...";
         }
      } else {
         $error = "Veuillez compléter tous les champs";
      }
   }
   $destinataires = $bdd->query('SELECT pseudo FROM membres ORDER BY pseudo');
 ?>


Merci

KingEwin

Messages: 4

Bonsoir @babawana[url=https://www.primfx.com/profil/babawana/]
[/url]
J'ai repris ton code est je les fait fonctionné. Il ya fait de nombreuses erreurs que je vais essayer de te lister pour que tu ne les refasses plus après.

Premièrement : Tu confond les champs name dans ton formulaire, ils sont vital pour la bonne réception des données en PHP. Le champ name doit exactement correspondre au champ POST ou GET que tu traite par la suite. Tu avait mis if(isset($_POST['pseudo'])), tu devais mettre ->  if(isset($_POST['id_membre']))  exemple :
 

Deuxièmement : La valeur du champs value dans un select->option est très importante, c'est cette valeur que contiendra ta variable php par la suite, toi tu ne l'avais pas spécifier, ta variable était donc vide a l'envoi du formulaire.

Troisièmement : Comme a dit @VemoTech, tu t'étais tromper a cette ligne -> $id_exist = $id->rowCount();
c'est plutôt -> $id_exist=$idtokens->rowCount(), puisque tu récupère la valeur de la variable $idtokens que tu as fait juste avant (c'est elle qui contient ta requête select). Ensuite, ta requête $idtokens = $id->fetch();  $idtokens = $id['id']; est inutile. puisque je te fais récupérer la valeur de l'id correspondant au pseudo choisie dans le select (grace a l'attribut value dont je te parlé plus haut). Et en plus, tu fais un rowCount() pour vérifier si l'id existe bien donc pas de soucis au niveau des erreurs.

Quatrièmement : Ce n'est pas un INSERT INTO que tu dois faire, mais un UPDATE. Les champs dont déjà renseigner dans ta BDD, alors il faut juste que tu modifie le champs que tu souhaite modifier selon l'utilisateur grace a son ID. En effet, une requête insert t'oblige a insérer un nouvelle ligne de tous les champs qui compose ta table.Un update lui modifie ce qu'on veut a une ligne déjà crée auparavant.

ps : Je te conseille d'utiliser la fonction var_dump($taVariable); ça te permet de faire du debbogage et connaitre la ou les valeurs de tes variables, ça fait gagner beaucoup de temps quand on est coincer 

CODE : 

HTML : 


PHP :

babawana

Messages: 5

Salut, @kingewin 
Vraiment un grand merci, je suppose que tu y as passé beaucoup de temps.. 
J'avais pas trop de temps cette semaine, examen.. 
Seulement, les ' Statement: ' ne passe absolument pas. 

        $idtokens = $bdd->prepare( statement: 'SELECT id FROM membres WHERE id = ?');

Autant dire que je ne sais pas a quoi cela sert, j'ai chercher sur PHP, W3schools, je comprends rien :(
Peut être est-ce un plugin à ajouter dans  sublim text ?
A chaque fois que je le mets, ça me met cette erreur :
'Parse error: syntax error, unexpected ':', expecting ',' or ')' in /htdocs/ajout-tokens.php on line 10'
Merci

KingEwin

Messages: 4

Salut,

Ne fais pas attention au statement, ils sont là en élément « decoratif « , c’est Mon IDE qui le rajoute automatiquement, statement veut dire requête, donc en gros il attend une requête sql. Toi ne le rajoute pas 

babawana

Messages: 5

Salut, 
C'est bon !
Le problème est maintenant réglé, merci à tous de m'avoir aidé ! :P


Vous devez vous connecter ou créer un compte pour poster une réponse