je netrouve pas l'erreur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : je netrouve pas l'erreur

par Ryle » 25 mai 2008, 16:47

euh juste une question de ma part, sur la syntaxe du $resultat['mdp'], ça fonctionne même avec des " au lieu des ' ?
Oui cela fonctionne. En fait ce qu'il faut comprendre cest que $resultat est un tableau associatif et que l'on va demander à php de nous retourner la valeur associé à l'index demandé, l'index en question pouvant être un nombre ou une chaine. Donc dès le moment qu'on indique une chaine, qu'elle soit entre guillemets, apostrophes, concaténée, contenue dans une variable, ... php ira bien trouver la valeur associée.

Dans le cas présent, rien est affiché parce qu'il y a une erreur fatale (appel d'une fonction inconnue) avant l'affichage des données. Il devrait y avoir un message d'erreur à l'écran, ou à la limite dans le code source, sauf si le rapport des messages d'erreurs (error_reporting) est désactivé :)


@orgerix : Je partage ta façon de faire, mais plus pour une question de lisibilité et de maintenabilité que pour une question de performance :) Je ne suis d'aileurs pas certain que les balises de php consomment du temps ou des ressources. Je crois qu'elles servent juste à indiquer au parseur qu'il doit interpréter le code qu'elle contienne au lieu de se contenter d'afficher tel quel le code qui se trouve en dehors... m'enfin j'en sais trop rien :)

par orgerix » 25 mai 2008, 15:41

while($resultat = mysql_fetch_array($req)){ 
  //ton traitement 
  //à la fin du traitement la boucle passe d'elle-même 
  //à l'enregistrement suivant s'il y en a plusieurs 

  <td><?php echo $resultat["mdp"]; ?></td> 
} 
Les balises <td> correspondent à du code html. Assures-toi d'avoir bien fermé les balises php avant de les utiliser, de même, pense à les rouvrir lorsque tu reviens sur du code php
<?php
while ($resultat = mysql_fetch_array($req)) { 
  //ton traitement 
  //à la fin du traitement la boucle passe d'elle-même 
  //à l'enregistrement suivant s'il y en a plusieurs 
  ?>
  <td><?php echo $resultat["mdp"]; ?></td> 
  <?php
} 
?>

Cependant, il me semble que l'ouverture et la fermeture des balises php demande un peu de temps et qu'il faut l'éviter dès que possible. Utiliser la fonction print() ou la commande echo me semble être plus être adapté, surtout que la parti HTML est très courte (\r\n correspond à un retour à la ligne)
<?php
while ($resultat = mysql_fetch_array($req)) { 
  //ton traitement 
  //à la fin du traitement la boucle passe d'elle-même 
  //à l'enregistrement suivant s'il y en a plusieurs 
  
  echo "<td>";
  echo $resultat["mdp"];
  echo "</td>\r\n"; 
} 
?>
[/

par animithra » 25 mai 2008, 13:43

Bonjour.

euh juste une question de ma part, sur la syntaxe du $resultat['mdp'], ça fonctionne même avec des " au lieu des ' ?

Parce que si c'est le cas, même si elle n'a pas de balise <table> il devrait y avoir un affichage...

Bonne progra !

par Ryle » 25 mai 2008, 10:49

en complément de la remarque de d0m :
$sql= "SELECT mdp FROM membre1 WHERE `pseudo` LIKE '$pseudo' AND `e_mail` LIKE '$e_mail'";
Quand tu fais une comparaison SQL entre deux valeurs, utilise le signe égal. Le LIKE n'est utilisé que pour une ressemblance entre 2 chaines. Voir les bonnes pratiques SQL dans la FAQ.
 $req = mysql_query($sql)) or die ("Requête incorrecte");
Pas de "." (opérateur de concaténation) entre les deux, comme indiqué par d0m :)
    $resultat = mysql_numrows($sql); 
La fonction mysql_numrows() n'existe pas. Tu as au choix mysql_num_rows() ou msql_numrows() selon la base de données que tu utilises. Voir la documentation des fonctions de php :)
while($resultat = mysql_fetch_array($req)){
Fais attention, tu utilises la variable $resultat pour connaitre le nombre d'enregistrements retournés par ta requête, et tu la réutilises ici pour lui affecter chaque enregistrement. Si ca ne pose pas de problème particulier, ca peut être source de confusion.
while($resultat = mysql_fetch_array($req)){ 
  //ton traitement 
  //à la fin du traitement la boucle passe d'elle-même 
  //à l'enregistrement suivant s'il y en a plusieurs 

  <td><?php echo $resultat["mdp"]; ?></td> 
} 
Les balises <td> correspondent à du code html. Assures-toi d'avoir bien fermé les balises php avant de les utiliser, de même, pense à les rouvrir lorsque tu reviens sur du code php
<?php
while ($resultat = mysql_fetch_array($req)) { 
  //ton traitement 
  //à la fin du traitement la boucle passe d'elle-même 
  //à l'enregistrement suivant s'il y en a plusieurs 
  ?>
  <td><?php echo $resultat["mdp"]; ?></td> 
  <?php
} 
?>

par d0m » 23 mai 2008, 16:09

il ne faut pas mettre de .(point) entre la requete et le or die
non pas :
$req = mysql_query($sql)). 
    or die ("Requête incorrecte");
mais
$req = mysql_query($sql))
    or die ("Requête incorrecte".mysql_error());

par lili » 23 mai 2008, 16:04

voiçi mo code modifié
:lol: surement ya des erreur puisque je tombe sur une page blanche!

Code : Tout sélectionner

$sql= "SELECT mdp FROM membre1 WHERE `pseudo` LIKE '$pseudo' AND `e_mail` LIKE '$e_mail'"; $req = mysql_query($sql)). or die ("Requête incorrecte"); $resultat = mysql_numrows($sql); if ($resultat) { // Si il y'a des résultats while($resultat = mysql_fetch_array($req)){ //ton traitement //à la fin du traitement la boucle passe d'elle-même //à l'enregistrement suivant s'il y en a plusieurs <td><?php echo $resultat["mdp"]; ?></td> } </tr> } // Fin instruction while else { // Pas de résultat trouvé echo "Pas de résultat"; } mysql_free_result($query);

par animithra » 23 mai 2008, 15:34

Bonjour.

Ce que Ryle veut dire c'est que normalement on fonctionne de la manière suivante :

1°) on rédige la requête, ce que tu as fait avec $sql
2°) on envoie la requête ($req = mysql_query($sql)).

Lorsque tu envoies la requête, le serveur va retourner la liste de tous les résultats.
Pour les traiter, il faut que tu fasses une boucle sur tout ce qu'il te renvoie :
while($resultat = mysql_fetch_array($req)){
  //ton traitement
  //à la fin du traitement la boucle passe d'elle-même
  //à l'enregistrement suivant s'il y en a plusieurs
}
mysql_fetch_array() va créer un tableau associatif des données qu'il reçoit, sous la forme :

$resultat['nom du champ de la base de données'] = "valeur";

pour appeler le mot de passe qu'il reçoit dans ton cas, il faut utiliser $resultat['mdp'].

J'espère que c'est un peu plus clair pour toi à présent...

Bonne progra !

[EDIT] avant de faire mysql_fetch_array($req) il faut que tu testes s'il y a ou non des resultats (mysql_num_rows($req)), sinon - s'il n'y a aucun résultat - tu risques d'avoir un FATAL ERROR...

par lili » 23 mai 2008, 15:28

j'avoue que je suis depassée je ne comprends pas :(

par Ryle » 23 mai 2008, 15:18

Plein de petites choses qui ne vont pas dans ton code, mais la principale c'est celle-ci :
while ($rs =mysql_query($sql)) { 
Tu vas boucler non pas sur les enregistrements retournés par la requête (mysql_fetch_*), mais sur l'exécution de la requête (mysql_query) :)

je netrouve pas l'erreur

par lili » 23 mai 2008, 15:13

Bonjour,

Je voudrais récuperer un mot de passe oublié ,sans l'envoyerr par mail juste le voir affiché dans une page.
Voici mon code php

Code : Tout sélectionner

mysql_select_db('xxx',$db); $pseudo = $_POST["pseudo"]; $e_mail = $_POST["e_mail"]; // on envoie la requte $sql= "SELECT mdp FROM membre1 WHERE `pseudo` LIKE '$pseudo' AND `e_mail` LIKE '$e_mail'"; $query = mysql_query($sql) or die ("Requête incorrecte"); $result = mysql_numrows($query); if ($result) { // Si il y'a des résultats while ($rs =mysql_query($sql)) { ?> <tr> <td><?php echo $rs["mdp"]; ?></td> </tr> <?php } // Fin instruction while } else { // Pas de résultat trouvé echo "Pas de résultat"; } mysql_free_result($query); mysql_close(); ?> <html> <form method="post" action="mdp.php"> <div align="center"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><br> Pseudo</font></b><br> <input type="text" name="pseudo"> <br> Email</font></b><br> <input type="text" name="e_mail"> <br> <br> <input type="submit" name="Submit" value="Entrer" class="input"> </div> </form> </html>
et voici mon formulaire

Code : Tout sélectionner

<html> <form method="post" action="mdp.php"> <div align="center"><b><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><br> Pseudo</font></b><br> <input type="text" name="pseudo"> <br> Email</font></b><br> <input type="text" name="e_mail"> <br> <br> <input type="submit" name="Submit" value="Entrer" class="input"> </div> </form> </html>
le probléme c'est que je n'arrive pas à afficher le mot de passe :( [/code]