données qui ne s'écrivent pas dans la bdd
- Accueil
- Forum
- Programmation
- PHP
- données qui ne s'écrivent pas dans la bdd
babawana Le 8 janvier 2019 à 22:43 (Édité le 25 janvier 2019 à 17:54)
<?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 Le 9 janvier 2019 à 21:57 (Édité le 9 janvier 2019 à 22:00)
[/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 :
Profil introuvable Le 9 janvier 2019 à 02:22 (Édité le 9 janvier 2019 à 02:24)
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 Le 9 janvier 2019 à 13:09 (Édité le 9 janvier 2019 à 13:25)
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 Le 9 janvier 2019 à 14:16 (Édité le 1 janvier 1970 à 01:00)
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 Le 9 janvier 2019 à 15:52 (Édité le 1 janvier 1970 à 01:00)
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 Le 9 janvier 2019 à 17:47 (Édité le 1 janvier 1970 à 01:00)
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 😋 Doppler Le 9 janvier 2019 à 19:34 (Édité le 9 janvier 2019 à 19:38)
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 Le 9 janvier 2019 à 20:40 (Édité le 1 janvier 1970 à 01:00)
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 Le 9 janvier 2019 à 21:57 (Édité le 9 janvier 2019 à 22:00)
[/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 Le 11 janvier 2019 à 18:23 (Édité le 11 janvier 2019 à 18:24)
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 Le 12 janvier 2019 à 00:51 (Édité le 1 janvier 1970 à 01:00)
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 Le 12 janvier 2019 à 13:20 (Édité le 1 janvier 1970 à 01:00)
C'est bon !
Le problème est maintenant réglé, merci à tous de m'avoir aidé ! :P