Phpmysql

Fermé
salna Messages postés 42 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 12 janvier 2009 - 1 nov. 2008 à 21:41
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 - 8 nov. 2008 à 21:08
Bonjour à tous! voilà j'ai un problème que je n'arrive pas à résoudre. Je suis entrain de faire un site internet et j'avais envie que les visiteurs puissent s'inscrire. Je me lance donc dans la création de mon script d'inscription. Tant que j'y suis, j'ai voulu faire en sorte qu'il vérifier si le pseudo et password exist dans la base de donnée ou non

bon voici mon code, j'espère que vous pourrai m'aider ou de corriger .
<?php
// D'abord, on se connecte à MySQL
mysql_connect("localhost", "root");
mysql_select_db("boutique");

// J'ai choisi le mot de passe "kan"
if (isset($_POST['pseudo'])AND isset($_POST['modepass'])) // Si la variable existe
{

$login = $_POST['pseudo'];
$modepass = $_POST['modepass'];
}
else // La variable n'existe pas encore
{
$login = "";
$modepass = "";
}

$nbre_util=mysql_query("SELECT * FROM inscription")or die(mysql_error());
$nbre = mysql_num_rows($nbre_util);

for ($i=1;$i <= $nbre;$i++)
{
$afficher = mysql_query("SELECT pseudo FROM inscription WHERE id='$i'")or die(mysql_error());
$test = mysql_fetch_array($afficher);
$pseudo = $test['pseudo'];
if ($pseudo == $login AND $modepass == "kan") // Si le mot de passe est bon
{
// On affiche la page cachée.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>inscription</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h3>Mon compte </h3>

<hr />

<fieldset>
<legend>Informations personnelles</legend>
<p>
<?php echo $donnees ['sexe'].$donnees ['nom'].$donnees ['prenom']; ?>
</p>
</fieldset><br/><br/>
<fieldset>
<legend>Adresse de livraison</legend>
<p>
<?php echo 'Rue'.$donnees ['rue'];?><br/>
<?php echo $donnees ['codepostal'].$donnees ['ville'];?><br/>
<?php echo $donnees ['pays'];?>
</p>
</fieldset><br/><br/>
</body>
</html>
<?php
break;

}
else // le mot de passe n'est pas bon
{
// On affiche la zone de texte pour rentrer le mot de passe.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Page protégée par mot de passe</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form action="md.php" method="post">
<p>
<fieldset>
<legend>mon compte</legend>
<p>
Pseudo : <input type="text" name="pseudo" size="40"/><br /><br/>
password : <input type="password" name="modepass" size="40"/><br /><br/>
</p>
<p><input type="submit" value="Envoyer" size="20"/></p> <br/>
</fieldset><br/><br/>
<fieldset>
<legend>Inscription</legend>
<p>
<h3>Si vous n'êtes pas encore client, vous devez vous identifier : <br/>
<a href="new 5.php" ><img src="http://www.lepelican.fr/sources/inscription-image.jpg" alt="inscription nouveau client" title="cliqué ici pour inscrire"/></a>.</p>
</fieldset><br/><br/>
</body>
</html>

<?php

} // Fin du else
// Fin du code :

}
mysql_close();
?>


merci d'avance

7 réponses

j'ai fait une requete pour afficher tout le contenu de la table dans un tableau Non tu n'affiches pas tout le contenu de la table. Quand je lis ton code :
Tu commences par extraire tout de ta table pour compter les lignes.

Puis tu fais une boucle for en ré-interrogeant ta base à chaque fois avec l'id 1, puis 2 , etc...). C'est absurde, Tu avais déjà extrait tous les champs ! Un foreach sans nouvelle requête eût été beaucoup plus logique. Surtout que ta requête ne va pas marcher : si tu as 6 membres, que tu effaces l'id 3 (par exemple), il ne t'en reste que 5 et tu vas interroger 1,2,3,4,5 au lieu de 1,2,4,5,6.
Ensuite pour chaque membre qui n'est pas celui recherché, tu affiches un nouveau formulaire complet, du DOCTYPE au /html. Tu risques donc d'en afficher 10,20,100 peut-être avant de te rende compte que finalement si, ce pseudo est bien dans ta base, et d'afficher les bonnes données.

Avec une seule et unique requête avec une clause "select * from `inscription` WHERE `login`='".mysql_real_escape_string($pseudo)."'", tu sais directement si un login est ou non dans ta base. Tu n'as pas besoin d'une boucle for pour aller comparer les enregistrements un par un.

Dernier détail : si tu récupères tes infos dans $test, n'essaye pas d'afficher $donnees...
1
salna Messages postés 42 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 12 janvier 2009
3 nov. 2008 à 21:56
merci iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
0
salna Messages postés 42 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 12 janvier 2009 > salna Messages postés 42 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 12 janvier 2009
6 nov. 2008 à 20:22
salut ,j'ai essié mais le prob n'as pas résoudre.
0
Bonjour

À quoi sert ta boucle for ?
Tu balayes toute ta table en affichant le formulaire de saisie du mot de passe jusqu'à ce que tu trouves éventuellement les bons login/mot de passe. Pourquoi fais-tu ça ?
Il me semble que tu aurais dû faire une et une seule requête qui cherche sil y a dans la table une ligne avec les bons login/mot de passe et ensuite faire un traitement ou un autre en fonction du résultat.
0
salna Messages postés 42 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 12 janvier 2009
2 nov. 2008 à 22:32
salut, j'ai fait une requete pour afficher tout le contenu de la table dans un tableau ,puis on compare le login /mot de pass avec le login de formulaire (la boucle for pour parcourir le le tableau à chaque compareson ) .
0
romano06 Messages postés 97 Date d'inscription mercredi 3 septembre 2008 Statut Membre Dernière intervention 4 mai 2009 8
6 nov. 2008 à 20:26
C'est bizarre, tu l'a eu ou ton script PHP ?
0
salna Messages postés 42 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 12 janvier 2009
6 nov. 2008 à 21:53
tu l'a eu ou ton script PHP ? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

pas compris
0
Bonsoir

Peux-tu montrer ton script modifié ?
0

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

Posez votre question
romano06 Messages postés 97 Date d'inscription mercredi 3 septembre 2008 Statut Membre Dernière intervention 4 mai 2009 8
7 nov. 2008 à 16:30
Ce code laque tu as mis, tu l'a eu ou, il est compliqué on peut faire beaucoup plus simple tu sait ^^
0
salna Messages postés 42 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 12 janvier 2009
8 nov. 2008 à 16:16
moi , j'ai utilisé un Wampserver (phpadmin) pour faire la connection vers ma table (base dedonnées)
0
salut ,j'ai essié mais le prob n'as pas résoudre.
On veut bien t'aider, mais quand on te demande ton script modifié tu ne le donnes pas. Comment veux-tu qu'on t'aide alors ?
0
salna Messages postés 42 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 12 janvier 2009
8 nov. 2008 à 20:44
merci, sayi j'ai modifier encord et mon prob est résolu voici ce qui monque de mon script:

$user=mysql_query("select * from inscription WHERE pseudo='".mysql_real_escape_string($pseudo)."' AND modepass='".mysql_real_escape_string($modepass)."'")or die(mysql_error());
if($donnees = mysql_fetch_array($user) )
{
une autre fois mmmmmmmmmmmmerci.
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 121
8 nov. 2008 à 21:08
Slt,

Je ne sais pas ou est l'erreur, mais le code contient une faille de sécurité: est ce la fonction .mysql_real_escap_string($var) peut vous protejer contre les injection SQL?
Une méthode est simple (si la réponse est NON): tu cherche le login, en faisant une requete seulement sur le Pseudo puis tu récupère le champs mot_de_passe et tu comparre, et comme cela vous arrivez même à définir la source d'echec: pseudo introuvable ou mot de passe incorrect.
0