Page 1 sur 2

Variable (prepare & execute)

Posté : 30 nov. 2012, 04:13
par kakou34
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,

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 11:55
par xTG
Actives la gestion des erreurs PDO (voir la documentation).
Et vérifies aussi (via un echo) que tu rentres bien dans cette condition.

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 12:23
par Saian
À 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.

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 13:49
par kakou34
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' ?

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 13:56
par Saian
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 ?

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 13:56
par juliette
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 '

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 14:02
par Saian
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.

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 14:06
par juliette
On est pas obligé d'entourer les noms des colonnes avec des quotes steeve.
Tu m'apprend quelque chose, autant pour moi !

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 14:17
par kakou34
Oui, un champ "Mot de passe" existe dans ma BDD.

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 14:22
par Saian
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 !

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 14:46
par kakou34
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 :/

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 15:03
par Saian
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.

Re: Variable (prepare & execute)

Posté : 30 nov. 2012, 15:20
par kakou34
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 ^^

Re: [RESOLU] Variable (prepare & execute)

Posté : 30 nov. 2012, 15:28
par Saian
Tu voulais dire adieu non ? je suis gêné la :oops: :lol:

Re: [RESOLU] Variable (prepare & execute)

Posté : 30 nov. 2012, 15:46
par xTG
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`