Connection à ma bdd en PHP en fonctionne pas

Résolu/Fermé
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 - Modifié par Snox5 le 22/10/2016 à 21:46
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 - 23 oct. 2016 à 11:50
Bonjour CCM ^^,

J’héberge un petit site chez 000webhost, j'y fait sur mon site un formulaire d'inscription qui envoie via la méthode post les infos remplie sur le form sur un fichier register.php qui doit se charger de faire la connexion à ma bdd (PHPmyAdmin) et inscrire les infos dans ma bdd.

Site > soumission du formulaire > register.php ✖ base de donnée ✖

>>> Contenu du fichier register.php (les **** sont les infos censurées) :
<?php
//création variable après récuperation des valeur des champs
 $pseudo = $_POST['pseudo'];
 $email = $_POST['email'];
 $password = $_POST['password'];
// hashage du mot de passe en sha512
 $hash_pass= openssl_digest($password, 'sha512');
//tests
 echo "le pseudo est : $pseudo <br/>";
 echo "le mail est : $email <br/>";
 echo "le mot de passe hashé est : $hash_pass";
//$bdd connection :
 $bdd = new PDO('mysql:host=localhost;dbname=id43509_us****bs;charset=utf8mb4_unicode_ci', 'id43509_lemniscat', '******;D*****');
//Envoie des données
$bdd->exec("INSERT INTO Users(Nick, mail, pass) VALUES($pseudo, $email, hash_pass)");
?>


PS: Désolé si je suis dans la mauvaise catégorie, j'ai pas webmaster: PHP. ^^

Merci ! ^^

@+++


Ceci n'est pas une signature.
A voir également:

4 réponses

jordane45 Messages postés 38384 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 janvier 2025 4 727
Modifié par jordane45 le 23/10/2016 à 11:18
Bonjour,

Commence par activer la gestion des erreurs en PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

En complément de ce que t'a indiqué LegranFilou .. ajoute des blocs TRY/CATCH pour intercepter (et afficher) les erreurs...(sinon ça ne sert à rien ! )

Ensuite... pense à récupérer PROPREMENT tes variables AVANT de les utiliser...
Regarde comment faire ici :
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index

Pour finir ... il manque les quotes autour des variables ainsi que le "$" devant ta variable hash_pass
INSERT INTO Users(Nick, mail, pass) VALUES($pseudo, $email, hash_pass)

INSERT INTO Users(Nick, mail, pass) VALUES('$pseudo', '$email', '$hash_pass')

... le mieux serait tout de même d'utiliser les requêtes préparées pour éviter les soucis d'injection SQL.


Ton code devient donc :

<?php
//fichier ncxBdd.php
// Fichier de connexion à la BDD
try{
 $bdd = new PDO('mysql:host=localhost;dbname=id43509_us****bs;charset=utf8mb4_unicode_ci', 'id43509_lemniscat', '******;D*****');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}

Ton fichier :
<?php
//Affichage des erreurs PHP
error_reporting(E_ALL);

//connexion à la bdd
require_once "cnxBdd.php";

//Récupération "prorpre" des variables
 $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
 $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
 $password = !empty($_POST['password']) ? $_POST['password']: NULL;
 
 $hash_pass= openssl_digest($password, 'sha512');


//tests
 echo "le pseudo est : $pseudo <br/>";
 echo "le mail est : $email <br/>";
 echo "le mot de passe hashé est : $hash_pass";

if($pseudo  && $email &&  $hash_pas ){

$sql = "INSERT INTO Users(Nick, mail, pass) VALUES(:pseudo, :email , :hash_pass)";
 $datas = array(":pseudo"=>$pseudo , ":email"=>$email , ":hash_pass"=>$hash_pass);

try{
 $prep = $bdd->prepare($sql);
 $res = $prep->execute($datas);
}catch(Exception $e){
  echo "Erreur ! ".$e->getMessage();
}

}


Cordialement, 
Jordane                                                                 
1
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 213
23 oct. 2016 à 02:19
Bonsoir Jordane45,
Tout d'abord, merci pour ta réponse.
A quoi correspond le fichier ncxBdd.php ?
J'ai tout mis dans mon fichier register.php qui doit récupérer les infos du formulaire et les inscrire dans la base.
J'apporte les modifs que tu m'as donné tout de suite et vois ce que ca donne.
Je débute en php...^^
+++
0
jordane45 Messages postés 38384 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 janvier 2025 4 727
23 oct. 2016 à 02:27
cnxBdd.php (erreur de frappe. .)
Il est préférable de placer le code de connexion dans un fichier à part.... comme ça tu n'as qu'à l'inclure dans les pages où tu en as besoin au lieu de le copier coller dans toutes tes pages...
0
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 213
Modifié par Snox5 le 23/10/2016 à 02:38
Re,
Mon code est bien dans un fichier à part, et pour les injections sql, je m'en inquiterai plus tard. ^^
Le nouveau code est donc :
<?php
//Affichage des erreurs PHP
 error_reporting(E_ALL);
//création variable après récuperation des valeur des champs :
 $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
 $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
 $password = !empty($_POST['password']) ? $_POST['password']: NULL;
 $hash_pass= openssl_digest($password, 'sha512');
//test :
 echo "le pseudo est : $pseudo <br/>";
 echo "le mail est : $email <br/>";
 echo "le mot de passe hashé est : $hash_pass";
//variables de connexion :
 $dsn = 'mysql:dbname=id43******ubs;host=localhost;';
 $user = 'id43****cat';
 $bddpass = '150*******';
//connexion à la bdd :
 try{
  $bdd = new PDO('$dsn', '$user', '$bddpass');
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
 }catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());}
  
//insertion des données :
 if($pseudo  && $email &&  $hash_pas ){
  $sql = "INSERT INTO Users(Nick, mail, pass) VALUES(:pseudo, :email , :hash_pass)";
  $datas = array(":pseudo"=>$pseudo , ":email"=>$email , ":hash_pass"=>$hash_pass);
 try{
  $prep = $bdd->prepare($sql);
  $res = $prep->execute($data);
 }catch(Exception $e){
  echo "Erreur ! ".$e->getMessage();}}
?>
0
jordane45 Messages postés 38384 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 janvier 2025 4 727 > Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021
23 oct. 2016 à 02:46
Il n'est pas dans un fichier à part vu que tu l'as mis dans un seul fichier....
0
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 213
23 oct. 2016 à 02:55
ah ok.. compris pour le cnxbdd.php, isolé les données de connexion pour ensuite les rappelés en cas de besoin ! ^^
Ça ne marche toujours pas sinon, peut être que c'est ma table que j'ai mal faite ? Tu n'aurai pas de la doc ou un tutoriel abordable sur phpmyadmin / mysql ?
+++
0
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 5
Modifié par Legrandfifou le 22/10/2016 à 21:48
Salut :)

C'est dans programmation : PHP mais je ne pense pas que ce soit trop grave :p

Je pense que tu dois mettre ta connexion à ta BDD au début du code donc quand tu fais <?php ta bdd /RESTE DE TON CODE/ ?>

Il me semble que c'est ça ^^ je ne suis pas sur :)
0
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 213
22 oct. 2016 à 21:48
Salut ^^ Merci pour ta réponse,
J'ai contacté la modo pour me déplacer ^^
Merci j’essaie ça tout de suite.
+++
0
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 213
Modifié par Snox5 le 22/10/2016 à 21:53
re, ca n'a rien donné.^^
0
stf_frmu Messages postés 47596 Date d'inscription mercredi 22 février 2012 Statut Modérateur Dernière intervention 15 janvier 2025 93 > Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021
22 oct. 2016 à 22:52
bsr redirigé dans le bon forum

la modération
0
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 213 > stf_frmu Messages postés 47596 Date d'inscription mercredi 22 février 2012 Statut Modérateur Dernière intervention 15 janvier 2025
22 oct. 2016 à 23:03
Merci.
0
Legrandfifou Messages postés 109 Date d'inscription samedi 3 mai 2014 Statut Membre Dernière intervention 17 mars 2017 5
23 oct. 2016 à 01:38
Essaye de rajouter
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
.

Et rempli le formulaire pour l'envoyer voir si tu n'as pas une erreur :)
0
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 213
Modifié par Snox5 le 23/10/2016 à 02:04
du coup j'ai tenté d'autres choses, sans grands résultats :
<?php
//création variable après récuperation des valeur des champs :
 $pseudo = $_POST['pseudo'];
 $email = $_POST['email'];
 $password = $_POST['password'];
// hashage du mot de passe en sha512 :
 $hash_pass= openssl_digest($password, 'sha512');
//test :
 echo "le pseudo est : $pseudo <br/>";
 echo "le mail est : $email <br/>";
 echo "le mot de passe hashé est : $hash_pass";
//variables de connexion :
 $dsn = 'mysql:dbname=id43***ssubs;host=localhost;';
 $user = 'id435*****iscat';
 $bddpass = '1********';
//connexion à la bdd :
 $dbh = new PDO($dsn, $user, $bddpass);
 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Envoie des données :
 $bdd->exec('INSERT INTO Users(Nick, mail, pass) VALUES($pseudo, $email, hash_pass)');
//fermeture de la connexion :
 $dbh = null;
?>


Ceci n'est pas une signature.
0
Snox5 Messages postés 1482 Date d'inscription samedi 25 juin 2016 Statut Contributeur Dernière intervention 11 juin 2021 213
23 oct. 2016 à 11:50
Salut,
YES ! Ca a fonctionné ! ;D Merci beaucoup pour ton aide Jordane45 ! ^^
Voilà le code qui fonctionne :
<?php
//Affichage des erreurs PHP
	error_reporting(E_ALL);
//création variable après récuperation des valeur des champs :
	$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
	$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
	$password = !empty($_POST['password']) ? $_POST['password']: NULL;
	$hash_pass= openssl_digest($password, 'sha512');
//test :
	echo "le pseudo est : $pseudo <br/>";
	echo "le mail est : $email <br/>";
	echo "le mot de passe hashé est : $hash_pass";
//variables de connexion :
	$dsn = 'mysql:dbname=id4*******bs;host=localhost;';
	$user = 'id43*******cat';
	$bddpass = '********';
//connexion à la bdd :
	try{
		$bdd = new PDO($dsn, $user, $bddpass);
		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
	}catch(PDOException $e) {
		die('Erreur : ' . $e->getMessage());}
		
//insertion des données :
	if($pseudo  && $email &&  $hash_pass ){
		$sql = "INSERT INTO Users(Nick, mail, pass) VALUES(:pseudo, :email , :hash_pass)";
		$data = array(":pseudo"=>$pseudo , ":email"=>$email , ":hash_pass"=>$hash_pass);
	try{
		$prep = $bdd->prepare($sql);
		$res = $prep->execute($data);
	}catch(Exception $e){
		echo "Erreur ! ".$e->getMessage();}}
?>

Je passe en résolu,

Bon Dimanche ! @+++
0