Formulaire ne fonctionne pas et rien dans database

Résolu/Fermé
Marty - 10 janv. 2013 à 04:52
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 - 11 janv. 2013 à 08:25
Bonjour,

Après je-ne-saurais-dire combien d'heures passées a tenter de faire fonctionner mon formulaire d'inscription en php (C'est la première fois que je bosse du php faut-il le dire), je m'en remets à vous... Pourriez-vous me dire si mon code est correct, et si pas me dire ce qui cloche ? Merci d'avance :-)

<?php 

require_once('Connections/maconnexion.php'); //on fait appel ici à un petit fichier ou on a mis les données de connexion au serveur sql
?>

<?php

$error=0;
if (isset($_POST['pseudo']))
{
// si on est ici c'est qu'on vient du formulaire

		if (($_POST['pseudo']!="") && ($_POST['password']!="") && ($_POST['passwordrepeat']!="") && ($_POST['email']!=""))
		{

				$reg = mysql_query("SELECT * FROM users WHERE pseudo='$pseudo'");
				$num_rows = mysql_num_rows($reg);

				if($num_rows==0)
				{

						//On verifie si le mot de passe et celui de la verification sont identiques
        				if($_POST['password']==$_POST['passwordrepeat'])
        				{
					
								//on fait appel ici à un petit fichier qui contient une fonction réalisée avec une expression régulière pour vérifier qu'un mail est bien un mail valide
								require_once('testmail.php'); 
								if (isValidEmail($_POST['email']))
								{

										// si on est ici c'est que le login rentré par l'utilisateur n'existait pas encore dans la base de données... on va donc pouvoir l'inscrire !

										$insertSQL = sprintf("INSERT INTO users (pseudo, password, email) VALUES ('%s', '%s', '%s')",
					   							$_POST['pseudo'],
                       							$_POST['password'],
					   							$_POST['email']);
												
										//echo ($insertSQL); affichage de la chaine de caractère créée en cas de besoin de débuggage
  										mysql_select_db($database_maconnexion, $maconnexion);//on choisit la db sur laquelle on va travailler
  										$Result1 = mysql_query($insertSQL, $maconnexion) or die(mysql_error());// on exécute le code sql envoyé sur ma connexion
  										
  										header("register_ok.php");// petite redirection vers une page qui dit qu'on est bien inscrit
										

								}
								else
								{
								//mail incorrect
								header("location: register_erreurmail.php");
								
								}

        				}
       					else
        				{
                		//mots de passes ne sont pas identiques
                		header("location: register_erreurpass.php");
						
        				}  
  
				}
				else
				{
				//pseudo déjà pris
				header("location: register_erreurpseudo.php");
				
				}
				
		}
		else
		{
		// remplir tous les champs obligatoires
		header("location: register_erreurchamps.php");
		
		}

}
else
{
}
?>


Et voici mon formulaire :

<form action="register.php"  method="POST" class="css" name="form1" id="signup">
      <h1>C'est parti pour l'inscription !</h1>
    <fieldset>
    <legend>&nbsp;&nbsp;&nbsp;Informations de contact&nbsp;&nbsp;&nbsp;</legend>
    <label for="pseudo"></label>
    <input type="text" name="pseudo" placeholder="Votre pseudo"/>
    <br />
    <label for="password"></label>
    <input type="password" name="password" placeholder="Votre mot de passe"/>
    <br />
    <label for="passwordrepeat"></label>
    <input type="password" name="passwordrepeat" placeholder="Répétez votre mot de passe"/>
    <br />
    <label for="email"></label>
    <input type="text" name="email" placeholder="Votre e-mail"/>
  </fieldset>
  <p class="register button" align="center"> 
    <button type="submit">S'inscrire</button> 
	</p>
</form>


Merci !

6 réponses

Utilisateur anonyme
10 janv. 2013 à 07:57
Bonjour

Pour commencer :
$reg = mysql_query("SELECT * FROM users WHERE pseudo='$pseudo'");
Mais la variable $pseudo n'existe pas ! C'est $_POST['pseudo'].
Alors sois tu fais d'abord :
$pseudo=$_POST['pseudo']
soit tu écris ta requête :
$reg = mysql_query("SELECT * FROM users WHERE pseudo='$_POST[pseudo]'");


Il y a aussi header("register_ok.php");, il manque le "Location:"
header("Location; register_ok.php");


Ensuite, il te manque les mysql_real_escape_string pour insérer tes variables dans tes requêtes, tu t'en rendras compte dès que tu mettras une apostrophe dans un champ de ton formulaire.
2
Bonjour,

Pour commencer merci pour tes réponses. Mais le problème se situe de toute évidence ailleurs car ça ne fonctionne toujours pas. J'ai pourtant fait les réglages que tu m'as cité. En fait, rien ne va comme ça devrait. Si je laisse plusieurs champs vides par exemple, il va se contenter de "réactualiser" la page quand j'appuie sur submit. Pareil quand je rentre une adresse mail non valide... Mais pour chacune de ces erreurs ça devrait pourtant rediriger vers mes pages, je ne comprends pas. Et toujours pas de rentrées dans ma base de données non plus...

EDIT: J'ai bel et bien mes inscriptions qui se font dans ma db lorsque les infos sont rentrées correctement. En revanche, lorsque je rentre ces données, il est censé me rediriger après coup sur ma page register_ok.php, ce qu'il ne fait pas (Il "actualise" toujours la page). Et ce que je dis plus haut est malheureusement toujours d'actualité... :/
0
Utilisateur anonyme
10 janv. 2013 à 10:23
1 - As-tu bien corrigé header("Location; register_ok.php");comme je te l'avais indiqué ?

2 - Et ce que je dis plus haut est malheureusement toujours d'actualité.
Mais plus précisément ? Tu dis que ça enregistre bien maintenant, Y a-t-il autre chose que les redirections qui ne marche pas ?

3 - le formulaire et le traitement sont-ils tous les deux dans register.php, ou le formulaire est-il dans un autre fichier ?

4 - ajoute error_reporting(E_ALL); au début de ton PHP, histoire de voir toutes les erreurs
0
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
10 janv. 2013 à 10:26
Tu pourrais afficher ta chaine $insertSQL pour vérifier son contenu :)
0
Que veux-tu dire?
0
Utilisateur anonyme
10 janv. 2013 à 10:36
À Freedomsoul : à quoi bon si l'insertion des données marche maintenant ? tant qu'il ne met pas d'apostrophes dans ses données en tous cas

À Marty :
Je m'aperçois d'une faute de frappe dans la redirection : c'est Location: avec deux points et non pas point virgule. J'espère que tu avais corrigé ma correction ;)
0
J'avais bien corrigé ça ;-)
0
Freedomsoul Messages postés 509 Date d'inscription lundi 9 mai 2011 Statut Membre Dernière intervention 17 avril 2013 97
10 janv. 2013 à 12:02
Zappé ton commentaire du dessus, désolé ^^
0
1) Oui, c'est corrigé.

2) Ca s'enregistre dans ma base de données. Les bugs persistants sont qu'on peut s'inscrire avec un pseudo déjà utilisé (Ce que je ne veux pas, bien entendu), et qu'il n'affiche pas mes redirections (Càd pas celle quand l'inscription a réussi, pas celle qui dit que les deux pass différent, et pas celle qui dit que tous les champs n'ont pas été remplis).

3) Les deux sont dans le même fichier, register.php.

4) Où dois-je exactement rajouter cette commmande ?
0
Utilisateur anonyme
10 janv. 2013 à 10:38
4) aussitôt après la ligne <?php
0
Utilisateur anonyme
10 janv. 2013 à 10:43
Si on peut s'inscrire avec un pseudo déjà existant, c'est que tu n'as pas tenu compte de ma remarque sur la variable $pseudo inexistante.
Dans le doute :

$requete = "SELECT * FROM users WHERE pseudo='$_POST[pseudo]'";
echo $requete;
$reg = mysql_query($requete);
$num_rows = mysql_num_rows($reg);
...
0
J'en avais tenu compte, je l'avais juste fait avec l'autre méthode que tu proposais. Mais celle-ci ne marche pas tellement mieux... Je viens d'essayer avec un pseudo déjà existant dans ma db et , il m'a fait la redirection comme quoi l'utilisateur est bien inscrit... Tou va de travers !
0
En revanche, maintenant, certes il inscrit dans la base de données, mais on sait inscrire deux fois le même pseudo dans la db, mais en plus si j'inscris un pseudo qui n'est pas encore dans la db, ca l'inscrit, mais la ca ne me redirige pas vers la page register_ok.php mais ca me rajoute "SELECT * FROM users WHERE pseudo='$_POST[pseudo]'" en haut de la page...
0
Utilisateur anonyme
10 janv. 2013 à 11:33
ca me rajoute "SELECT * FROM users WHERE pseudo='$_POST[pseudo]'"
Ça, ça m'étonne beaucoup... Tu as bien copié-collé $requete = "SELECT * FROM users WHERE pseudo='$_POST[pseudo]'"; avec un double-quote avant SELECT et un après pseudo] ? Ou tu as recopié à la main, en adaptant ?

Autre détail : Ajoute un 'exit;' après chaque 'header('Location:..'); car le header n'arrête pas le script, la suite s'exécute sans le exit;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 janv. 2013 à 11:22
voir commentaires et corrections:

<?php 
require_once('Connections/maconnexion.php'); //on fait appel ici à un petit fichier ou on a mis les données de connexion au serveur sql
//est ce que ce fichier contient mysql_connect(....) ?

$error=0;
if (isset($_POST['s_inscrire']))
{
// si on est ici c'est qu'on vient du formulaire (bouton input submit dont le name="s_inscrire"

		if (($_POST['pseudo']!="") && ($_POST['password']!="") && ($_POST['passwordrepeat']!="") && ($_POST['email']!=""))
		{
				$pseudo=mysql_real_escape_string($_POST['pseudo']);
				mysql_select_db($database_maconnexion, $maconnexion);//on choisit la db sur laquelle on va travailler, il faut le faire AVANT la requette, a moins que ce ne soit déja fait dans le fichier maconnexion.php ?
				$reg = mysql_query("SELECT * FROM users WHERE pseudo='".$pseudo."'");
				$num_rows = mysql_num_rows($reg);

				if($num_rows == 0 ){
						//On verifie si le mot de passe et celui de la verification sont identiques
        				if($_POST['password']==$_POST['passwordrepeat']){					
								//on fait appel ici à un petit fichier qui contient une fonction réalisée avec une expression régulière pour vérifier qu'un mail est bien un mail valide
								require_once('testmail.php'); 
								if (isValidEmail($_POST['email']))
								{

										// si on est ici c'est que le login rentré par l'utilisateur n'existait pas encore dans la base de données... on va donc pouvoir l'inscrire !

										$insertSQL = sprintf("INSERT INTO users (pseudo, password, email) VALUES ('%s', '%s', '%s')",
					   							mysql_real_escape_string($_POST['pseudo']),
                       							mysql_real_escape_string$_POST['password']),
					   							mysql_real_escape_string($_POST['email']));
												
										//echo ($insertSQL); affichage de la chaine de caractère créée en cas de besoin de débuggage  										
  										if($Result1 = mysql_query($insertSQL, $maconnexion) or die(mysql_error())){
										// on exécute la req d'insertion et on verifie que elle s'est bien passée 										
											header("register_ok.php");// petite redirection vers une page qui dit qu'on est bien inscrit
										}else{
											echo "pb requette insertion";
										}

								}
								else
								{
								//mail incorrect
								header("location: register_erreurmail.php");
								
								}

        				}
       					else
        				{
                		//mots de passes ne sont pas identiques
                		header("location: register_erreurpass.php");
						
        				}  
  
				}
				else
				{
				//pseudo déjà pris
				header("location: register_erreurpseudo.php");
				
				}
				
		}
		else
		{
		// remplir tous les champs obligatoires
		header("location: register_erreurchamps.php");
		
		}

}

?>



Et voici mon formulaire :

<form action="register.php"  method="POST" class="css" name="form1" id="signup">
      <h1>C'est parti pour l'inscription !</h1>
    <fieldset>
    <legend>&nbsp;&nbsp;&nbsp;Informations de contact&nbsp;&nbsp;&nbsp;</legend>
    <label for="pseudo"></label>
    <input type="text" name="pseudo" placeholder="Votre pseudo" />
    <br />
    <label for="password"></label>
    <input type="password" name="password" placeholder="Votre mot de passe" />
    <br />
    <label for="passwordrepeat"></label>
    <input type="password" name="passwordrepeat" placeholder="Répétez votre mot de passe" />
    <br />
    <label for="email"></label>
    <input type="text" name="email" placeholder="Votre e-mail"/>
  </fieldset>
  <p class="register button" align="center"> 
  <!--- Ligne ci dessous modifiée -->
    <input type="submit" name="s_inscrire" value="S'inscrire" />S'inscrire</button> 
	</p>
</form>
0
Merci pour le temps passé pour tenter de trouver une solution à mes problèmes :-) Malheureusement, rien n'est réglé après avoir tenté tes modifications :/

Et tu semblais vouloir savoir ce que contient mon fichier maconnexion.php qui est appelé au début du code, le voici :

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
// cette petite page sera appelée par toutes les pages php de mon site qui ont besoin de se connecter au serveur sql
// cette petite page contient les données et la fonction nécessaire pour se connecter au serveur sql (dans chaque page il faudra encore choisir la base de donnée avec laquelle on travaillera et bien entendu envoyer une demande d'exécution de code sql au serveur)

$hostname_maconnexion = "127.0.0.1";
$database_maconnexion = "db";
$username_maconnexion = "root";
$password_maconnexion = "root";
$maconnexion = mysql_pconnect($hostname_maconnexion, $username_maconnexion, $password_maconnexion) or trigger_error(mysql_error(),E_USER_ERROR); 
?>
0