[RESOLU] problème script inscription

Eléphant du PHP | 345 Messages

17 févr. 2021, 12:43

Bonjour,
Je bloque depuis plusieurs heures sur ce script qui plante.
Parse error: syntax error, unexpected '<' in C:\wamp64\www\inscri_connex_membre.php on line 50
(la ligne 50 c'est la fin du script)
<?php
if( session_id()=='' ){ session_start(); } // démarrage SESSION
// connexion a la bdd
include_once 'config.php';
unset($_SESSION['islogged']);
unset($_SESSION['pseudo']);
// --------------
// 1- INSCRIPTION
$err_inscription = array();
if(isset($_POST['inscrimembre']) )
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$mail = htmlspecialchars($_POST['mail']);
$pass_hache = password_hash($_POST['password1'], PASSWORD_DEFAULT);
$sexe = htmlspecialchars($_POST['sexe']);
if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['password1']) AND !empty($_POST['password2']) AND !empty($_POST['sexe'] ))
{
$pseudolength = strlen($pseudo);
if($mail == $mail)
{
if(filter_var($mail, FILTER_VALIDATE_EMAIL))
{
if ($_POST["password1"] == $_POST["password2"])
{
// INSERT en bdd
$pdostat = $objetpdo->prepare('INSERT INTO membres (pseudo, password1, mail, sexe) VALUES(:pseudo, :password1, :mail, :sexe);');
$pdostat->bindvalue(':pseudo',$_POST['pseudo'],PDO::PARAM_STR);
$pdostat->bindvalue(':password1',password_hash($_POST["password1"],PASSWORD_DEFAULT),PDO::PARAM_STR);
$pdostat->bindvalue(':mail',$_POST['mail'],PDO::PARAM_STR);
$pdostat->execute();
// Mise en SESSION
$_SESSION['islogged'] = true;
$_SESSION['pseudo'] = $_POST['pseudo'];
// on redirige vers l'espace membre
header('location:membre.php');
exit();
}
else
{
$err_inscription[] = 'Les deux mots de passe sont différents.';
}
}
else
{
$err_inscription[] = 'Remplissez tous les champs obligatoires.';
}
}

Mammouth du PHP | 2703 Messages

17 févr. 2021, 14:03

il faut les } pour tous les if.

Eléphant du PHP | 345 Messages

17 févr. 2021, 16:41

Désolé, non. J'ai ajouté les deux accolades fermantes et manquantes et c'est toujours la même erreur.

Eléphant du PHP | 345 Messages

17 févr. 2021, 23:47

Nouvelle erreur
Notice: Undefined variable: objetpdo in C:\wamp64\www\inscri_connex_membre.php on line 27
Error: Call to a member function prepare() on null in C:\wamp64\www\inscri_connex_membre.php on line 27

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 févr. 2021, 11:20

Salutations !

La première erreur t'indiquait effectivement un problème d'équilibre entre les parenthèses et accolades ouvertes et fermées (si tu en ouvres plus que tu n'en fermes, php va chercher jusqu'à la fin du script s'il trouve l'accolade ou la parenthèse fermante qui lui manque et t'indique une erreur en fin de script :))

Le nouveau message indique que tu fais appel à la variable $objetpdo en ligne 27 de ton script, alors que celle-ci n'a pas été définie au préalable. Cette variable étant nulle, tu ne peux pas faire appel à une de ses méthodes et le prepare() ne peut donc pas fonctionner. Il te manque quelque chose du genre " $objetpdo = new PDO(...); " avec les informations de connexion à ta base de données.

Celles-ci sont peut être dans ton script config.php, mais n'initialise pas de variable nommée $objetpdo. Il suffit dans ce cas de juste faire correspondre les deux :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 345 Messages

19 févr. 2021, 19:07

merci Ryle. Correction OK par rapport au config.php.
A présent, il n'y a plus aucun message d'erreur mais il ne se passe rien une fois le formulaire inscription rempli....

Code : Tout sélectionner

<?php if( session_id()=='' ){ session_start(); } // démarrage SESSION unset($_SESSION['islogged']); unset($_SESSION['pseudo']); // connexion a la bdd include_once 'config.php'; // -------------- // 1- INSCRIPTION $err_inscription = array(); if(isset($_POST['inscrimembre']) ) { $pseudo = ($_POST['pseudo']); $mail = ($_POST['mail']); $pass_hache = password_hash($_POST['password1'], PASSWORD_DEFAULT); $sexe = ($_POST['sexe']); if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['password1']) AND !empty($_POST['password2']) AND !empty($_POST['sexe'] )) { $pseudolength = strlen($pseudo); if($mail == $mail) { if(filter_var($mail, FILTER_VALIDATE_EMAIL)) { if ($_POST["password1"] == $_POST["password2"]) { // INSERT en bdd $pdostat = $bdd->prepare('INSERT INTO membres (pseudo, password1, mail, sexe) VALUES(:pseudo, :password1, :mail, :sexe);'); $pdostat->bindvalue(':pseudo',$_POST['pseudo'],PDO::PARAM_STR); $pdostat->bindvalue(':password1',password_hash($_POST["password1"],PASSWORD_DEFAULT),PDO::PARAM_STR); $pdostat->bindvalue(':mail',$_POST['mail'],PDO::PARAM_STR); $pdostat->execute(); // Mise en SESSION $_SESSION['islogged'] = true; $_SESSION['pseudo'] = $_POST['pseudo']; // on redirige vers l'espace membre header('location:membre.php'); exit(); } else { $err_inscription[] = 'Les deux mots de passe sont différents.'; } } else { $err_inscription[] = 'Remplissez tous les champs.'; } } } } ?>

Eléphant du PHP | 345 Messages

20 févr. 2021, 19:59

J'ai téléchargé Php Storm et ai rajouté les accolades fermantes qui manquaient.
j'ai vu en effet qu'il y avait plein de NBSP affichés entre pas mal de lignes du code!

J'ai modifié aussi le parametre BCRYPT qui n'était pas apprécié en DEFAULT.

L'inscription a fonctionné.

Code : Tout sélectionner

<?php if( session_id()=='' ) { session_start(); } // connexion a la bdd include_once 'config.php'; unset($_SESSION['islogged']); unset($_SESSION['pseudo']); // -------------- // 1- INSCRIPTION $err_inscription = array(); if(isset($_POST['inscrimembre'])) { /* Récupération des variables issues du formulaire par la méthode post*/ $pseudo = ($_POST['pseudo']); $mail = ($_POST['mail']); $pass_hache = password_hash($_POST['password1'], PASSWORD_DEFAULT ); $sexe = ($_POST['sexe']); /* Teste que les valeurs ne sont pas vides ou composées uniquement d'espaces */ if(!empty($_POST['pseudo'])AND !empty($_POST['mail']) AND !empty($_POST['password1']) AND !empty($_POST['password2']) AND !empty($_POST['sexe'] )) { $pseudolength = strlen($pseudo); if ($pseudolength <= 20) { $reqpseudo = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ?"); $reqpseudo->execute(array($pseudo)); $pseudoexist = $reqpseudo->fetchColumn(); if ($pseudoexist == 0) { if($mail == $mail) { if(filter_var($mail, FILTER_VALIDATE_EMAIL)) { $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?"); $reqmail->execute(array($mail)); $mailexist = $reqmail->fetchColumn(); if ($mailexist == 0) { if ($_POST["password1"] == $_POST["password2"]) { // INSERTION en bdd $pdostat = $bdd->prepare("INSERT INTO membres (pseudo, password1, mail, sexe, date_inscription) VALUES(:pseudo, :password1, :mail, :sexe, NOW());"); $pdostat->bindvalue(':pseudo',$_POST['pseudo'],PDO::PARAM_STR); $pdostat->bindvalue(':password1',password_hash($_POST["password1"],PASSWORD_DEFAULT ),PDO::PARAM_STR); $pdostat->bindvalue(':mail',$_POST['mail'],PDO::PARAM_STR); $pdostat->bindvalue(':sexe',$_POST['sexe'],PDO::PARAM_STR); $pdostat->execute(); // Mise en SESSION $_SESSION['islogged'] = true; $_SESSION['pseudo'] = $_POST['pseudo']; // on redirige vers l'espace membre header('location:membre.php'); exit(); } else { $err_inscription[] = 'TOUS LES CHAMPS SONT REQUIS.'; } } else { $err_inscription[] = 'LE PSEUDO NE DOIT PAS DEPASSER 20 CARACTERES !'; } } else { $err_inscription[] = 'CE PSEUDO EXISTE DEJA.'; } } else { $err_inscription[] = 'LES MOTS DE PASSE SONT DIFFÉRENTS !'; } } else { $err_inscription[] = 'CET EMAIL EST INVALIDE.'; } } } } ?>