affichage des allertes utilisateur

Répondre
cedcyr
le 31/01/2010 à 15:30
cedcyr
Bonjour, en inspirant du cours et de la rubrique comment faire, j'ai créé un formulaire pour lesquels subsistent 2 bugs auquel je ne trouve aucune solution.
En premier lieu la fonction de vérification de la présence ou non du Login dans ma base ne se fait pas et donc la réinscription dans la base de données est systématique
et en deuxième lieu le message d'erreur liée à un mauvais remplissage du formulaire débouche sur des pages blanches (pour info le formulaire se trouve dans une ifarme d'une autre page de mon site)

Merci par avance pour vos lumières

cedcyr

Le code de mon formulaire
<html>
<head>
<title>Ma page de test</title>
</head>
<body >
<form action="test2.php" method="post" name="form1">
<h4>Votre nom : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type = "text" name = "nom" size ="30"/><br/>
<br/>
Votre prénon : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type = "text" name = "prenom" size ="30"/> <br/>
<br/>
Votre adresse mail :&nbsp;&nbsp;&nbsp; <input type = "text" name = "mail" size ="30"/> <br/>
<br/>
Votre identifiant :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type = "text" name = "identifiant"size ="30"value="<?php if (isset($_POST['identifiant'])) echo htmlentities(trim($_POST['identifiant'])); ?>"/> <br/>
<br/>
Votre mot de passe : &nbsp;&nbsp;<input type = "password" name = "pass" size ="30"value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"/> <br/>
<br/>
Confirmer votre mot de passe : <input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"/> <br/>
<br/>
Votre département : &nbsp;&nbsp;&nbsp;&nbsp;<input type = "text" name = "departement" size ="30"/> <br/>
<br/>
Votre statut :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<select name="statut" id="statut"><option selected="selected"></option>
<option value="particulier">Particulier</option>
<option value="professionel">Professionel</option></select> <br /></h4>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type = "submit" name="inscription" value = "inscription"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type= "reset" value ="effacer" /><br/>
<br/>
<br/>
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>


mon scritp php
<?php
class SendMail {
var $destinataire;
var $objet;
var $texte;
var $from;
function envoyer() {
mail ($this->destinataire, $this->objet, $this->texte,$this->from);
}
}
$hote = 'localhost';
$user = '******';
$pass = '*******';

if (isset($_POST['inscription']) && $_POST['inscription'] == 'inscription') {

if ((isset($_POST['nom']) && !empty($_POST['nom']))
&& (isset($_POST['prenom']) && !empty($_POST['prenom']))
&& (isset($_POST['mail']) && !empty($_POST['mail']))
&& (isset($_POST['identifiant']) && !empty($_POST['identifiant']))
&& (isset($_POST['pass']) && !empty($_POST['pass']))
&& (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))
&& (isset($_POST['departement']) && !empty($_POST['departement']))
&& (isset($_POST['statut']) && !empty($_POST['statut'])))
{

if($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.'; }


else {$base = mysql_connect($hote,$user,$pass);
mysql_select_db('attelage_accesattelage',$base);
$mysql = 'SELECT count(*) FROM inscription WHERE login="'.mysql_escape_string($_POST['login']).'"';
$req = mysql_query($mysql) or die('Erreur SQL !<br />'.$mysql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);



if ($data[0] == 0){
$mysql = 'INSERT INTO inscription VALUES("",
"'.mysql_escape_string($_POST['nom']).'",
"'.mysql_escape_string($_POST['prenom']).'",
"'.mysql_escape_string($_POST['mail']).'",
"'.mysql_escape_string($_POST['identifiant']).'",
"'.mysql_escape_string(md5($_POST['pass'])).'",
"'.mysql_escape_string($_POST['departement']).'",
"'.mysql_escape_string($_POST['statut']).'")';

mysql_query ($mysql) or die ('Erreur SQL !'.$mysql.'<br />'.mysql_error());




$message = new SendMail ();
$message->from = "FROM:inscription@attelage-astuce.com";
$message->destinataire = $_POST['mail'];
$message->objet = "votre inscription sur attelage-astuce.com";
$message->texte = "bonjour";
$message->texte = "bienvenu sur http://www.attelage-astuce.com \nvous pouvez maintenant acceder aux notices de montage
\n \n votre identifiant est : ".$_POST['identifiant']." \n et votre mot de passe est : ".$_POST['pass']."
\n merci de ne pas repondre a ce mail, celui-ci vous a ete adresse automatiquement\n\n cordialement le webmaster.";
$message->envoyer();

$message = new SendMail ();
$message->from = "FROM:".$_POST['mail']."";
$message->destinataire = "webmaster@attelage-astuce.com";
$message->objet = "nouvelle inscription attelage-astuce.com";
$message->texte = "adresse mail : ".$_POST['mail']." \n\n identifiant : ".$_POST['identifiant']."
\n\n mot de passe : ".$_POST['pass'].".";
$message->envoyer();

session_start();
$_SESSION['login'] == $_POST['identifiant'];
header('Location: http://www.attelage-astuce.com');
exit();
}
else {
$erreur = 'identifiant déja utillisé, veulliez en changer.'; }
}
}

else {
$erreur = 'merci de remplire le formulaire correctement!';
}
}
?>
cedcyr
moogli
le 31/01/2010 à 21:28
moogli
salut,

$_POST['login'] existe pas ! (pas dans le formulaire) doit y avoir une erreur qui n'est pas affichée dans lors de son utilisation dans la rêquete SQL.
Donc $data[0] doit contenir false ce qui veut dire 0 .... donc c'est valide :) (je pense que c'est ce qui se passe car $data[0] ne peut exister).

Pour t'en convaincre il faut paramétrer correctement le error_reporting() pour le développement de ton site (seulement pour le dev). => error_reporting(E_ALL); en haut de chaque script tu y verras le erreur.

Pendant que j'y suis, bannis l'étoile des requetes SQL, tu veut avoir le nombre de ligne avec l'identifiant entré dans le formulaire : select count(id) as nombre from table where truc=machin.
Pourquoi ? parce que la tu sais ce que tu compte, (j'ai pris id en exemple car c'est un nom souvent utilisé pour les clef primaire des table).
avec le as nombre, la "case" du tableau associatif est nommé tu a donc $data['nombre'].

autre conseil, indente mieux ton code, la c'est des gros pâtés on s'y perd.

Pour le coup de la page blanche c'est normal en cas d'erreur tu n'a pas de header tu reste donc sur test2.php.

@+

il faut afficher toute les erreurs,

error_reporting(E_ALL); en début de script !
Il en faut peu pour être heureux !!!!!
cedcyr
le 01/02/2010 à 00:17
cedcyr
bonsoir j'ai repris mon code avec est indication et maintenant je constate que le form se recharge sans que rien ne s'affiche ! la fonction erro_reporting ne me donne rien et en remplacent $erreur par echo le message qui me di que l'identifiant est deja utilisé apparait dans une page blanche alors qu'il n'est pas présent dans ma base ! il y a vraiment de quoi se jeter en l'air!

voivi mon nouveau code (j'ai volotairement laisser le echo du message qui s'affiche

merci cedcyr
cedcyr
cedcyr
le 01/02/2010 à 00:18
cedcyr
<?php
error_reporting(E_ALL);
class SendMail {
var $destinataire;
var $objet;
var $texte;
var $from;
function envoyer() {
mail ($this->destinataire, $this->objet, $this->texte,$this->from);
}
}
$hote = 'localhost';
$user = 'root';
$pass = '';

if (isset($_POST['inscription']) && $_POST['inscription'] == 'inscription') {

if ((isset($_POST['nom']) && !empty($_POST['nom']))
&& (isset($_POST['prenom']) && !empty($_POST['prenom']))
&& (isset($_POST['mail']) && !empty($_POST['mail']))
&& (isset($_POST['identifiant']) && !empty($_POST['identifiant']))
&& (isset($_POST['pass']) && !empty($_POST['pass']))
&& (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))
&& (isset($_POST['departement']) && !empty($_POST['departement']))
&& (isset($_POST['statut']) && !empty($_POST['statut'])))
{

if($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.'; }


else {$base = mysql_connect($hote,$user,$pass);
mysql_select_db('test',$base);
$mysql = 'SELECT count(id) as nombre FROM inscription WHERE login="'.mysql_escape_string($_POST['identifiant']).'"';
$req = mysql_query($mysql) or die('Erreur SQL !<br />'.$mysql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);



if ($data[0] = 0){
$mysql = 'INSERT INTO inscription VALUES("",
"'.mysql_escape_string($_POST['nom']).'",
"'.mysql_escape_string($_POST['prenom']).'",
"'.mysql_escape_string($_POST['mail']).'",
"'.mysql_escape_string($_POST['identifiant']).'",
"'.mysql_escape_string(md5($_POST['pass'])).'",
"'.mysql_escape_string($_POST['departement']).'",
"'.mysql_escape_string($_POST['statut']).'")';

mysql_query ($mysql) or die ('Erreur SQL !'.$mysql.'<br />'.mysql_error());




$message = new SendMail ();
$message->from = "FROM:inscription@attelage-astuce.com";
$message->destinataire = $_POST['mail'];
$message->objet = "votre inscription sur attelage-astuce.com";
$message->texte = "bonjour";
$message->texte = "bienvenu sur http://www.attelage-astuce.com \nvous pouvez maintenant acceder aux notices de montage
\n \n votre identifiant est : ".$_POST['identifiant']." \n et votre mot de passe est : ".$_POST['pass']."
\n merci de ne pas repondre a ce mail, celui-ci vous a ete adresse automatiquement\n\n cordialement le webmaster.";
$message->envoyer();

$message = new SendMail ();
$message->from = "FROM:".$_POST['mail']."";
$message->destinataire = "webmaster@attelage-astuce.com";
$message->objet = "nouvelle inscription attelage-astuce.com";
$message->texte = "adresse mail : ".$_POST['mail']." \n\n identifiant : ".$_POST['identifiant']."
\n\n mot de passe : ".$_POST['pass'].".";
$message->envoyer();

session_start();
$_SESSION['login'] = $_POST['identifiant'];
header('Location: http://www.attelage-astuce.com');
exit();

}
else {
echo 'identifiant déja utillisé, veulliez en changer.'; }
}
}

else {
$erreur = 'merci de remplire le formulaire correctement!';
}
}
?>
cedcyr
cedcyr
le 01/02/2010 à 00:20
cedcyr
mon form remanier donne ceci:
<html>
<head>
<title>Ma page de test</title>
</head>
<body >
<form action="inscription.php" method="post" name="form1">
<h4>Votre nom : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type = "text" name = "nom" size ="30"value="<?php if (isset($_POST['nom'])) echo htmlentities(trim($_POST['nom'])); ?>"/><br/>
<br/>
Votre prenon : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type = "text" name = "prenom" size ="30"value="<?php if (isset($_POST['prenom'])) echo htmlentities(trim($_POST['prenom'])); ?>"/><br/>
<br/>
Votre adresse mail :&nbsp;&nbsp;&nbsp; <input type = "text" name = "mail" size ="30"value="<?php if (isset($_POST['mail'])) echo htmlentities(trim($_POST['mail'])); ?>"/> <br/>
<br/>
Votre identifiant :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type = "text" name = "identifiant"size ="30" value="<?php if (isset($_POST['identifiant'])) echo htmlentities(trim($_POST['identifiant'])); ?>"/> <br/>
<br/>
Votre mot de passe : &nbsp;&nbsp;<input type = "password" name = "pass" size ="30"/> <br/>
<br/>
Confirmer votre mot de passe : <input type="password" name="pass_confirm" /> <br/>
<br/>
Votre departement : &nbsp;&nbsp;&nbsp;&nbsp;<input type = "text" name = "departement" size ="30"value="<?php if (isset($_POST['departement'])) echo htmlentities(trim($_POST['departement'])); ?>"/> <br/>
<br/>
Votre statut :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<select name="statut" id="statut"><option selected="selected"></option>
<option value="particulier">Particulier</option>
<option value="professionel">Professionel</option></select> <br /></h4>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type = "submit" name="inscription" value = "inscription"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type= "reset" value ="effacer" /><br/>
<br/>
<br/>
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>
cedcyr
cedcyr
le 01/02/2010 à 00:28
cedcyr
a petite précision en faisant un test avec le form et le script dans la même page les message lier a la fonction $erreur apparaisse normalement mais le probléme de l'identifiant deja présent dans ma base alors qu'il n'y est pas persiste !

au plaisir de vous lire quand a moi je vais encore passer des nuits blanche en quette de la solution, ce que php ne sait pas c'est que je suis plus têtu qu' ane

merci ! cedcyr
cedcyr
moogli
le 02/02/2010 à 10:49
moogli
raaaaaaaa j'suis mirro :/

tu a mis = au lieu de == dans e if $data[0]=0, la tu fait une affectation pas une comparaison c'est pour cela que la condition est toujours vrai et que donc l'insertion se fait :)

tu devrais ajouter une clause dans ta table : unique sur la ligne identifiant ;)

@+
Il en faut peu pour être heureux !!!!!
moogli
le 02/02/2010 à 12:06
moogli
le code qui fonctionne :)

@+
<?php
error_reporting(E_ALL);
/**
class SendMail {
var $destinataire;
var $objet;
var $texte;
var $from;
function envoyer() {
mail ($this->destinataire, $this->objet, $this->texte,$this->from);
}
}
**/
$hote = 'localhost';
$user = 'root';
$pass = '';
var_dump($_POST);
if (isset($_POST['inscription']) && $_POST['inscription'] == 'inscription') {

if ((isset($_POST['nom']) && !empty($_POST['nom']))
&& (isset($_POST['prenom']) && !empty($_POST['prenom']))
&& (isset($_POST['mail']) && !empty($_POST['mail']))
&& (isset($_POST['identifiant']) && !empty($_POST['identifiant']))
&& (isset($_POST['pass']) && !empty($_POST['pass']))
&& (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))
&& (isset($_POST['departement']) && !empty($_POST['departement']))
&& (isset($_POST['statut']) && !empty($_POST['statut'])))
{

if($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.'; }


else {
$base = mysql_connect($hote,$user,$pass);
mysql_select_db('cedcyr',$base);
$mysql = 'SELECT count(id) as nombre FROM inscription WHERE login="'.mysql_escape_string($_POST['identifiant']).'"';
$req = mysql_query($mysql) or die('Erreur SQL !<br />'.$mysql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);



if ($data[0] == 0){
echo 'dans le if';
$mysql = 'INSERT INTO inscription VALUES("",
"'.mysql_escape_string($_POST['nom']).'",
"'.mysql_escape_string($_POST['prenom']).'",
"'.mysql_escape_string($_POST['mail']).'",
"'.mysql_escape_string($_POST['identifiant']).'",
"'.mysql_escape_string(md5($_POST['pass'])).'",
"'.mysql_escape_string($_POST['departement']).'",
"'.mysql_escape_string($_POST['statut']).'")';
echo '<pre>',$mysql,'</pre>';
$ret = mysql_query ($mysql);
if ( $ret === false) {
mysql_error();
}
else {
echo 'requete OK';
}



/**
$message = new SendMail ();
$message->from = "FROM:inscription@attelage-astuce.com";
$message->destinataire = $_POST['mail'];
$message->objet = "votre inscription sur attelage-astuce.com";
$message->texte = "bonjour";
$message->texte = "bienvenu sur http://www.attelage-astuce.com \nvous pouvez maintenant acceder aux notices de montage
\n \n votre identifiant est : ".$_POST['identifiant']." \n et votre mot de passe est : ".$_POST['pass']."
\n merci de ne pas repondre a ce mail, celui-ci vous a ete adresse automatiquement\n\n cordialement le webmaster.";
$message->envoyer();

$message = new SendMail ();
$message->from = "FROM:".$_POST['mail']."";
$message->destinataire = "webmaster@attelage-astuce.com";
$message->objet = "nouvelle inscription attelage-astuce.com";
$message->texte = "adresse mail : ".$_POST['mail']." \n\n identifiant : ".$_POST['identifiant']."
\n\n mot de passe : ".$_POST['pass'].".";
$message->envoyer();
**/
session_start();
$_SESSION['login'] = $_POST['identifiant'];
//header('Location: http://www.attelage-astuce.com');
exit();

}
else {
echo 'identifiant déja utillisé, veulliez en changer.'; }
}
}

else {
$erreur = 'merci de remplire le formulaire correctement!';
}
}
?>

<html>
<head>
<title>Ma page de test</title>
</head>
<body >
<form action="cedcyr.php" method="post" name="form1">
<h4>Votre nom : <input type = "text" name = "nom" size ="30"value="<?php if (isset($_POST['nom'])) echo htmlentities(trim($_POST['nom'])); ?>"/><br/>
<br/>
Votre prenon : <input type = "text" name = "prenom" size ="30"value="<?php if (isset($_POST['prenom'])) echo htmlentities(trim($_POST['prenom'])); ?>"/><br/>
<br/>
Votre adresse mail : <input type = "text" name = "mail" size ="30"value="<?php if (isset($_POST['mail'])) echo htmlentities(trim($_POST['mail'])); ?>"/> <br/>
<br/>
Votre identifiant : <input type = "text" name = "identifiant"size ="30" value="<?php if (isset($_POST['identifiant'])) echo htmlentities(trim($_POST['identifiant'])); ?>"/> <br/>
<br/>
Votre mot de passe : <input type = "password" name = "pass" size ="30"/> <br/>
<br/>
Confirmer votre mot de passe : <input type="password" name="pass_confirm" /> <br/>
<br/>
Votre departement : <input type = "text" name = "departement" size ="30"value="<?php if (isset($_POST['departement'])) echo htmlentities(trim($_POST['departement'])); ?>"/> <br/>
<br/>
Votre statut : <select name="statut" id="statut"><option selected="selected"></option>
<option value="particulier">Particulier</option>
<option value="professionel">Professionel</option></select> <br /></h4>
<br/>
<input type = "submit" name="inscription" value = "inscription"/> ;
<input type= "reset" value ="effacer" /><br/>
<br/>
<br/>
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>
Il en faut peu pour être heureux !!!!!
cedcyr
le 03/02/2010 à 01:16
cedcyr
bon soir, comme quoi des fois ca tien a peut de chose, en effet avec le == au lieu du = le formulaire fonctionne mais je recontre toujour le problème pour lequel je n'est pas l'ombre d'une piste pour le resoudre! en effet quand je met le formulaire dans la même page que mon script tous va bien mais si je mets mon formulaire sur une page et le script dans un ficher script les allertes utilisateur débouche sur une page blanche bien entendu si le form a été mal rempli car si tous est ok il rejoint sa page de destination ! comment est il possible de corriger ca car pour le moment la fonction $erreur n'est pas executer dans mon formulaire ?

merci si quelqu'un peut me dire quelle approche utiliser pour lier les deux !

cedcyr
cedcyr
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours