NewbieContest

Programmation => Langages Web => Discussion démarrée par: nofx le 20 Mars 2007 à 14:54:38



Titre: [php] question sur les conditions
Posté par: nofx le 20 Mars 2007 à 14:54:38
bonjour à tous,

je fais une condition dans ce genre

Code:
if ($nomsx != $nom and $noms==$nom)
{
echo "<div align = center>Erreur nom déja existant</div>";
echo "<script type=\"text/javascript\">"
      ."setTimeout(\"window.location='index.php?page=clients/inscription'\",2000);" // delai en millisecondes
."</script>";
}
et cette condition ne prend en compte que la première condition dans le if c'est a dire "$nomsx != $nom" quelque soit l'autre cela ne change rien!
Je ne comprend pas pouquoi si vous avez une solution merci


Titre: [php] question sur les conditions
Posté par: Lanselius le 20 Mars 2007 à 15:06:38
Salut =)

Je te conseille de remplacer le "and" par "&&" de façon à avoir :

Code:
if ($nomsx != $nom && $noms==$nom)
=D


Titre: [php] question sur les conditions
Posté par: nofx le 20 Mars 2007 à 15:21:28
merci mais ca fait exactement la meme chose!


Titre: [php] question sur les conditions
Posté par: myhz le 20 Mars 2007 à 15:42:54
des parenthèses ?

Code:
if (($nomsx != $nom) && ($noms==$nom))


Titre: [php] question sur les conditions
Posté par: nofx le 20 Mars 2007 à 15:54:32
non plus :/ merci


Titre: [php] question sur les conditions
Posté par: zours le 20 Mars 2007 à 16:05:25
Code:
<?php
$nom 
"nom" ;
$nomsx "nomm" ;
$noms "nom" ;

if (
$nomsx != $nom && $noms == $nom)
{
echo "pwet\n" ;
}
?>
Ce code fonctionne très bien et de la manière qu'on attend. Moralité, si y'a un problème, c'est sûrement pas du côté du if qu'il faut chercher.


Titre: [php] question sur les conditions
Posté par: nofx le 20 Mars 2007 à 16:35:24
en gros c'est ca le code

Code:
$nom = $_POST['nom'];  
$nom = htmlentities( $_POST['nom']);
$nom = addslashes( $_POST['nom']);
$reponses = mysql_query("SELECT * FROM clients WHERE nom='$nom' OR prenom='$prenom' OR email='$email'") OR die ("<div style=\"text-align: center;\">Erreur!</div>");
while ($nonn = mysql_fetch_array($reponses))
{
$noms = $nonn['nom'];
$prenoms = $nonn['prenom'];
$mails = $nonn['email'];
}
$reponse = @mysql_query("SELECT * FROM clients WHERE clients='".$_SESSION['client']."'") OR die ("<div style=\"text-align: center;\">Erreur!</div>");
while ($non = mysql_fetch_array($reponse))
{
$nomsx = stripslashes($non['nom']);
$prenomx = stripslashes($non['prenom']);
$emailx = stripslashes($non['email']);

}
if ($nomsx != $nom && $noms == $nom)
{
echo "<div align = center>Erreur nom déja existant</div>";
echo "<script type=\"text/javascript\">"
      ."setTimeout(\"window.location='index.php?page=clients/inscription&menu=Inscription espace clients'\",2000);" // delai en millisecondes
."</script>";
}
voila je vois pas pourquoi cela ne fonctionne pas ya quelque chose qui m'échappe merci


Titre: [php] question sur les conditions
Posté par: Zmx le 20 Mars 2007 à 16:57:12
C'est quoi l'interet de tes while ?


Titre: [php] question sur les conditions
Posté par: IoNAce le 20 Mars 2007 à 17:17:15
Hello
Plusieurs erreurs dans ton code :
mysql_fetch_array() ne sert a rien dans ton cas car tu n'utilises pas les clefs associatives. Un mysql_fetch_assoc() serait plus approprie. Ensuite, tu dois tester correctement ta condition :
Code:
while ($nonn = mysql_fetch_array($reponses))
{
$noms = $nonn['nom'];
$prenoms = $nonn['prenom'];
$mails = $nonn['email'];
}
doit etre transforme en
Code:
while ( ($nonn = mysql_fetch_assoc($reponses)) !== FALSE)
{
$noms = $nonn['nom'];
$prenoms = $nonn['prenom'];
$mails = $nonn['email'];
}
Pareille pour la deuxieme boucle. Ensuite, je ne comprend pas trop l'interet de tes boucles car tu ecrase la derniere valeur a chaque tour de boucle.
Je pense qu'il se peut que php te cree un tableau a chaque fois (meme si sa me parait etrange).
Essaye sa :
Code:
if ($nomsx !== $nom && $noms === $nom)
{
echo "<div align = center>Erreur nom déja existant</div>";    
echo "<script type=\"text/javascript\">"
         ."setTimeout(\"window.location='index.php?page=clients/inscription&menu=Inscription espace clients'\",2000);" // delai en millisecondes
        ."</script>";
}
Le triple egale permet de tester le type et la valeur a la fois. SI le type est different, la valeur ne sera pas teste. Ensuite, essaye de faire un debug de tes variables avec un print_r(var) avant de rentrer dans ta verif. Voila le code complet :
Code:
$nom = $_POST['nom'];  
$nom = htmlentities( $_POST['nom']);
$nom = addslashes( $_POST['nom']);
$reponses = mysql_query("SELECT * FROM clients WHERE nom='$nom' OR prenom='$prenom' OR email='$email'") OR die ("<div style=\"text-align: center;\">Erreur!</div>");
while (($nonn = mysql_fetch_assoc($reponses)) !== FALSE)
{
$noms = $nonn['nom'];
$prenoms = $nonn['prenom'];
$mails = $nonn['email'];
}
$reponse = @mysql_query("SELECT * FROM clients WHERE clients='".$_SESSION['client']."'") OR die ("<div style=\"text-align: center;\">Erreur!</div>");
while (($non = mysql_fetch_assoc($reponse)) !== FALSE)
{
$nomsx = stripslashes($non['nom']);
$prenomx = stripslashes($non['prenom']);
$emailx = stripslashes($non['email']);

}
print_r($nomsx);
print_r($nom);
if ($nomsx !== $nom && $noms === $nom)
{
echo "<div align = center>Erreur nom déja existant</div>";    
echo "<script type=\"text/javascript\">"
         ."setTimeout(\"window.location='index.php?page=clients/inscription&menu=Inscription espace clients'\",2000);" // delai en millisecondes
        ."</script>";
}
Je pense pas que cela fonctionnera mieux mais tu auras des resultats t'indiquant les erreurs possibles (venant probablement de tes boucles c'est quasi-sur)

Enjoy :-)


Titre: [php] question sur les conditions
Posté par: nofx le 21 Mars 2007 à 08:03:12
Merci a toi cela fonctionne!

Mais je n'est pas tres bien saisi la différence entre "mysql_fetch_assoc" et "mysql_fetch_array"!!
Si quelqu'un pouvait me l'expliquer!
merci


Titre: [php] question sur les conditions
Posté par: Nebelmann le 21 Mars 2007 à 08:52:27
Citation
Si quelqu'un pouvait me l'expliquer!
La documentation de PHP peut-être ?
http://www.php.net/manual/fr/function.mysql-fetch-assoc.php

Sachant qu'un tableau associatif contient des valeurs du style :

Code:
$foo = array(
   "kikoo" => "lol",
  "foo" => "bar"
);


Titre: [php] question sur les conditions
Posté par: IoNAce le 21 Mars 2007 à 16:56:11
L'interet est surtout due a la vitesse d'execution de ton script (details tres important). En utilisant mysql_fetch_array(), PHP va perdre du temps a essayer de trouver les clefs associatives que tu n'utilises pas. SI c'ets juste pour faire de l'exctraction de donnees, mieux vaut juste recuperer ce dont tu as besoin sans chercher plus compliquer, l'interpreteur n'en sera que plus rapide =D

Auter detail sur l'optimisation : tes requetes sql. A part si tu utilises tous les champs et qu'il y en a beaucoup, il n'est pas conseillle de faire un SELECT * FROM [...]. Mysql va devoir chercher lui meme le nom des champs qu'il doit extraire alors que si tu lui donne, il te les renvoi direct sans les chercher... sa peut paraitre con mais sur des dizaines de requetes comme celle ci, tu peut arriver a gagner quelques secondes pour tous les calculs ... sa vaut le coup si tu souhaite passer un jour en production :D


Titre: [php] question sur les conditions
Posté par: Zmx le 21 Mars 2007 à 18:33:38
Citation de: IoNAce
Il n'est pas conseillle de faire un SELECT * FROM [...].
Juste un petit cas particulier en plus :D

Code:
SELECT COUNT(*) FROM MyTable
est plus rapide (dans la plupart des bdd) que
Code:
SELECT COUNT(myField) FROM MyTable
(de plus la 2eme solution count seulement les lignes ou myField !=null, mais on va dire que le myField IS NOT NULL)


Code:
SELECT COUNT(1) FROM MyTable
est (il parais) encore plus rapide.


Titre: [php] question sur les conditions
Posté par: IoNAce le 21 Mars 2007 à 22:09:45
Citation de: Zmx
SELECT COUNT(1) FROM MyTable
est (il parais) encore plus rapide.
C'est vrai que si on utilise la numeration des tables, c'est encore plus rapide. Mais faut connaitre la valeur des tables (pas dur en y reflechissant, c'ets jamais qu'un tableau index) mais peut pratique, en tout cas a mon avis =)

@++ et bon coding ;)


Titre: [php] question sur les conditions
Posté par: Zmx le 22 Mars 2007 à 09:22:05
ah non, rien a voir avec la numerotation des table :p

C'est juste qu'avec "1" il ne fetch meme pas le contenu de la tablre pour verifier (contrairement a * ou FieldName),
Il prend pour chaque ligne la valeur numeric 1 (ça aurais pu etre 42 ou "pouet") donc => gain de temps


Titre: [php] question sur les conditions
Posté par: IoNAce le 22 Mars 2007 à 22:50:00
Ah bah je viens d'apprend un truc !
Merci Zmx =D