erreur? Où ça?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 déc. 2011, 11:29

sam12 : nan d'après sa table l'id n'est pas en auto_increment ET ne doit pas être null donc la erreur SQL a coup sur ;)

faudrais aussi enlever le commentaire foireux que j'ai laisser sur la fermeture du if
if (mysql_query($sql)) {
// la quand c'est bon
}
else {
echo 'Erreur SQL : '. mysql_error().'<br />'.$sql;
}

Damb34 : a priori tu utilise un index qui n'existe pas. tu peux voir qu'effectivement il n'est pas dans $_POST (je te conseil de le mettre entre des <pre></pre> ce sera plus lisible, tu peux aussi utiliser la fonction var_dump() en lieu et place de print_r).

ton message d'erreur est vrai lorsque l'on n'utilise pas le bouton radio "upload" il faut que tu donne le même nom au deux boutons et une valeur différente ! (donc typeava et upload_inscription deviennent (par exemple) typeavatar avec pour valeur defaut / upload et fait ton traitement en fonction de cette valeur).
il faudra donc modifier la ligne avec les 400 isset ;)
ansi que les suivantes parce que bon je vois pas l'intérêt de l'utiliser dans la requête sql

Pour rappel un bouton de choix lorsqu'il n'y a qu'un choix ne rime a rien (c'est un peux comme quand tu demande gentilement la caisse au banquier en lui mettant une kalach la tempe ;) ).

j'en profite pour t'indiquer que les valeurs des attributs html devrait être entourés de " et non de ' ;)

ta requête SQL d'insertion est foireuse (problème de virgule et champs non initialisé, faut mettre les délimiteurs de chaine pour tout les champs, sauf les chiffres bien sur, en aucun cas tu ne peux rien mettre entre deux virgules surtout quand le champ n'est pas nullable ;))
en php il est préférable d'utiliser && (ou & suivant la situation) plutôt que AND (c'est du SQL ça)
tu n'a pas de champ signature ni upload_machin dans ta table donc c'est fortement a revoir ! (y a d'autre qui n'existe pas)

bon courage !

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 43 Messages

22 déc. 2011, 13:21

Je te remercie beaucoup Moogli et les autres. Mais après avoir fait tout ce que tu m'as dit, j'ai une erreur sur ton code
	//On enregistre les informations dans la base de donnee
					$sql = 'insert into users(id, username, password, email, avatar, adresse_web, adresse_msn, adresse_aim, prenom, nom, ville, signature, upload_inscription, autmail, sexe_inscription  signup_date,) values ('.$id.', "'.$username.'", "'.$password.'", "'.$email.'", "'.$avatar.'", '.$adresse_web.', '.$adresse_msn.', '.$adresse_aim.', '.$prenom.', '.$nom.', '.$ville.', '.$signature.', '.$avatar.', '.$autmail.', '.$sexe_inscription.', "'.time().'")'
if (mysql_query($sql)) {
// la quand c'est bon
}
else {
echo 'Erreur SQL : '. mysql_error().'
'.$sql;
}
?> 
Ligne :
if (mysql_query($sql)) {
l'erreur est :
( ! ) Parse error: syntax error, unexpected T_IF in C:\wamp\www\site\inscription.php on line 116 (celle que j'ai mis au dessus)

EDIT : Voici la mise a jour de ma page php :
	<?php
include('config.php');
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>

           <title>DBA PRODUCTION FILMS : LA REALISATION AUDIOVISUELLE</title>


                                                                <!--Metas-->

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="fr" />

<link rel="stylesheet" media="all" type="text/css" href="css/espacemembre.css" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />


</head>


<body>
<div class="content">
  <?php
//On affiche un message de bienvenue, si lutilisateur est connecte, on affiche son pseudo
?>
	<?php if(isset($_SESSION['username'])){echo ' Bonjour '.htmlspecialchars($_SESSION['username'], ENT_QUOTES, 'UTF-8');} ?>
  <?php
//Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter
if(isset($_SESSION['username']))
{
//On compte le nombre de nouveaux messages que lutilisateur a
$nb_new_pm = mysql_fetch_array(mysql_query('select count(*) as nb_new_pm from pm where ((user1="'.$_SESSION['userid'].'" and user1read="no") or (user2="'.$_SESSION['userid'].'" and user2read="no")) and id2="1"'));
//Le nombre de nouveaux messages est stoque dans la variable $nb_new_pm
$nb_new_pm = $nb_new_pm['nb_new_pm'];
//On affiche les liens
?>
      
  <a href="list_pm.php"> | Vous avez <?php echo $nb_new_pm; ?> messages</a> | <a href="edit_infos.php">Mon compte | </a>
  <a href="connexion.php">Se d&eacute;connecter</a>
  <?php
}
else
{
//Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter
?>
  <a href="inscription.php">Inscription</a>
  <a href="connexion.php">Se connecter</a>
  <?php
}
?>
    </div>
?php include('include/header.inc.php'); ?>

		<!-- corps -->
	<div id="corps">
		<div id="titre"><font color="#000000">Inscrip</font><font color="#ba2c3a">tion</font>
        </div>
        
        <div id="descriptif_inscription"> Vous avez aimé nos tutoriaux? Vous désirez participer aux forums, à une news? Pour cela rien de plus simple. Remplissez les informations demandées, cela ne vous prendra que deux minutes.
        </div>
	
    <div id="inscription">
    


<?php
//On verifie que le formulaire a ete envoye
if(isset($_POST['username'], $_POST['password'], $_POST['passverif'], $_POST['email'], $_POST['avatar']) && $_POST['username']!='')
{
print_r($_POST);

	//On verifie si le mot de passe et celui de la verification sont identiques
	if($_POST['password']==$_POST['passverif'])
	{
		//On verifie si le mot de passe a 6 caracteres ou plus
		if(strlen($_POST['password'])>=6)
		{
			//On verifie si lemail est valide
			if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['email']))
			{
				//On echape les variables pour pouvoir les mettre dans une requette SQL
				$username = mysql_real_escape_string($_POST['username']);
				$password = mysql_real_escape_string($_POST['password']);
				$email = mysql_real_escape_string($_POST['email']);
				$avatar = mysql_real_escape_string($_POST['avatar']);
				$adresse_web = mysql_real_escape_string($_POST['adresse_web']);
				$adresse_msn = mysql_real_escape_string($_POST['adresse_msn']);
				$adresse_aim = mysql_real_escape_string($_POST['adresse_aim']);
				$prenom = mysql_real_escape_string($_POST['prenom']);
				$nom = mysql_real_escape_string($_POST['nom']);
				$ville = mysql_real_escape_string($_POST['ville']);
				$signature = mysql_real_escape_string($_POST['signature']);
				$autmail = mysql_real_escape_string($_POST['autmail']);
				$sexe_inscription = mysql_real_escape_string($_POST['sexe_inscription']);
				//On verifie sil ny a pas deja un utilisateur inscrit avec le pseudo choisis
				$dn = mysql_num_rows(mysql_query('select id from users where username="'.$username.'"'));
				if($dn==0)
				{
					//On recupere le nombre dutilisateurs pour donner un identifiant a lutilisateur actuel
					$dn2 = mysql_num_rows(mysql_query('select id from users'));
					$id = $dn2+1;
					//On enregistre les informations dans la base de donnee
					$sql = 'insert into users(id, username, password, email, avatar, adresse_web, adresse_msn, adresse_aim, prenom, nom, ville, signature, upload_inscription, autmail, sexe_inscription  signup_date,) values ('.$id.', "'.$username.'", "'.$password.'", "'.$email.'", "'.$avatar.'", '.$adresse_web.', '.$adresse_msn.', '.$adresse_aim.', '.$prenom.', '.$nom.', '.$ville.', '.$signature.', '.$avatar.', '.$autmail.', '.$sexe_inscription.', "'.time().'")'
					if (mysql_query($sql)) {
//}
else {
echo 'Erreur SQL : '. mysql_error().'<br />'.$sql;
}

?> 
					
<div class="message">Vous avez bien &eacute;t&eacute; inscrit. Vous pouvez dor&eacute;navant vous connecter.<br />
<a href="connexion.php">Se connecter</a></div>
<?php
					}
					else
					{
						//Sinon on dit quil y a eu une erreur
						$form = true;
						$message = 'Une erreur est survenue lors de l\'inscription.';
					}
				}
				else
				{
					//Sinon, on dit que le pseudo voulu est deja pris
					$form = true;
					$message = 'Un autre utilisateur utilise d&eacute;j&agrave; le nom d\'utilisateur que vous d&eacute;sirez utiliser.';
				}
			}
			else
			{
				//Sinon, on dit que lemail nest pas valide
				$form = true;
				$message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';
			}
		}
		else
		{
			//Sinon, on dit que le mot de passe nest pas assez long
			$form = true;
			$message = 'Le mot de passe que vous avez entr&eacute; contien moins de 6 caract&egrave;res.';
		}
	}
	else
	{
		//Sinon, on dit que les mots de passes ne sont pas identiques
		$form = true;
		$message = 'Les mots de passe que vous avez entr&eacute; ne sont pas identiques.';
			}
		}
		else
		{
			$form = true;
		}
		if($form)
		{
		//On affiche un message sil y a lieu
		if(isset($message))
		{
			echo '<div class="message">'.$message.'</div>';
		}
		//On affiche le formulaire
		?>
		<div class="titre_pour_inscription">
			<form action="inscription.php" method="post">
				<div align="center">Veuillez remplir ce formulaire pour vous inscrire:<br />
				</div>
				<div class="center">
					<p class="double">
				  <label for="username">			          Nom d'utilisateur *</label>
				  <input type="text" name="username" value="<?php if(isset($_POST['username'])){echo htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');} ?>" />
				  <br />
				  </p>
				  <p class="double">
				    <label for="password">Mot de passe<span class="small">(6 caract&egrave;res min.)</span> *</label><input type="password" name="password" /><br /></p>
					<p class="double">
					  <label for="passverif">Mot de passe<span class="small">(v&eacute;rification)</span> *</label><input type="password" name="passverif" /><br /></p>
				  <p class="double">
				    <label for="email">Email *</label><input type="text" name="email" value="<?php if(isset($_POST['email'])){echo htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8');} ?>" /><br /></p>
                   <p class="double"><label for="site_internet">Site web(sans http://)</label><input type='text' name='adresse_web'  id='adresse_web'></p>
 					<p class="double"><label for="adresse_msn">MSN</label><input type='text' name='adresse_msn'  id='adresse_msn'></p>
                    <p class="double"><label for="adresse_aim">AIM</label><input type='text' name='adresse_aim'  id='adresse_aim'></p>
                    <p class="double"><label for="prenom">Prénom</label><input type='text' name='prenom'  id='prenom'></p>
                    <p class="double"><label for="nom">Nom</label><input type='text' name='nom'  id='nom'></p>
 					<p class="double"><label for="ville">Ville *</label><input type='text' name='ville'  id='ville'></p>
                  <p class="double"><label for="signature">Signature *</label><textarea type='text' name='signature'  id='signature'></textarea></p>
		
					<center>Selectionnez le type d'avatar que vous désirez :</center>

                    <p class="double"><input name='avatar' type='file' id='avatar'></p>


	<p class="double"><label for="afficher_email">Afficher votre email?</label>Oui : <input type='radio' name='autmail'  value="oui" checked="checked">&nbsp;Non : <input name='autmail' type='radio' value='non'></p>
	
    	<p class="double"><label for="sexe">Votre sexe</label>Homme : <input type='radio' name='sexe_inscription'  value="homme" checked="checked">&nbsp;Femme : <input name='sexe_inscription' type='radio' value='femme'></p>
					<input type="submit" value="Envoyer" />  <input type="button" value="Retour" onClick="history.go(-1)">
				</div>
			</form>
		</div>
		<?php
		}
		?>
	</div>
</div>

<div style="clear:both"></div>
<?php include('include/footer.inc.php'); ?>


</body>
</html>

Eléphanteau du PHP | 43 Messages

22 déc. 2011, 13:56

J'ai trouvé le problème, mais pas la réponse :(. Quand je mets ce que Moogli m'a donné sur la premiere page, cela me donne l'erreur donné dans mon message ci dessous. J'ai alors décidé de reprendre ma base. Le probleme est dans ce morceau
<?php
//On verifie que le formulaire a ete envoye
if(isset($_POST['username'], $_POST['password'], $_POST['passverif'], $_POST['email'], $_POST['avatar']) && $_POST['username']!='')
{
print_r($_POST);

	//On verifie si le mot de passe et celui de la verification sont identiques
	if($_POST['password']==$_POST['passverif'])
	{
		//On verifie si le mot de passe a 6 caracteres ou plus
		if(strlen($_POST['password'])>=6)
		{
			//On verifie si lemail est valide
			if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['email']))
			{
				//On echape les variables pour pouvoir les mettre dans une requette SQL
				$username = mysql_real_escape_string($_POST['username']);
				$password = mysql_real_escape_string($_POST['password']);
				$email = mysql_real_escape_string($_POST['email']);
				$avatar = mysql_real_escape_string($_POST['avatar']);
				$adresse_web = mysql_real_escape_string($_POST['adresse_web']);
				$adresse_msn = mysql_real_escape_string($_POST['adresse_msn']);
				$adresse_aim = mysql_real_escape_string($_POST['adresse_aim']);
				$prenom = mysql_real_escape_string($_POST['prenom']);
				$nom = mysql_real_escape_string($_POST['nom']);
				$ville = mysql_real_escape_string($_POST['ville']);
				$signature = mysql_real_escape_string($_POST['signature']);
				$autmail = mysql_real_escape_string($_POST['autmail']);
				$sexe_inscription = mysql_real_escape_string($_POST['sexe_inscription']);
				//On verifie sil ny a pas deja un utilisateur inscrit avec le pseudo choisis
				$dn = mysql_num_rows(mysql_query('select id from users where username="'.$username.'"'));
				if($dn==0)
				{
					//On recupere le nombre dutilisateurs pour donner un identifiant a lutilisateur actuel
					$dn2 = mysql_num_rows(mysql_query('select id from users'));
					$id = $dn2+1;
					//On enregistre les informations dans la base de donnee
					if(mysql_query('insert into users(id, username, password, email, avatar, signup_date) values ('.$id.', "'.$username.'", "'.$password.'", "'.$email.'", "'.$avatar.'", "'.time().'")'))
					{
						//Si ca a fonctionne, on naffiche pas le formulaire
						$form = false;
?> 
Ici tout marche : Je m'inscris avec mon pseudo, mon passe et mon email.

Quand je modifie pour ça :
					//On enregistre les informations dans la base de donnee
					if(mysql_query('insert into users(id, username, password, email, avatar, adresse_web, adresse_msn, adresse_aim, prenom, nom, ville, signature, upload_inscription, autmail, sexe_inscription  signup_date,) values ('.$id.', "'.$username.'", "'.$password.'", "'.$email.'", "'.$avatar.'", "'.$adresse_web.'", "'.$adresse_msn.'", "'.$adresse_aim.'", "'.$prenom.'", "'.$nom.'", "'.$ville.'", "'.$signature.'", "'.$avatar.'", "'.$autmail.'", "'.$sexe_inscription.'", "'.time().'")'))
					{
						//Si ca a fonctionne, on naffiche pas le formulaire
						$form = false;
?> 


Meme si je ne rempli que mon pseudo, passe et email , j'ai "une erreur est survenue".

Pourtant dans les deux cas le print_r me donne :

Array ( [username] => Test [password] => testtest [passverif] => testtest [email] => [email protected] [adresse_web] => [adresse_msn] => [adresse_aim] => [prenom] => [nom] => [ville] => [signature] => [avatar] => [autmail] => oui [sexe_inscription] => homme )

Quand j'essaie avec tous les champs, le print me donne pareil, mais avec les infos.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 déc. 2011, 16:06

1/ ton message d'erreur est du au fait qu'il manque le point virgule a la fin de la définition de la variable $sql ....
2/ si tu n'affiche pas la requête SQL tu ne pourra pas la débugger ! (ni même le message d'erreur)
3/ A tu modifier ta base pour accueillir les champs que tu souhaite mettre !

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 43 Messages

23 déc. 2011, 11:22

Merci a toi Moogli de prendre du temps pour aider les noobs comme moi ^^.

Pour répondre à ta question, oui la base de données est completement bien rempli, j'ai rectifié ce qui n'allait pas.

J'ai rajouté le point virgule à la fin de $sql, mais une nouvelle erreur vient d'arriver avec une "{"
				//Sinon, on dit que lemail nest pas valide
				$form = true;
				$message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';
			}
		}
		else
		{
			//Sinon, on dit que le mot de passe nest pas assez long
			$form = true;
			$message = 'Le mot de passe que vous avez entr&eacute; contien moins de 6 caract&egrave;res.';
		}
	} 
	else
	{
		//Sinon, on dit que les mots de passes ne sont pas identiques
		$form = true;
		$message = 'Les mots de passe que vous avez entr&eacute; ne sont pas identiques.';
	}
}
else
{
	$form = true;
}

if($form)
{
	//On affiche un message sil y a lieu
	if(isset($message))
	{
		echo '<div class="message">'.$message.'</div>';
	}
	//On affiche le formulaire
?>
C'est la deuxième après "$message = 'Le mot de passe que vous avez entr&eacute; contien moins de 6 caract&egrave;res.';" j'avoue ne pas comprendre, car apres vérification, il y a tout les points virgules et les accolades ouvertes et fermées.

EDIT : au final j'ai tout repris depuis la base,et j'ai compris que le bug venait de mon upload d'avatar. J'vais chercher sur google, pour plus d'infos sur l'upload de fichier.

En tout cas merci beaucoup à tous, mais principalement à Moogli, d'être pédagogue et sans préjugé. Merci

J'avoue que je ne désespère pas, et qu'il faut du temps pour comprendre toutes les erreurs et tout le codage php sql