Tom's Guide > Forum > Programmation > Pb php insolvable pour moi
Mot :    Pseudo :           
 

Bonjour,
Je voudrai savoir pourquoi ce bout de code me retourne tout le temps 0, même si je change la valeurs des champs 9 et 10.

Code :
  1. if(isset($champs[9]) AND $champs[9]="rien" AND isset($champs[10]) AND $champs[10]="rien" )
  2. {
  3.     $server_exap="0";
  4. }
  5. else
  6. {
  7.     $server_exap="1";
  8. }



Merci d'avance pour votre futur aide.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

salut, le test de l'égalité se fait avec 2 = (3 existe aussi)

Code :
  1. if ($machin == $truc)


Message édité par coca25 le 13-06-2008 à 10:55:35
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Je viens de le faire et sa me retourne tout le temps 1 pour n'importe quel valeur des champs 9 et 10

Répondre à sangokudu92

Ben cette fonction te renvoie 0 si le $champs[9] est définis avec comme valeur "rien" et si le $champs[10] est définit avec comme valeur "rien".

Si tu mets "rien" dans les champs[9] & [10] ca renvoie quoi ?

------------------------------ Quelques tutos...
Répondre à Darit

justement quand je met dans le champs[9] la valeur "rien" et le champs[10] la valeur "rien", il me retourne le résultat 1 quoi qu'il arrive, que les champs 9 et 10 soit différents ou non.

Répondre à sangokudu92

Je ne vois pas en quoi le "isset" pourrait poser problème mais si tu les enlèves ca renvoie quoi ?

Tu as bien ca comme code :

Code :
  1. if(isset($champs[9]) AND $champs[9]=="rien" AND isset($champs[10]) AND $champs[10]=="rien" ) {
  2.       $server_exap="0";
  3.   }
  4.   else  {
  5.         $server_exap="1";
  6.   }

------------------------------ Quelques tutos...
Répondre à Darit

ouai j'ai bien ce code. Bah je les ai enlever et c'est pareille. Quoi que je mette dans les variable j'ai toujours le resultat 1. Et si je met que un seul "=", le resultat me retourne tout le temps 0. Je comprend vraiment pas.

Répondre à sangokudu92

Je viens même d'essayer ce code ms sans succès:

Code :
  1. if(isset($champs[9]) AND $champs[9]=="rien" )
  2. {
  3.     $server_exap="0";
  4. }
  5. else
  6. {
  7.     $server_exap="1";
  8. }


Message édité par sangokudu92 le 13-06-2008 à 11:44:54
Répondre à sangokudu92

le code est bon, c'est donc la facon dont tu affectes les variables ou alors la manière dont tu récupères le résultat, poste plus de code!

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Et si tu fais un

Code :
  1. echo $champs[9];



Tu obtiens quoi ?

------------------------------ Quelques tutos...
Répondre à Darit

J'obtient bien la valeur du champs en question.

Répondre à sangokudu92

Et le résultat de $server_exap, tu l'obtiens et/ou le vérifie comment (par quel code) ?

------------------------------ Quelques tutos...
Répondre à Darit

Il faut peut-être que j'explique tout alors voila :) . Je doit a l'aide d'un textarea pouvoir insérer dans une base des produits.
Pourquoi le textarea, c'est pour pouvoir insérer plusieurs produit à la fois grâce a la fonction explode. Donc ma page du formulaire (où se trouve le textarea) renvois a celle ou je t'es montrer le code précédent. Le code donne ceci:

Code :
  1. //COMMENTAIRE
  2. if(isset($champs[7]) AND $champs[7]="" )
  3. {
  4.     $server_comm="none";
  5. }else{
  6.     $server_comm=$champs[7];
  7. }
  8. //FILTRE
  9. if(isset($champs[8]) AND $champs[8]="" )
  10. {
  11.     $server_filt="none";
  12. }else{
  13.     $server_filt = $champs[8];
  14. }
  15. //RECO------UNRE
  16. if($champs[9]=="rien1" AND $champs[10]=="rien2" )
  17. {
  18.     $server_exap="0";
  19. }else{
  20.     $server_exap="1";
  21. }
  22. //On explose le textarea par ligne
  23. $ligne = explode ("\n",$_POST['champs']);
  24. $i = 0;
  25. while ($ligne[$i])
  26. {
  27.     //On explose la ligne en plusieurs variable séparer par ":"
  28.     $champs = explode (":",$ligne[$i]);
  29. //VARIABLES
  30. $server_name = $champs[0];
  31. $server_arch = $champs[1];
  32. $server_func = $champs[2];
  33. $server_type = $champs[3];
  34. $server_loca = $champs[4];
  35. $server_regi = $champs[5];
  36. $server_pays = $champs[6];
  37.     // Insertion des donnée tant que le $ligne est respecté
  38.             //Voir si le produit existe déjà
  39.             $sql1=mysql_query("SELECT server_id FROM servers_table WHERE server_name='$server_name';" );
  40.             if(mysql_fetch_row($sql1)!=NULL)
  41.             {
  42.                 echo "<p align=\"center\">Le serveur $server_name est d&eacute;j&agrave; pr&eacute;sent dans la base.Vous pouvez uniquement le modifier ou le supprimer.</p>";
  43.                 //Juste pour vérifier l'affichage de $server_exap
  44.                 echo $server_exap;
  45.                 echo $champs[9];
  46.                 echo $champs[10];
  47.             }else
  48.             {
  49.                 //Insertion ds la base
  50.                 $sq2 = mysql_query("insert into servers_table (server_name,server_architecture,server_function,server_type,
  51.                                     server_localisation,server_region,server_country,log_exaprotect,comment)
  52.                                     VALUES('$server_name','$server_arch','$server_func','$server_type','$server_loca',
  53.                                     '$server_regi','$server_pays','$server_exap','$server_comm');" );
  54.                 // si l'utilisateur a saisi des logs exaprotect, on fait la jointure server.id=log.id
  55.                 if($server_exap=="1" )
  56.                 {
  57.                 $requete="SELECT server_id from servers_table where server_name='$server_name';";
  58.                 $result1=mysql_query("$requete" );
  59.                 $row1 = mysql_fetch_row($result1);
  60.                 $requete="insert into log_event(server_id,reco_event,unreco_event,filtre)VALUES('$row1[0]','$server_reco','$server_unre','$server_filt');";
  61.                 mysql_query("$requete" );
  62.                 }
  63.                 echo "<p align=center>Le serveur $server_name a correctement été ajouté dans la base.<br>";
  64.                 echo $server_exap;
  65.             }
  66. $i++;
  67. }



Voila j'éspère avoir été un peu plus clair. Si c'est pas le cas demande moi ce que tu n'as pas compris.

Répondre à sangokudu92

tout ca ne dit toujours pas comment tu renseignes les $champs, et je te signale que tu as toujours 1 seul = pour tester une égalité :o

 

fais un simple test:

Code :
  1. $champs[9]="rien";
  2. if(isset($champs[9]) AND $champs[9]=="rien" )
  3. {
  4.     $server_exap="0";
  5. }
  6. else
  7. {
  8.     $server_exap="1";
  9. }
  10. echo "<br/>";
  11. echo "Valeur de server_exap: $server_exap";
  12. echo "<br/>";


execute, tu auras 0 dans $serveur_exap
refait le test avec

Code :
  1. $champs[9]="autre chose";


et tu auras 1!

 


de plus le code que tu as posté est différent de ce que tu as donné avant, c'est des différences mineures, mais vu le = et == ...


Message édité par coca25 le 13-06-2008 à 13:58:35
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Justement j'avais bien testé ce que tu m'avais dit sur les égalitées mais sa ne marchais pas, j'ai donc du essayer autre chose. En se qui concerne le remplissage des variables $champs[n], elle se fait grâce au textarea de la manière suivante:

nom_serv:archi_serv:fonc_serv:type_serv:...
ce qui donne:
champs[0]:champs[1]:champs[2]:...
et champs faisant référence au nom du textarea.
Le pire c'est que même le simple code que tu m'as demandé de tester ne marche pas :(.
Normalement c'est ce code que je veux utiliser, mais il devrait marcher pour n'importe quel chaine de caractère.J'avais essayer avec rien, mais je préférerai le faire avec "0".

Code :
  1. if($champs[9]=="0" AND $champs[10]=="0" )
  2. {
  3.     $server_exap="0";
  4. }else{
  5.     $server_exap="1";
  6. }

Message cité 1 fois
Message édité par sangokudu92 le 13-06-2008 à 14:15:56
Répondre à sangokudu92

sangokudu92 a écrit :

Justement j'avais bien testé ce que tu m'avais dit sur les égalitées mais sa ne marchais pas, j'ai donc du essayer autre chose.


tu saisis pas une chose, un langage de programmation, ca a des règles, c'est pas une question de si ca marche pas, on tente autre chose...
en php, pour affecter une variable, c'est =, pour tester l'égalité, c'est == et pour tester l'égalité exacte (type compris), c'est ===
jongler avec le = et les autres ne rime à rien.

sangokudu92 a écrit :


En se qui concerne le remplissage des variables $champs[n], elle se fait grâce au textarea de la manière suivante:

 

nom_serv:archi_serv:fonc_serv:type_serv:...
ce qui donne:
champs[0]:champs[1]:champs[2]:...

 

et champs faisant référence au nom du textarea.


je suis sur que c'est la ou tu te trompes, mais sans code, on va pas pouvoir faire grand chose.

sangokudu92 a écrit :


Le pire c'est que même le simple code que tu m'as demandé de tester ne marche pas :(.


la, je vais te dire, qu'il faut changer de machine :p
plus sérieusement, t'as mal fait la copie, ou alors (et j'opterais plus pour cette explication), tu prends des raccourcis que tu estimes sans influence sur le résultat, mais tu te trompes.


Message édité par coca25 le 13-06-2008 à 14:24:48
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Mais quand est ce que tu assignes la variable $champs[9] & $champs[10] ?

------------------------------ Quelques tutos...
Répondre à Darit

Merci coca25, je viens de saisir la différence entre les différent "=", et merci a tout les deux de m'aider.
voila le formulaire (rien de compliqué):

Code :
  1. echo"<p>Ajouter plusieurs serveurs sous la forme suivante:<p>";
  2. echo"name_serv:archi_serv:func_serv:type_serv:loca_serv:regi_serv:pays_serv:comm_serv:filt_serv:reco_serv:unre_serv<br>";
  3. echo"Un retour &agrave; la ligne signifiera l'entr&eacute;e d'un nouveau serveur";
  4. echo"<center>";
  5. echo"<table width=680 border=1 cellspacing=1 cellpadding=0>";
  6. echo"<form method=\"post\" action=ajout_commit2.php>";
  7.         echo"<tr>";
  8.             echo"<td>";
  9.                 echo"<font size=2 color=\"#ffffff\" face=\"times new roman\">";
  10.                     echo"<center>";
  11.                         echo"<TEXTAREA rows=10 name=champs style=\"width:750px\"></TEXTAREA>";
  12.                     echo"</center>";
  13.                 echo"</font>";
  14.             echo"</td>";
  15.         echo"</tr>";
  16.         echo"<tr>";
  17.             echo"<td colspan=2>";
  18.                 echo"<font size=2 color=\"#ffffff\" face=\"times new roman\">";
  19.                     echo"<center>";
  20.                         echo"<input type=\"submit\" value=\"Ajouter\">";
  21.                         echo"<input type=button value=\"Annuler\" onclick=\"history.back()\">";
  22.                     echo"</center>";
  23.                 echo"</font>  ";       
  24.             echo"</td>";
  25.         echo"</tr>";
  26. echo"</form>";
  27. echo"</table>";
 

et voici un exemple d'insertion dans le textarea:

Code :
  1. MouMou1:INTERNET:FIREWALL:WINDOWS:DMZ:EUROPE:FRANCE:COMMENTAIRE:FILTRE:0:0


Donc les deux dernier "0" représente les champs9 et 10.
C'est plus clair comme sa?


Message édité par sangokudu92 le 13-06-2008 à 14:33:46
Répondre à sangokudu92

ok, on va pas s'en sortir...
php par défaut met les variables, post pour ton cas dans la variable globale $_POST sauf indication contraire dans la config.
et même si c'est configuré pour directement prendre en compte les variables de même nom que les champs, jusqu'à preuve du contraire, une chaine de caractère dans un textarea ne sortira jamais un tableau dans le php.

 

mais bon, continue à donner le code au compte goutte (t'es pas l'auteur du code, c'est bien ca?), on pourra tenir jusqu'à la fin de cette journée :)

 

aller prochainement, le code qui éventuellement transforme le champs en tableau...

 


EDIT, ah mais si, tu l'as déjà donné le code :)

sangokudu92 a écrit :


//On explose le textarea par ligne
$ligne = explode ("\n",$_POST['champs']);

 

$i = 0;
while ($ligne[$i])
{
//On explose la ligne en plusieurs variable séparer par ":"
$champs = explode (":",$ligne[$i]);

 

sauf qu'il est placé après les test :o


Message édité par coca25 le 13-06-2008 à 14:43:20
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

C'est pas serieux tout sa. Bien sur que c'est moi qui ai tout fait. Depuis quand on demande des explicatons sur le code des autres.
Pour la chaine de caractères, si ta question est: peut-on séparer une chaine de caractère pour en obtenir des variables, la réponse est oui.
Je vois pas ou tu veux en venir
Ben c'est normal que les test doivent être fait en premier, et s'il sont valide bah on passe à la suite du code


Message édité par sangokudu92 le 13-06-2008 à 14:48:15
Répondre à sangokudu92

La ligne suivante :

Code :
  1. $ligne = explode ("\n",$_POST['champs']);


me permet d'avoir une ligne différente après chaque retour chariot, et celui-ci:

Code :
  1. $champs = explode (":",$ligne[$i]);


me permet de séparer la chaine de caractère en plusieurs variable dés qu'il y a un ":"

Répondre à sangokudu92

j'ai édité plus haut, tu sépares après les tests!

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

désoler j'ai pas compris.

Répondre à sangokudu92

tu testes si une variable est égale à 0, rien ou autre avant même de lui affecter une valeur.

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Essaye voir en affichant ta ligne avant "l'explode" puis en l'affichant après...

 

j'ai rien dit :whistle:


Message édité par Darit le 13-06-2008 à 14:56:06
------------------------------ Quelques tutos...
Répondre à Darit

J'ai fais comme sa, mais c'est trop bizarre:

Code :
  1. //RECO------UNRE
  2. if($champs[9]=="0" AND $champs[10]=="0" )
  3. {
  4.     $server_exap="0";
  5. }else{
  6.     $server_exap="1";
  7. }
  8.                 echo "<p><p>";
  9.                 echo "server_exap: $server_exap <p>";
  10.                 echo "champs9: $champs[9]<p>";
  11.                 echo "champs10: $champs[10]<p>";



En mettant dans le textarea

Code :
  1. MouMou1:INTERNET:FIREWALL:WINDOWS:DMZ:EUROPE:FRANCE:::0:0


J'obtient: server_exap: 1 champs9: 0 champs10: 0

Répondre à sangokudu92

le cache de ton navigateur doit te jouer des tours, ctrl+f5 sur la page résultat.

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Tu as pris en compte la remarque de coca25 à savoir inverser l'ordre des instructions suivantes :

Code :
  1. //RECO------UNRE
  2. if($champs[9]=="rien1" AND $champs[10]=="rien2" )
  3. {
  4.   $server_exap="0";
  5. }else{
  6.   $server_exap="1";
  7. }



&

Code :
  1. //On explose le textarea par ligne
  2. $ligne = explode ("\n",$_POST['champs']);
  3. $i = 0;
  4. while ($ligne[$i])
  5. {
  6. //On explose la ligne en plusieurs variable séparer par ":"
  7. $champs = explode (":",$ligne[$i]);



Car tu ne donnes une valeur à tes variables $champs[9] et $champs[10] qu'après les avoir testés... Logique Emile !

------------------------------ Quelques tutos...
Répondre à Darit

iiiiiiiiiiiiiiiiiiiiiiihhhhhaaaaaaaaaaaaaaaaaa, sa marche :D . J'avais pas compris ce qu'il voulais dire mais l'erreur venais bien de la. Un grand merci a tout les deux de m'avoir aider a résoudre ce problème.

Répondre à sangokudu92
Tom's Guide > Forum > Programmation > Pb php insolvable pour moi
Aller à :

Il y a 797 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens