[RESOLU] Variable (prepare & execute)

Eléphant du PHP | 69 Messages

30 nov. 2012, 04:13

Bonjour,

Je débute dans le PHP et j'ai un petit soucis sur ma page inscription :cry:
C'est pour cela que je m'adresse à vous !
<?php
		
					if (!empty($_POST['pseudo']) && !empty($_POST['mot_de_passe1']) && !empty($_POST['courriel']))
					{
						$requete = $base_de_donnee->prepare('INSERT INTO membre (pseudo, mot de passe, courriel) VALUES(?, ?, ?)');
						$requete->execute(array($_POST['pseudo'], $_POST['mot_de_passe1'], $_POST['courriel']));	
					}
	
				?>
<form id="inscription" method="post" action="inscription.php">
				
					<input name="pseudo" placeholder=" Pseudo" type="text" /><br/>
					<input name="mot_de_passe1" placeholder=" Mot de passe" type="password" /><br/>
					<input name="mot_de_passe2" placeholder=" Mot de passe"type="password" /><br/>
					<input name="courriel" placeholder=" Courriel" type="text" /><br/><br/>
					<input id="s-inscrire" type="submit" />
 
				</form>
Voici mon code, rien de bien compliqué (Du moins c'est ce que je pensai)

Mais voila, je m'inscris sur mon site, mais le membre n’apparaît pas sur la base de donnée.

Si vous pouvez m'éclaircir, ce sera aimable à vous !

Cordialement,

ViPHP
xTG
ViPHP | 7331 Messages

30 nov. 2012, 11:55

Actives la gestion des erreurs PDO (voir la documentation).
Et vérifies aussi (via un echo) que tu rentres bien dans cette condition.

Avatar du membre
Mammouth du PHP | 1609 Messages

30 nov. 2012, 12:23

À tout hasard les quotes autour des valeurs de pseudo, mot de passe et courriel sont automatiquement ajoutés lors du execute ?
Je demande car les ? dans le prepare ne sont pas entourés comme ceci '?'

Sinon le mieux à faire c'est comme dit xTG, vérifier que ça rentre bien dans le if et contrôler la requête.
Développeur web depuis + de 20 ans

Eléphant du PHP | 69 Messages

30 nov. 2012, 13:49

Je supose que c'est comme ceci ? (J'ai suivis l'exemple)
<?php

		try
		{
			$base_de_donnee = new PDO('mysql:host=xxxxxxxxx;dbname=xxxxxx', 'xxxxxx', 'xxxxxx');
			$base_de_donnee->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		}
		
		catch (PDOException $e)
		{
			echo 'Impossible de ce connecter à la BDD : ' . $e->getMessage();
		} 
		
	?>
Effectivement, les erreurs sont plus détaillées mais je dois avouer que je ne comprend pas ce qu'il me dit :cry:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'de passe, courriel) VALUES('abcde', '06', 'tata')' at line 1' in /xxxxxx/xxxxx/www/inscription.php:29 Stack trace: #0 /xxxxxx/xxxxxx/www/inscription.php(29): PDOStatement->execute(Array) #1 {main} thrown in /xxxxx/xxxxx/www/inscription.php on line 29
Par contre 'echo' je le met bien juste après '$requete' ?

Avatar du membre
Mammouth du PHP | 1609 Messages

30 nov. 2012, 13:56

Euh, je ne l'avais pas vu à la première lecture mais un champ qui s'appelle mot de passe dans la requête ? ça serait pas plutôt mot_de_passe ou autre ?
Développeur web depuis + de 20 ans

Mammouth du PHP | 790 Messages

30 nov. 2012, 13:56

le soucis,ce trouve e par la: 'de passe, courriel) VALUES('abcde', '06', 'tata')', fait voire la requête complète ! mais déjà, de passe et courriel ne sont pas entourés de '
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Avatar du membre
Mammouth du PHP | 1609 Messages

30 nov. 2012, 14:02

On est pas obligé d'entourer les noms des colonnes avec des quotes steeve.
Par contre j'ai jamais fait des noms de colonnes contenant des espaces.
J'ai un gros doute sur la possibilité de le faire et n'irait pas vérifier mais si on peut il faudrait effectivement entourer le nom de la colonne par des quotes.
Développeur web depuis + de 20 ans

Mammouth du PHP | 790 Messages

30 nov. 2012, 14:06

On est pas obligé d'entourer les noms des colonnes avec des quotes steeve.
Tu m'apprend quelque chose, autant pour moi !
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 69 Messages

30 nov. 2012, 14:17

Oui, un champ "Mot de passe" existe dans ma BDD.

Avatar du membre
Mammouth du PHP | 1609 Messages

30 nov. 2012, 14:22

Tu as donc testé de mettre des quotes autour dans la requête et ça a réglé le problème ?
Personnellement j'éviterais les espaces dans les noms des colonnes mais bon si on peut le faire, ça reste un avis personnel !
Développeur web depuis + de 20 ans

Eléphant du PHP | 69 Messages

30 nov. 2012, 14:46

Non sans succés :(

J'ai testé les 2 ('' et "") aucune fonctionne.

Il est possible dans une BDD d'utiliser "_" pour espacer les mots ? car coller les mots pour "mot de passe" ok mais le jour ou c'est une phrase :/

Avatar du membre
Mammouth du PHP | 1609 Messages

30 nov. 2012, 15:03

Oui tu peux nommer les colonnes ainsi : nom_de_la_colonne !
C'est très utilisé notamment pour les systèmes d'objets métier car ça permet de faire automatiquement des getter et setter du type getNomDeLaColonne et setNomDeLaColonne pour une lecture optimal du code (c'est le CamelCase), mais la je m'écarte surement un peu trop du sujet.

EDIT si la colonne s'appelle Mot de passe peut être faudrait-il respecter la casse dans la requête.
Développeur web depuis + de 20 ans

Eléphant du PHP | 69 Messages

30 nov. 2012, 15:20

J'ai raccourci 2-3 choses et dorénavant j'utiliser "_" et plus d'espace :)

Et c'étais effectivement cela qui poser problème.

Il me reste plus maintenant qu'a bien sécuriser mon formulaire !

En tout cas je vous remercie de votre aide et je ne vous dit pas dieu, oh que non ^^

Avatar du membre
Mammouth du PHP | 1609 Messages

30 nov. 2012, 15:28

Tu voulais dire adieu non ? je suis gêné la :oops: :lol:
Développeur web depuis + de 20 ans

ViPHP
xTG
ViPHP | 7331 Messages

30 nov. 2012, 15:46

Je suis content que tu ais appris à debugguer. :)
Cela n'aurait rien apporté de donner la réponse toute mâchée.

Pour compléter sur le souci, sous MySQL il est possible de créer des noms de colonne avec espace mais il faut entourer le nom de la sorte :
SELECT ... FROM `mon nom de table`