Se connecter avec
S'enregistrer | Connectez-vous

Pb php insolvable pour moi

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

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 ?

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

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.

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

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

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.

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?

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 

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

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

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

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 !
Lassé par la pub ? Créez un compte
Tom's guide dans le monde