PHP

Erreur de syntaxe en PHP 2

Non Résolu

Bonjour, je suis les cours pas à pas pour créer son site, cependant je ne sais pas comment enregistrer ma clé dans ma base de donnée. Où se trouve-t-elle? Et comment l'enregistrer dans la BDD?


je remet ici l'extrait de l'énoncé:

"Avant d'insérer les informations pour notre nouvel utilisateur nous allons commencer par générer notre token. Pour cela nous allons utiliser la fonction random_bytes et la fonction bin2hex afin de nous donner une clé.


// bin2hex(random_bytes($length))$token = bin2hex(random_bytes(12)); // Exemples:// 39e9289a5b8328ecc4286da11076748716c41ec7fb94839a689f7dac5cdf5ba8bdc9a9acdc95b95245f80a00// On insert nos données dans la table utilisateur$DB->insert("INSERT INTO utilisateur (nom, prenom, mail, mdp, date_creation_compte, token) VALUES     (?, ?, ?, ?, ?, ?)",     array($nom, $prenom, $mail, $mdp, $date_creation_compte, $token));


N'oubliez pas d'enregistrer votre clé dans votre base de données."


//=====Ajout du message au format HTML     
$contenu = '<p>Bonjour ' . $req['nom'] . ',</p><br>
 <p>Veuillez confirmer votre compte <a href="conf.php?id=' . $req['id'] . '&token=' . $token . '">Valider</a><p>';
           
mail($mail_to, 'Confirmation de votre compte', $contenu, $header);




header('Location: index.php');
exit;


Ensuite j'ai une erreur: Parse error: syntax error, unexpected ' ' (T_STRING) in /opt/lampp/htdocs/projetweb/inscription.php on line 3 que je n'arrive pas à résoudre dans le code source "inscription.php"


Je n'ai pas mis tout le code car l'erreur s'affiche dans cette partie.

1445 vues
17 avril 2020 à 17:06 (Édité)
Cette pub permet au site de vivre ...

21 commentaires

@elodiep


C'est comme quand tu veux crypter un mot de passe lors d'une inscription, sauf qu'on ne va pas utiliser le cryptage SHA1 mais bin2hex


Voila un exemple de cryptage


<?php

// On réceptionne le password envoyé par le formulaire

$password = $_POST['password'];

// On hash le password
$password = sha1($password);

// On enregistre dans la bdd
// ...
?>


Si cela ne t'aides pas, voici le code de la page d'inscription de vidéo de formation de Sitedudev


inscription.php


<?php
session_start();
include_once('includes.php');

if(isset($_SESSION['pseudo'])){
	header('Location: accueil.php');
	exit;
}

if(!empty($_POST)){
	extract($_POST);
	$valid = true;
	
	$Mail = htmlspecialchars(trim($Mail));
	$Pseudo = htmlspecialchars(ucfirst(trim($Pseudo)));
	$Password = trim($Password);
	$PasswordConfirmation = trim($PasswordConfirmation);
		
	if(empty($Pseudo)){
		$valid = false;
		$_SESSION['flash']['danger'] = "Veuillez mettre un pseudo !";
	}
	
	if(empty($Mail)){
		$valid = false;
		$_SESSION['flash']['danger'] = "Veuillez mettre un mail !";
	}
	
	$req = $DB->query('Select mail from user where mail = :mail', array('mail' => $Mail));
	$req = $req->fetch();
	
	if(!empty($Mail) && $req['mail']){
		$valid = false;
		$_SESSION['flash']['danger'] = "Ce mail existe déjà";
		
	}
	if(!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $Mail)){
		$valid = false;
		$_SESSION['flash']['danger'] = "Veuillez mettre un mail conforme !";
	}
	
	if(empty($Password)){
		$valid = false;
		$_SESSION['flash']['danger'] = "Veuillez renseigner votre mot de passe !";

	}elseif($Password && empty($PasswordConfirmation)){
		$valid = false;
		$_SESSION['flash']['danger'] = "Veuillez confirmer votre mot de passe !";
	
	}elseif(!empty($Password) && !empty($PasswordConfirmation)){
		if($Password != $PasswordConfirmation){
			
			$valid = false;
			$_SESSION['flash']['danger'] = "La confirmation est différente !";
		}
		
	}
		
	if($valid){
		
		$id_public = uniqid();
		
		$DB->insert('Insert into user (pseudo, mail, password, idpublic) values (:pseudo, :mail,:password, :idpublic)', array('pseudo' => $Pseudo, 'mail' => $Mail, 'password' => crypt($Password, '$2a$10$1qAz2wSx3eDc4rFv5tGb5t'), 'idpublic' => $id_public));

		
		$_SESSION['flash']['success'] = "Votre inscription a bien été prise en compte, connectez-vous !";
		header('Location: connexion.php');
		exit;
		
	}	
}	
?>

<!DOCTYPE html>
<html lang="fr">
	<header>
		
		<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
		<link href="bootstrap/js/bootstrap.js" rel="stylesheet" type="text/css"/>
		<link href="style.css" rel="stylesheet" type="text/css" media="screen"/>
		
		<title>Inscription</title>
	</header>
	
	<body>
		
		<?php 
		    if(isset($_SESSION['flash'])){ 
		        foreach($_SESSION['flash'] as $type => $message): ?>
				<div id="alert" class="alert alert-<?= $type; ?> infoMessage"><a class="close">X</span></a>
					<?= $message; ?>
				</div>	
		    
			<?php
			    endforeach;
			    unset($_SESSION['flash']);
			}
		?> 

	
		<div class="container-fluid">
				
	        <div class="row">
		        
	            <div class="col-xs-1 col-sm-2 col-md-3"></div>
	            <div class="col-xs-10 col-sm-8 col-md-6">
		            
		            <h1 class="index-h1">Inscription</h1>
		            
		            <br/>
	                
	                <form method="post" action="inscription.php">
	                    
                        <label>Pseudo</label>
                    	<br/>
						<?php
							if(isset($error_pseudo)){
								echo $error_pseudo."<br/>";
							}	
						?>
                    	<input class="input" type="text" name="Pseudo" placeholder="Pseudo" value="<?php if (isset($Pseudo)) echo $Pseudo; ?>" maxlength="20" required="required">	
						
						<label>Mail</label>
						<input class="input" type="email" name="Mail" placeholder="Votre mail" value="<?php if (isset($Mail)) echo $Mail; ?>" required="required">	
	
	
	                    <label for="Password">Mot de passe</label>
	                    	
                    	<br/>
						<?php
							if(isset($error_password)){
								echo $error_password."<br/>";
							}	
						?>

                        <input class="input" type="password" name="Password" placeholder="Mot de passe" value="<?php if (isset($Password)) echo $Password; ?>" required="required">
	
	
	                    <label>Confirmez votre mot de passe</label>
                    	</br>
						<?php
							if(isset($error_passwordConf)){
								echo $error_passwordConf."<br/>";
							}	
						?>

                        <input class="input" type="password" name="PasswordConfirmation" placeholder="Confirmation du mot de passe" required="required">
	
	                    <div class="row">
	                        <div class="col-xs-0 col-sm-10 col-md-2"></div>
	                        <div class="col-xs-12 col-sm-2 col-md-8">
								<button type="submit">S'inscrire</button>
	                        </div>
	                        <div class="col-xs-0 col-sm-1 col-md-2"></div>                                
	                   </div>
	
	                </form>
	                
	                
	                <br/>
	                <br/>
	                <a href="index.php">Retour accueil</a>
	                
	            </div>
	
	            <div class="col-xs-0 col-sm-2 col-md-3"></div>
	        </div></div>
		<script src="bootstrap/js/bootstrap.min.js"></script>
	</body>
</html>


Vraiment très bien réalisé !!! L'intégralité de l'espace membres sur ce lien

@Nico19


Comment l'on procède pour crypter la fonction token?


Le reste du code est entièrement celui réaliser par sitedudev, ainsi la seule chose que je n'ai pas faite c'est cette partie de l'énoncé car je ne sais pas comment on fait:


"Avant d'insérer les informations pour notre nouvel utilisateur nous allons commencer par générer notre token. Pour cela nous allons utiliser la fonction random_bytes et la fonction bin2hex afin de nous donner une clé.


// bin2hex(random_bytes($length))$token = bin2hex(random_bytes(12)); // Exemples:// 39e9289a5b8328ecc4286da11076748716c41ec7fb94839a689f7dac5cdf5ba8bdc9a9acdc95b95245f80a00// On insert nos données dans la table utilisateur$DB->insert("INSERT INTO utilisateur (nom, prenom, mail, mdp, date_creation_compte, token) VALUES     (?, ?, ?, ?, ?, ?)",     array($nom, $prenom, $mail, $mdp, $date_creation_compte, $token));


N'oubliez pas d'enregistrer votre clé dans votre base de données."

Re @elodiep,


Apparemment, le message indique que ton problème proviens de la ligne 105 🧐


$contenu = '<p>Bonjour ' . $req['nom'] . ',</p><br>;
                   <p>Veuillez confirmer votre compte <a href="conf.php?id=' . $req['id'] . '&token=' . $token . '">Valider</a><p>';


Et bien😀... je ne vois aucune erreur, je ne comprend pas, essaye de redémarrer ton serveur


Je pense que si malgré le redémarrage, le problème persiste, cela provient peut-être de tes variables (ex: $contenu, etc...)


Tu a creer un colonne pour les tokens dans ta base de donnée ? 😏


As-tu bien crypter la fonction token ? 🧐

Hello @elodiep,


Utilise la balise [CODE] (</>) pour mettre ton code, question de lisibilité 😬

@Nico19


Voici mon code entier:


<?php
    session_start();

    include('bd/connexionDB.php'); // Fichier PHP contenant la connexion à votre BDD

    // S'il y a une session alors on ne retourne plus sur cette page
    if (isset($_SESSION['id'])){
        header('Location: index.php'); 
        exit;
    }

    // Si la variable "$_Post" contient des informations alors on les traitres
    if(!empty($_POST)){
        extract($_POST);
        $valid = true;

        // On se place sur le bon formulaire grâce au "name" de la balise "input"
        if (isset($_POST['inscription'])){

            $nom  = htmlentities(trim($nom)); // On récupère le nom
            $prenom = htmlentities(trim($prenom)); // on récupère le prénom
            $mail = htmlentities(strtolower(trim($mail))); // On récupère le mail
            $mdp = trim($mdp); // On récupère le mot de passe 
            $confmdp = trim($confmdp); //  On récupère la confirmation du mot de passe

            //  Vérification du nom
            if(empty($nom)){
                $valid = false;
                $er_nom = ("Le nom d' utilisateur ne peut pas être vide");
            }       

            //  Vérification du prénom
            if(empty($prenom)){
                $valid = false;
                $er_prenom = ("Le prenom d' utilisateur ne peut pas être vide");
            }       

            // Vérification du mail
            if(empty($mail)){
                $valid = false;
                $er_mail = "Le mail ne peut pas être vide";

                // On vérifit que le mail est dans le bon format
            }elseif(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)){
                $valid = false;
                $er_mail = "Le mail n'est pas valide";

            }else{
                // On vérifit que le mail est disponible
                $req_mail = $DB->query("SELECT mail FROM user WHERE mail = ?",
                    array($mail));

                $req_mail = $req_mail->fetch();

                if ($req_mail['mail'] <> ""){
                    $valid = false;
                    $er_mail = "Ce mail existe déjà";
                }
            }

            // Vérification du mot de passe
            if(empty($mdp)) {
                $valid = false;
                $er_mdp = "Le mot de passe ne peut pas être vide";

            }elseif($mdp != $confmdp){
                $valid = false;
                $er_mdp = "La confirmation du mot de passe ne correspond pas";
            }

            // Si toutes les conditions sont remplies alors on fait le traitement
            if($valid){

                $mdp = crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$");

                $date_creation_compte = date('Y-m-d H:i:s');

                $token = bin2hex(random_bytes(12));


                // On insert nos données dans la table utilisateur
                $DB->insert("INSERT INTO user (nom, prenom, mail, mdp, date_creation_compte, token) 
                    VALUES 
                    (?, ?, ?, ?, ?, ?)", 
                    array($nom, $prenom, $mail, $mdp, $date_creation_compte, $token));

                $req = $DB->query("SELECT *
                  FROM utser
                  WHERE mail = ?",
                  array($mail));
                  
                $req = $req->fetch();
                 
                $mail_to = $req['mail']; 
                 
                //=====Création du header de l'e-mail.
                $header = "From: no-reply <no-reply@gmail.com>\n";
                $header .= "MIME-version: 1.0\n";
                $header .= "Content-type: text/html; charset=utf-8\n";
                $header .= "Content-Transfer-ncoding: 8bit";
                //=======
                 
                //=====Ajout du message au format HTML          
                $contenu = '<p>Bonjour ' . $req['nom'] . ',</p><br>;
                   <p>Veuillez confirmer votre compte <a href="conf.php?id=' . $req['id'] . '&token=' . $token . '">Valider</a><p>';
                                    
                mail($mail_to, 'Confirmation de votre compte', $contenu, $header);


                header('Location: index.php');
                exit;
            }
        }
    }
?>
<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Inscription</title>
    </head>

    <body>      
        <div>Inscription</div>
        <form method="post">

            <?php
                // S'il y a une erreur sur le nom alors on affiche
                if (isset($er_nom)){
                ?>
                    <div><?= $er_nom ?></div>
                <?php   
                }
            ?>
            <input type="text" placeholder="Votre nom" name="nom" value="<?php if(isset($nom)){ echo $nom; }?>" required>   

            <?php
                if (isset($er_prenom)){
                ?>
                    <div><?= $er_prenom ?></div>
                <?php   
                }
            ?>
            <input type="text" placeholder="Votre prénom" name="prenom" value="<?php if(isset($prenom)){ echo $prenom; }?>" required>   

            <?php
                if (isset($er_mail)){
                ?>
                    <div><?= $er_mail ?></div>
                <?php   
                }
            ?>
            <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>

            <?php
                if (isset($er_mdp)){
                ?>
                    <div><?= $er_mdp ?></div>
                <?php   
                }
            ?>
            <input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required>
            <input type="password" placeholder="Confirmer le mot de passe" name="confmdp" required>

                <button type="submit" name="inscription">Envoyer</button>

        </form>
    </body>
</html>

@elodiep,


À ta ligne 3, tu n'es pas dans un php

donc pour un truc php a écrire tu met <?= ... ?>

Peux-tu m'envoyer le code de la ta ligne 105 de ta page d'inscription ? 😉

Ah du cout le message vient de changer🧐

@Nico19


Lorsque je fais:


//=====Ajout du message au format HTML     
$contenu = '<p>Bonjour ' . $req['nom'] . ',</p><br>
 <p>L'\utilisateur n'\a pas confirmer son compte <a href="conf.php?id=' . $req['id'] . '&token=' . $token . '">Valider</a><p>';
           
mail($mail_to, 'Confirmation de votre compte', $contenu, $header);




header('Location: index.php');
exit;


j'ai cette erreur la: Parse error: syntax error, unexpected '\' (T_NS_SEPARATOR) in /opt/lampp/htdocs/projetweb/inscription.php on line 105

Cette pub permet au site de vivre ...
1
2
3