Bonjour,
Suite aux réponses que j'ai reçu dans un de mes dernier posts.
J'ai compris que je devais tester si la fonction execute vaut true (lors de l'envoi d'un formulaire).
J'ai donc essayer.
Mais j'ai le droit à une erreur, en gros elle dit que la fonction execute n'est pas défini à la ligne 20 (Correspondant à l'endroit ou je teste si elle vaut true ou false).
Je vous montre l'intégralité de mon code car je pense que le problème ne vient pas spécialement de la ligne 20
<?php
require 'cnx.php';
if(!empty($_POST)){ //Si les variables POST ne sont pas vide on continue
//Récupération des données depuis le formulaire
$lastname = $_POST['lastname'];
$firstname = $_POST['firstname'];
$nickname = $_POST['nickname'];
$email = $_POST['email'];
$password = sha1($_POST['password']);
//Insertion des données dans la bdd
$q = array('lastname' => $lastname, 'firstname' => $firstname, 'nickname' => $nickname, 'email' => $email, 'password' => $password);
$sql = 'INSERT INTO users (lastname, firstname, nickname, email, password) VALUES (:lastname, :firstname, :nickname, :email, :password)';
$req = $cnx->prepare($sql);
$req->execute($q);
}else{//Sinon on ne fait rien.
}
//L'insertion s'est-elle bien dérouler ?
if($req -> execute($q)){
header('Location:index.php'); //Oui, on redirige vers la page de connnexion.
}else{
header('Location:404.php'); //Non, on redirige vers la page d'erreur.
}
?>
Il te suffit de faire comme ceci :
//Insertion des données dans la bdd
$q = array('lastname' => $lastname, 'firstname' => $firstname, 'nickname' => $nickname, 'email' => $email, 'password' => $password);
$sql = 'INSERT INTO users (lastname, firstname, nickname, email, password) VALUES (:lastname, :firstname, :nickname, :email, :password)';
$req = $cnx->prepare($sql);
if ($req->execute($q)) { // Changement ici.
header('Location: index.php');
} else {
header('Location: 404.php');
}
J'ai fais une petite modification, et l'erreur à changer
if($req=$cnx->execute($q)){
header('Location:index.php'); //Oui, on redirige vers la page de connnexion.
}else{
header('Location:404.php'); //Non, on redirige vers la page d'erreur.
}
L'erreur :
Call to undefined method PDO::execute()
Bonsoir Mika445
1) La méthode execute s'applique à l'objet statement et pas à la connection.
2) Tu as oublié les ':' devant chaque paramètre
3) englobes tes requêtes par des try/catch pour voir les erreurs
" 1) La méthode execute s'applique à l'objet statement et pas à la connection."
Pourrais-tu être plus précis ?
Tu l'as pourtant bien fait dans ton premier code
$req = $cnx->prepare($sql);
$req->execute($q);
le statement c'est ce que tu nommes $req
"Tu l'as pourtant bien fait dans ton premier code"
J'ai ré-utiliser un code fait depuis un tuto de Graf' sur les espace membres.
ta petite modification devrait ressembler à ça
if($req->execute($q)){
header('Location:index.php'); //Oui, on redirige vers la page de connnexion.
}else{
header('Location:404.php'); //Non, on redirige vers la page d'erreur.
}
C'est un véritable casse tête.
Car avec le code de test (celui pour savoir si elle vaut true ou false) on me dit que req n'est pas défini.
Et quand j'isole le code avec des commentaires, je n'ai plus ces erreurs.
Si ton $req n'est pas défini, c'est que tu passes par l'autre branche du if
c-a-d que ton $_POST est empty
fait un var_dump($_POST) pour en être sûr
Bah c'est normal, car au début de mon code je défini une condition :
Si les POST ne sont pas vide on continu le code. Sinon rien.
J'ai fais ça pour éviter les erreurs du genre "Le champ email n'est pas défini".
Et oui le var_dump me retourne bien un "Empty".
EDIT :
J'ai remplacer le empty par un isset et j'ai (comme prévu. Bizarrement) le droit à ça (Une erreur par donnée email, nickname etc..) :
Undefined index: password
vérifie bien que dans le formulaire de saisie, chaque input doit avoir un attribut name, c'est la valeur de cet attribut qu'on retrouve comme index du tableau $_POST
par exemple
<input type="text" name="firstname" >
vérifie aussi que ton form a bien la method="POST"
<form action="register.php" method="POST">
<input type="text" name="lastname" class="input" placeholder="Nom :">
<br>
<input type="text" name="firstname" class="input" placeholder="Prénom:">
<br>
<input type="text" name="nickname" class="input" placeholder="Nom d'utilisateur :">
<br>
<input type="email" name="email" class="input" placeholder="E-mail :">
<br>
<input type="password" name="password" class="input" placeholder="Mot de passe :">
<br>
<input type="submit" value="Inscription" class="submitform">
</form>
Bah, en faite au dessus du formulaire c'est que de l'HTML (rien à voir donc). Et sinon j'ai poster la totalité de mon code PHP.
@Lartak,
Merci, mon code fonctionne !
J'essaye de comprendre ce qui a changer dans le code pour que ça fonctionne.
Si je ne trompe pas, ce qui posait problème c'est le else en dessous de la toute première condition.
La condition "Ou sinon on ne fait rien".
//Insertion des données dans la bdd
$q = array('lastname' => $lastname, 'firstname' => $firstname, 'nickname' => $nickname, 'email' => $email, 'password' => $password);
$sql = 'INSERT INTO users (lastname, firstname, nickname, email, password) VALUES (:lastname, :firstname, :nickname, :email, :password)';
$req = $cnx->prepare($sql);
$req->execute($q);
}else{//Sinon on ne fait rien.
}
Rien n'a changé, ton pb venait du $_POST qui ne contenait pas les valeurs.
dis nous comment tu procèdes
Vérifie aussi ce que ton formulaire envoie, en utilisant les outils developpeur (F12) , c'est très pratique
Sauf que vu les erreurs recouvrait ma page je n'avais pas accès au formulaire.
Donc c'était une boucle sans fin en quelque sorte.
Pas de value > Rien à envoyer > Blocage du code en attendant qu'il y est des valeurs > Blocage du formulaire à cause des erreurs > Pas de value.