Votre question

Pb php insolvable pour moi

Tags :
  • futur
  • Programmation
Dernière réponse : dans Programmation
13 Juin 2008 10:49:21

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.

  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.

Autres pages sur : php insolvable

13 Juin 2008 10:55:17

salut, le test de l'égalité se fait avec 2 = (3 existe aussi)
  1. if ($machin == $truc)
13 Juin 2008 11:02:37

Je viens de le faire et sa me retourne tout le temps 1 pour n'importe quel valeur des champs 9 et 10
Contenus similaires
13 Juin 2008 11:14:10

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 ?
13 Juin 2008 11:18:54

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.
13 Juin 2008 11:31:43

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 :
  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. }
13 Juin 2008 11:36:37

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.
13 Juin 2008 11:44:12

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

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

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!
13 Juin 2008 11:53:37

Et si tu fais un
  1. echo $champs[9];


Tu obtiens quoi ?
13 Juin 2008 13:01:25

J'obtient bien la valeur du champs en question.
13 Juin 2008 13:12:31

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

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:

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


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.
13 Juin 2008 13:58:04

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:
  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
  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 == ...
13 Juin 2008 14:14:36

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".

  1. if($champs[9]=="0" AND $champs[10]=="0")
  2. {
  3. $server_exap="0";
  4. }else{
  5. $server_exap="1";
  6. }
13 Juin 2008 14:21:34

sangokudu92 a dit :
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 dit :

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 dit :

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.
13 Juin 2008 14:23:26

Mais quand est ce que tu assignes la variable $champs[9] & $champs[10] ?
13 Juin 2008 14:32:39

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é):
  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 à la ligne signifiera l'entré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.  
  17. echo"<tr>";
  18. echo"<td colspan=2>";
  19. echo"<font size=2 color=\"#ffffff\" face=\"times new roman\">";
  20. echo"<center>";
  21. echo"<input type=\"submit\" value=\"Ajouter\">";
  22. echo"<input type=button value=\"Annuler\" onclick=\"history.back()\">";
  23. echo"</center>";
  24. echo"</font> ";
  25. echo"</td>";
  26. echo"</tr>";
  27. echo"</form>";
  28. echo"</table>";


et voici un exemple d'insertion dans le textarea:
  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?
13 Juin 2008 14:39:07

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 dit :

//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 
13 Juin 2008 14:43:14

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
13 Juin 2008 14:45:26

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

me permet d'avoir une ligne différente après chaque retour chariot, et celui-ci:
  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 ":"
13 Juin 2008 14:46:56

j'ai édité plus haut, tu sépares après les tests!
13 Juin 2008 14:48:59

désoler j'ai pas compris.
13 Juin 2008 14:52:34

tu testes si une variable est égale à 0, rien ou autre avant même de lui affecter une valeur.
13 Juin 2008 14:53:56

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

j'ai rien dit :whistle: 
13 Juin 2008 15:00:26

J'ai fais comme sa, mais c'est trop bizarre:
  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
  1. MouMou1:INTERNET:FIREWALL:WINDOWS:DMZ:EUROPE:FRANCE:::0:0

J'obtient: server_exap: 1 champs9: 0 champs10: 0
13 Juin 2008 15:14:27

le cache de ton navigateur doit te jouer des tours, ctrl+f5 sur la page résultat.
13 Juin 2008 15:16:16

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

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


&

  1. //On explose le textarea par ligne
  2. $ligne = explode ("\n",$_POST['champs']);
  3.  
  4. $i = 0;
  5. while ($ligne[$i])
  6. {
  7. //On explose la ligne en plusieurs variable séparer par ":"
  8. $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 !
13 Juin 2008 15:24:57

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.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS