logo Homepage
+  NewbieContest
|-+  Programmation» Langages Web» [php] question sur les conditions
Username:
Password:
Pages: [1] 2
  Imprimer  
Auteur Fil de discussion: [php] question sur les conditions  (Lu 7553 fois)
nofx
Profil challenge

Classement : 1821/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« 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
Journalisée
Lanselius

Profil challenge

Classement : 437/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 68


Voir le profil
« #1 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)
Journalisée
nofx
Profil challenge

Classement : 1821/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« #2 le: 20 Mars 2007 à 15:21:28 »

merci mais ca fait exactement la meme chose!
Journalisée
myhz

Profil challenge

Classement : 101/54324

Néophyte
*
Hors ligne Hors ligne
Messages: 48


Voir le profil
« #3 le: 20 Mars 2007 à 15:42:54 »

des parenthèses ?

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

---
L'urgent est fait, l'impossible est en cours, pour les miracles, prévoir un délai ...
---
nofx
Profil challenge

Classement : 1821/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« #4 le: 20 Mars 2007 à 15:54:32 »

non plus merci
Journalisée
zours

Profil challenge

Classement : 553/54324

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 811


Voir le profil
« #5 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.
Journalisée
nofx
Profil challenge

Classement : 1821/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« #6 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
Journalisée
Zmx

Profil challenge

Classement : 71/54324

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 559


Voir le profil WWW
« #7 le: 20 Mars 2007 à 16:57:12 »

C'est quoi l'interet de tes while ?
Journalisée

IoNAce
Profil challenge

Classement : 2111/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 63


Voir le profil
« #8 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 :-)
Journalisée
nofx
Profil challenge

Classement : 1821/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 88


Voir le profil WWW
« #9 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
Journalisée
Nebelmann

Profil challenge

Classement : 464/54324

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1357


Voir le profil
« #10 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"
);
Journalisée

-- Nebelmann -- Registered linux user #429186
«Si les lecteurs étaient des compilateurs, les posteurs feraient peut-être davantage attention à ce qu'ils écrivent...»
IoNAce
Profil challenge

Classement : 2111/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 63


Voir le profil
« #11 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

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
Journalisée
Zmx

Profil challenge

Classement : 71/54324

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 559


Voir le profil WWW
« #12 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

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.
Journalisée

IoNAce
Profil challenge

Classement : 2111/54324

Membre Junior
**
Hors ligne Hors ligne
Messages: 63


Voir le profil
« #13 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
Journalisée
Zmx

Profil challenge

Classement : 71/54324

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 559


Voir le profil WWW
« #14 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
Journalisée

Pages: [1] 2
  Imprimer  
 
Aller à: