Bonjour,

je me permets de vous soumettre mon code car je n'arrive à poster des infos sur localhost. Pourriez-vous me le corriger?
Un grand merci pour votre aide Smiley smile

<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_POST['forminscription']))
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$mail = htmlspecialchars($_POST['mail']);
$hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);

$pseudolength = strlen($pseudo);

if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['password']))
{
$pseudolength = strlen($pseudo);
if ($pseudolength <=255)
{
if (filter_var($mail, FILTER_VALIDATE_EMAIL))
{
$insertmbr = $bdd->prepare("INSERT INTO users (pseudo, mail, password) VALUES (?,?,?)");
$insertmbr->execute(array($pseudo, $mail, $password));
$erreur = "Votre compte a bien été créé !";
}
else
{
$erreur = "Sorry, that is not a valid email address";
}
}
else
{
$erreur = "User name is too long";
}
}

else
{
$erreur = "Please complete all required fields";
}
}

?>

<html>
<head>
<title>Title of the document</title>

</head>

<body>
<div align="center">
<h2>Sign Up</h2>
<h3> It’s quick and easy.</h3>
<form method="POST" action="">
<table>
<tr>
<td>
<input type="text" placeholder="User name" id="pseudo" name="pseudo" value="<?php if (isset($pseudo)) { echo $pseudo; } ?>"/>
</td>
</tr>
<tr>
<td>
<input type="text" placeholder="Email" id="mail" name="mail" value="<?php if (isset($mail)) { echo $mail; } ?>">
</td>
</tr>
<tr>
<td>
<input type="password" placeholder="New password" id="password" name="password">
</td>
</tr>
</table>
<input type="submit" name="forminscription" value="Sign Up" />
</form>
<?php
if (isset($erreur))
{
echo '<font color="red">'.$erreur."</font>";
}
?>
</div>
</body>

</html>
Modérateur
Et l'eau,

Ton code est un peu illisible.... Peux tu le mettre en forme stp ? Smiley smile
Ça doit être ton DSN et/ou ta connection à la base qui ne fonctionne pas. D'ailleurs, tu ne fais pas de vérification à ce sujet.... Cependant, ton code me parait bon (la logique générale appliquée).

ps :
Ah bon, c'est une erreur ? Smiley biggol

$erreur = "Votre compte a bien été créé !";


Pourquoi tu te répètes ?

$pseudolength = strlen($pseudo);


un formulaire en <table> ? Il y a mieux à faire n'est ce pas ?
Pas de meta charset ?
Modifié par niuxe (21 Jan 2020 - 01:05)
Bonjour Niuxe et merci de ton aide Smiley smile

Alors le $pseudolength en trop est retiré mais lorsque je souhaite créer un compte utilisateur voici le message:
Notice: Undefined variable: password in C:\wamp64\www\whatshell\index.php on line 17.
Egalement, il y a dans ce code une autre bizarrerie. la fléche entre "bdd" et "prepare" reste blanche et non rouge.

Encore merci de tes lumières et bonne journée,


<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_POST['forminscription']))
{
	$pseudo = htmlspecialchars($_POST['pseudo']);
	$mail = htmlspecialchars($_POST['mail']);
	$hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);


	if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['password'])) 
	{
		$pseudolength = strlen($pseudo);
		if ($pseudolength <=255)
		{
			if (filter_var($mail, FILTER_VALIDATE_EMAIL)) 
			{
				$insertmbr = $bdd->prepare("INSERT INTO users (pseudo, mail, password) VALUES (?,?,?)");
				$insertmbr->execute(array($pseudo, $mail, $password));
				$erreur = "Votre compte a bien été créé !";
			}
			else
			{
				$erreur = "Sorry, that is not a valid email address";
			}
		}
		else
		{ 
			$erreur = "User name is too long";
		}
	}

	else
	{
		$erreur = "Please complete all required fields";
	}
}

?>

<html>
<head>
<title>Title of the document</title>

</head>

<body>
<div align="center">
	<h2>Sign Up</h2>
	<h3> It’s quick and easy.</h3>
	<form method="POST" action="">
		<table>
			<tr>
				<td>
					<input type="text" placeholder="User name" id="pseudo" name="pseudo" value="<?php if (isset($pseudo)) { echo $pseudo; } ?>"/>
				</td>
			</tr>
			<tr>
				<td>
					<input type="text" placeholder="Email" id="mail" name="mail" value="<?php if (isset($mail)) { echo $mail; } ?>">
				</td>
			</tr>
			<tr>
				<td>
					<input type="password" placeholder="New password" id="password" name="password">
				</td>
			</tr>
		</table>
		<input type="submit" name="forminscription" value="Sign Up" />
	</form>
	<?php
	if (isset($erreur))
		{
			echo '<font color="red">'.$erreur."</font>";
		}
	?>
</div>
</body>

</html>

Modifié par rgh6767 (21 Jan 2020 - 16:35)
Salut

Tout est clair dans le message d'erreur, il ne trouve pas "password", à la ligne 17

$insertmbr->execute(array($pseudo, $mail, $password));

$paswword n'existe pas. merci de la créer.
Merci Jencal mais malheureusement je viens de débuter le php. Ou doit être créé $password? comment?
Bonne soirée
Bonsoir, je viens de trouver mon problème. Il fallait juste remplacer la ligne


 $hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);


par


$mdp = sha1($_POST['mdp']);


auriez-vous une solution pour remplacer le sha1 par quelque chose de plus sécurisé?

Bonne soirée


<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_POST['forminscription']))
{
	$pseudo = htmlspecialchars($_POST['pseudo']);
	$mail = htmlspecialchars($_POST['mail']);
	$mdp = sha1($_POST['mdp']);

	if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mdp'])) 
	{
		$pseudolength = strlen($pseudo);
		if ($pseudolength <=255)
		{
			if (filter_var($mail, FILTER_VALIDATE_EMAIL)) 
			{
				$insertmbr = $bdd->prepare("INSERT INTO users (pseudo, mail, password) VALUES (?,?,?)");
				$insertmbr->execute(array($pseudo, $mail, $mdp));
				$erreur = "Votre compte a bien été créé !";
			}
			else
			{
				$erreur = "Sorry, that is not a valid email address";
			}
		}
		else
		{ 
			$erreur = "User name is too long";
		}
	}

	else
	{
		$erreur = "Please complete all required fields";
	}
}

?>

<html>
<head>
<title>Title of the document</title>

</head>

<body>
<div align="center">
	<h2>Sign Up</h2>
	<h3> It’s quick and easy.</h3>
	<form method="POST" action="">
		<table>
			<tr>
				<td>
					<input type="text" placeholder="User name" id="pseudo" name="pseudo" value="<?php if (isset($pseudo)) { echo $pseudo; } ?>"/>
				</td>
			</tr>
			<tr>
				<td>
					<input type="text" placeholder="Email" id="mail" name="mail" value="<?php if (isset($mail)) { echo $mail; } ?>">
				</td>
			</tr>
			<tr>
				<td>
					<input type="password" placeholder="New password" id="mdp" name="mdp">
				</td>
			</tr>
		</table>
		<input type="submit" name="forminscription" value="Sign Up" />
	</form>
	<?php
	if (isset($erreur))
		{
			echo '<font color="red">'.$erreur."</font>";
		}
	?>
</div>
</body>

</html>
Hello,

Voici ce que j'ai pour CRYPTER ou DECRYPTER une chaine

//$action == e == encrypt || =action == d == decrypt
function cryptOrDecrypt( $string, $action = 'e' ) {
           // ici c'est les phrases secretes pour crypter/decrypter
          //le mieux c'est de les mettre dans ton fichier de constantes, ou voir direct dans la config.
	    $secret_key = 'tu mets ce que tu veux';
	    $secret_iv = 'pareil, ce que tu veux';
	 
	    $output = false;
	    $encrypt_method = "AES-256-CBC";
	    $key = hash( 'sha256', $secret_key );
	    $iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );
	 
	    if( $action == 'e' ) {
	        $output = base64_encode( openssl_encrypt( $string, $encrypt_method, $key, 0, $iv ) );
	    }
	    else if( $action == 'd' ){
	        $output = openssl_decrypt( base64_decode( $string ), $encrypt_method, $key, 0, $iv );
	    }
	    return $output;
	}


Et pour l'appeller tu lui envoie ton string à crypter ET/OU à décrypter, ça vas dans un sens comme dans l'autre, ça c'est le deuxième paramètre $action, où la tu lui envoie 'e' pour encrypter ou 'd' pour decrypter, et la fonction te return le résultat.

$MACHAINEACRYPTER = $this->cryptOrDecrypt($password, 'e');


et donc MACHAINEACRYPTER est maintenant crypter, si je dois la décrypter à un moment
je fais pareil



$MACHAINEDECRYPTER = $this->cryptOrDecrypt($MACHAINEACRYPTER, 'd');
Meilleure solution