8791 sujets

Développement web côté serveur, CMS

Je fais une nouvelle fois appel à votre aide.
J'ai un formulaire, qui doit envoyer des valeurs dans ma base, rien de compliqué, c'est un formulaire d'enregistrement pour les utilisateurs.

donc formulaire :


<form action="new_utilisateur.php" method="POST">
<table align="center" border="0">
  <tr>
	<td>Tous les champs sont obligatoires.</td>
  </tr>
  <tr>
    <td>Identifiant :</td>
    <td><input type="text" name="login" onKeyUp="verifPseudo(this.value)" />
<div id="pseudobox"></div></td>
  </tr>
  <tr>
    <td>Mot de passe : (6 caract&egrave;res)</td>
    <td><input type="text" name="pass" maxlength="10" onKeyUp="verifPass(this.value)"/>
<div id="pseudobox"></div></td>
  </tr>
  <tr>
    <td>Nom :</td>
    <td><input type="text" name="nom" maxlength="25"></td>
  </tr>
  <tr>
    <td>Pr&eacute;nom :</td>
    <td><input type="text" name="prenom" maxlength="25"></td>
  </tr>
  <tr>
    <td>Adresse de livraison :</td>
    <td><textarea name="adresse" cols="30" rows= "10"></textarea></td>
  </tr>
  <tr>
    <td>T&eacute;l&eacute;phone :</td>
    <td><input type="text" name="tel" maxlength="14" value="xx.xx.xx.xx.xx"></td>
  </tr>
  <tr>
    <td>Email :</td>
    <td><input type="text" name="mail" maxlength="25"></td>
  </tr>
  
    
  <tr>
    <td colspan="2" align="center"><input type="submit" value="Enregistrement" ></td>
  </tr>
</table>
</form>


Ensuite j'ai mon traitement php :

<?
include ('connection.php');

if(isset($_POST) ){
	
	if (!empty($_POST['login']) && !empty($_POST['pass'])&& !empty($_POST['nom'])&& !empty($_POST['prenom'])&& !empty($_POST['adresse'])&& !empty($_POST['tel'])&& !empty($_POST['mail'])) {
	extract($_POST);
	
	mysql_real_escape_string($_POST['login'])= $login;
	mysql_real_escape_string($_POST['pass'])= $pass;
	mysql_real_escape_string($_POST['nom'])= $nom;
	mysql_real_escape_string($_POST['prenom'])= $prenom;
	mysql_real_escape_string($_POST['adresse'])= $adresse;
	mysql_real_escape_string($_POST['mail'])= $mail;

		$sql = 'INSERT INTO users (id, login, pass, nom, prenom, adresse, tel, mail) VALUES ('','$login','$pass','$nom','$prenom','$adresse','$tel','$mail')' or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
	
		mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
	echo $sql;
		echo 'Vous êtes enregistré(e). Vous pouvez vous connecter.';
		include('index.php');

}
else {
	echo '<p>Vous avez oublié de remplir un champ.</p>';
	include('index.htm');
	exit;
}

}else{
	echo 'Vous n\'avez rien rempli.';
	include('index.htm');
	exit;
	}
}
?>


Le problème est que lorsque j'envoie cela me met :


'.mysql_error()); mysql_query($sql) or die('Erreur SQL !'.$sql.'
'.mysql_error()); echo $sql; echo 'Vous êtes enregistré(e). Vous pouvez vous connecter.'; include('index.php'); } else { echo '

Vous avez oublié de remplir un champ.
'; include('index.htm'); exit; } }else{ echo 'Vous n\'avez rien rempli.'; include('index.htm'); exit; } } ?> 


J'ai essayé de faire des echo afin de voir s'il récupérait les valeurs de mes champs et.... rien...

Que faire ?
Salut,

C'est hallucinant le nombre de chose à dire sur le code php et html Smiley biggol .

Met au moins des labels pour le formulaire.

Tu peux également te passer de tableau : mise en forme de formulaire sans tableaux, aligner des éléments , mise en page avancée grâce à la propriété display.


Le code php en vrac :
- utilisais <?php et non <?. Sur certain serveur le <? ne marche pas.
- inutile de faire un isset($_POST) car cette variable existe automatiquement dans le cadre d'application web.
- par contre tu ne vérifie pas si les champ de formulaire existe. Empty ne sert qu'à vérifie si la variable est vide. Il faut utilisais empty et isset :
(isset($_POST['login'], $_POST['pass'], etc) && !empty($_POST['login'])) && etc)
. Regarde aussi du coté des filtres pour validé l'adresse mail par exemple.
- virer ce magnifique extract et ne surtout par l'utilisé pour des variables venant de l'utilisateur ><.
- revoir les base de php pars-que l'affectation de variables ce fait dans l'autre sens ($variable = valeur).
- revoir les base de la concaténation.
- viré le or die qui ne sert strictement à rien (le 1er). Et franchement, c'est pas lourd de marquer or die machin à chaque fois ? Puis si un jour tu veux changé la gestion des erreurs ça va être galère, donc soit faire une fonction qui fait la requête et retourne un résultat soit utilisais par exemple PDO.

Au passage les fonction mysql sont dépassé est remplcé par mysqli ou pdo. Après ça dépend de la version de php.

EDIT : met ce bout de code au début du script principal lors des test (à enlevé en production), tu vas bien te marrer Smiley biggol .
//gestion des erreur au max (évite les erreurs bête comme une variable inexistante)
error_reporting(E_ALL | E_STRICT);

//tranforme les erreur en exception ErrorException
function exception_error_handler($errno, $errstr, $errfile, $errline) {
	throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler('exception_error_handler');

Modifié par jo_link_noir (26 Jul 2010 - 20:26)
Merci pour toutes ces info.
Je suis chef de projet de formation donc il me manque pas mal de bases en dev pur.

Pour le <? oui ca c'est une erreur que j'ai modifié cette aprèm, juste un oubli.
Pour l'affectation de variables pareil, j'ai modifié pas mal le code copié/collé et pareil ca a été modifié dans l'aprem, encore une erreur d'oubli.
Pour la concaténation bien vu, je revois les bases en ce moment ^^

Pour le reste je me sens vieux d'un coup xD
Je vais mettre en pratique tout ca.
Pour mysqli je suis pas encore mis à jour ^^

Merci en tout cas pour ton aide Smiley smile
Après quelques (pas mal de modif surtout sur les mysqli) il me reste :


Parse error: parse error in C:\wamp\www\biomonde\catalogue\new_utilisateur.php on line 14


La ligne en question :
$sql = "INSERT INTO users (id, login, pass, nom, prenom, adresse, tel, mail) VALUES ("","$login","$pass","$nom","$prenom","$adresse","$tel","$mail")";


Il me semble pourtant qu'il n'y a aucune erreur..
Modérateur
Bonjour,

Je ne connais pas le PHP, mais à vu de nez, je dirais que c'est parce qu'il y a des " à l'intérieur de d'autres ". Normalement, dans la plupart des langages, il faut les échappers avec un caractère spécial, ou encore utiliser le simple apostrophe à l'intérieur.
Tu as raison ^^ Au bout de 11h de tafe j'ai plus les yeux devant les trous... J'arrête la.
Ca fonctionne (enfin cette partie du code).

Encore merci pour votre aide.