PHP - else non pris en compte

Fermé
Sunseeker - Modifié par Sunseeker le 22/06/2014 à 16:38
 Sunseeker - 25 juin 2014 à 15:13
Bonjour,


Je ne comprends pas très bien pourquoi mon else n'est pas pris en compte.
 if(isset($_POST['rooms']) && !empty($_POST['rooms'])) 
   { $_POST['rooms'] = array_map('mysql_real_escape_string',$_POST["rooms"]);$valid=true;
   }  else {$e_rooms = 'Le champs "Nombre de pièces" est requis'; $valid=false;    }


Mon code ignore le else et passe directement à la suite sans afficher $e_rooms...
Ce qui me créée un "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') "

Il n'y a pas d'erreur sql tant que !empty($_POST['rooms']). Donc if empty --> affiche erreur $e_rooms; Mais mon else {$e_rooms ='Le champs "Nombre de pièces" est requis'; } est comme invisible...

Merci pour votre aide !
A voir également:

13 réponses

Utilisateur anonyme
23 juin 2014 à 19:22
Bonjour
J'ai même fait juste : if (!empty($_POST['rooms']))
Et tu as eu parfaitement raison. empty teste si la variable existe, il n'y aucun danger à employer empty sur une variable inexistante, et il est totalement inutile de tester avec isset avant, ça fait double emploi.
Pour en revenir à ta question initiale, il n'y a pas assez long de code pour se faire un avis. En particulier, on ne voit pas où tu affiches ton erreur : on voit seulement que tu le mets dans une variable $e_rooms, mais tu n'affiches pas cette variable.
Si tu ne l'affiches que bien plus loin et qu'entre temps tu as essayer d'utiliser la valeur de $_POST['rooms'], c'est normal que ça ne marche pas.
Au passage, rassure-moi : $_POST['rooms'] désigne bien un tableau de champs de saisie, pas un champ seul ?
1
makitoch Messages postés 726 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 28 octobre 2020 77
Modifié par makitoch le 22/06/2014 à 17:12
Si il ignore le else c'est que la condition est tout le temps vrai.

Dans ta base SQL, la colone de la table qui correspond à 'rooms' est de quel type?

edit: la ligne "$valid=false;" est lisible ou c'est juste "$e_rooms = 'Le champs "Nombre de pièces" est requis';"
0
$valid =false; --> if($valid) { requête sql } $valid=false; n'est pas textuellement visible par le visiteur.
0
Mes <select multiple='multiple'> pour ville et rooms ont chacun : <option value='' selected='selected'> Choisir </option> donc, d'entrée $_POST['ville'] et $_POST['rooms'] sont empty.

Si je submit mon form sans sélectionner ni ville ni rooms, j'ai erreur sql... mais pas de $erreur ='Veuillez sélectionner une ville // ou un nb de pièces';
Si je sélectionne une ou plusieurs villes + un ou plusieurs nombres de pièces, pas d'erreur sql.

J'ai viré mes $valid=true ou false, et je reste avec mes else ignorés... Je ne comprends pas pourquoi.

Merci !
0
Bonne question. Effectivement j'avais un ptit soucis aussi de ce côté-là.

Elle est en varchar 50. Car j'ai Studio, Loft, 2, 3, 4 etc....
Mais si $_POST['rooms'] valait Studio, j'avais Unknown column Studio.... donc j'ai changé <option value="Studio"> Studio </option> en <option value="1"> Studio </option>, et j'ai supprimé <option value='Loft'>Loft</option>.

Tu penses que ça vient de là ?

Car j'ai problème identique de else non pris en compte avec if(empty($_POST['ville'])) <option value=ville_id> Ville nom</option>. table ville_id = int

Merci
0
makitoch Messages postés 726 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 28 octobre 2020 77
Modifié par makitoch le 22/06/2014 à 18:05
je pense que tu peux pas demander en même temps si la valeur existe et si elle est vide.

car si la valeur n'existe pas le serveur continuera le traitement normalement et tu auras une erreur sur le faite que la variable qu'il n'existe pas soit vide ou non.

En gros pour moi faudra plutot faire qu'elle que chose du style

if: existe
alors on test if : vide

tu imbrique les if sa évitera que le programme regarde si la variable est vide ou non Alors que elle n'existe pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Quand je refais toute l'imbrication dans ce style :
   if( isset($_POST['rooms']) && !empty($_POST['rooms']))
					   { $_POST['rooms'] = array_map('mysql_real_escape_string',$_POST["rooms"]);
					   
					     if(isset($_POST['surface_min'])  && !empty($_POST['surface_min'])) 
					       { $surface_min = mysql_real_escape_string($_POST['surface_min']);
					         if(isset($_POST['surface_max'])  && !empty($_POST['surface_max'])) 
					           {  $surface_max= mysql_real_escape_string($_POST['surface_max']);
		                          if( !empty($_POST['ville'])) 
					                { $_POST['ville'] = array_map('mysql_real_escape_string',$_POST["ville"]);  
					

ben plus aucun résultat ne s'affiche. Ni code d'erreur mysql ou php, ni mes $error ="Veuillez sélectionner.. ceci ou cela"; ni résultats de la recherche . Génial.
C'est pour ça que j'avais fait des if (){} else{} if(){} else{}


Je donne ma langue au chat !
Merci pour le coup d'oeil en tous cas
0
makitoch Messages postés 726 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 28 octobre 2020 77
22 juin 2014 à 19:04
du coup c'est bien le if( isset($_POST['rooms']) && !empty($_POST['rooms'])) qui pose problème
0
makitoch Messages postés 726 Date d'inscription samedi 14 juin 2014 Statut Membre Dernière intervention 28 octobre 2020 77
22 juin 2014 à 19:05
essaye de faire comme ça if( isset($_POST['rooms']) ) { if(!empty($_POST['rooms'])) {} }
0
C'est ce que je viens de faire, mais rien ne s'affiche hormis le formulaire.
J'ai même fait juste : if (!empty($_POST['rooms'])) mais sans résultat....... Quelle est donc cette logique à côté de laquelle je passe ?
0
Merci le père pour ta réponse à ce sujet.
ok, plus de isset && !empty pour un seul et même champ à vérifier. Tant mieux !

j'ai posté chez la concurrence http://www.developpez.net/forums/d1452296-nouveau/php/langage/else-non-pris-compte , si ça te dit de m'aider. Mais on peut tout à fait rester ici, pour en discuter.

$_POST['rooms'] est un select multiple. Si empty, je souhaite afficher $e_rooms qui a bien un span qui l'attend <?php if(isset($e_rooms)) echo le !!! ?>, else on continue la procédure.
Lorsque une ou plusieurs valeurs sont sélectionnées sur $_POST['rooms'], pas de soucis, pas d'erreur sql.

A te lire,
0
Utilisateur anonyme
23 juin 2014 à 22:16
C'est bien ce que je te disais.
Tu exécutes ta requête même si $_POST['rooms'] ou $_POST['ville'] sont vides. Or, la requête est incorrecte dans ce cas là. Donc ton programme râle et s'arrête, j'en ferais autant à sa place ;-)
Il ne faut pas que tu laisses ton script continuer, ou en tous cas pas passer par ta requête incorrecte.
0
Ok, je vais revoir mon imbrication quant-à ces 2 select majeurs, mais j'ai déjà essayé de les combiner : if(!empty rooms && ville) {continue} else {stop}, mais sans succès. Ce qui me parait illogique parce que si à la place de else{$surface_min='0';} je mets else{$e_surface_min ="erreur"}, mon erreur s'affiche et le script ne continue pas.

La nuit porte conseil et pendant mon sommeil je continue à développer (help me !!!!), donc peut--être que demain matin je me réveillerai avec un success ...

Stay tuned :P
Merci :)
0
LePère, Si tu connais la solution, dis-la moi, si elle est si évidente que ça.

J'ai écrit et enregistré mon code en 20 versions à chaque fois sur un fichier différent, aucune n'a fonctionné. Et quand enfin j'ai eu mon $e_rooms_ville = "Veuillez renseigner nb de pièces et ville"; et que j'ai enregistré ce code au dessus du premier (page20.php sur page_originale.php), ça m'a refait erreur sql...

Donc si pour toi la solution saute aux yeux, est-ce que tu serais assez gentil pour me la faire partager ? Merci

J'ai utilisé le système d pour éviter d'avoir une erreur sql, mais qui n'affiche pas les messages tant attendus : "Veuillez renseigner ces p*** de champs !",
J'affiche à la place "Aucun bien ne correspond à votre recherche".. alors que ce n'est pas ça que je veux afficher dans ce cas.
0
Utilisateur anonyme
25 juin 2014 à 08:34
J'étais absent hier.
Il y a beaucoup de choses que je ne comprends pas. Ton sujet est marqué comme résolu le 22 juin sur developpez.net alors que nous en parlions encore le 23. Et il me semble qu'il y avait l'intégralité du code source. Je ne la vois plus.
Où en es-tu ?
0
Pas de problème. Je sais qu'on a tous une vie, et c'est gentil de me répondre.

C'est bon j'ai retrouvé le seul code qui marche parmi ma vingtaine de versions et de réimbrications. C'est celui là :
if ($_POST['type_de_bien']== 'Appartement' && empty($_POST['rooms']) OR empty($_POST['ville'])).

Mais si je dis :
($_POST['type_de_bien']== 'Appartement' && !empty($_POST['rooms']) && !empty($_POST['ville'])) {continue} else{stop}- là ça marche pas, ni aucune autre sorte d'imbrication.

Si je fais :
if ($_POST['type_de_bien']== 'Appartement)
{ if(empty($_POST['rooms'])) // 'Veuillez renseigner rooms'; // ça marche pas non plus --> mon script continue à s'exécuter jusquà erreur sql,

Ca m'a rendue dingue. Selon toi, ce comportement php est tout à fait normal?
Bon si oui, lol, ok, j'ai compris. Je n'avais pas clairement imprimé la subtilité. Tiens je vais m'en faire un tatouage ! (joke)

Effectivement balancer mon code intégral ne servait à rien, tout se jouait dans les 5 premières lignes.
Merci pour avoir regardé.
Bonne journée
0
Aujourd'hui le bouton Résolu manque à l'appel.. Mais sujet résolu quand-même!
0
Utilisateur anonyme
25 juin 2014 à 12:21
Effectivement balancer mon code intégral ne servait à rien, tout se jouait dans les 5 premières lignes
Bien sûr que si, ça servait ! Ce n'est pas parce que tu as obtenu le bon résultat en modifiant les quelques premières lignes que la connaissance du reste était inutile !
Pour autant que je me rappelle ton code, tel qu'il était écrit, tu exécutais ta requête dès que le if ($_POST['type_de_bien']== 'Appartement) était vrai, que $_POST['rooms'] ou $_POST['ville'] soient définis ou non.

Tu me demandes si ce comportement de php est normal, mais n'ayant pas le programme, je ne peux pas en juger. Ce qui est clair, c'est que tes trois conditions ne veulent pas dire la même chose, donc pas étonnant que les comportements diffèrent. Soit dit en passant, je trouve ton code "qui marche" parfaitement illogique, mais sans connaître ton application ce n'est qu'un préjugé de ma part.

Bonne continuation
0
L'architecture de base :


if(isset($_POST['submit_rechercher']))
{ if ($_POST['type_de_bien']== 'Appartement' )
{ if (!empty($_POST['rooms'])
{
}
else {$e_rooms='Veuillez sélectionner nb pièces'; etc
}
}
else if ($_POST['type_de_bien']== 'Maison' )
{ include('acheter_maison.php');
}
else if ($_POST['type_de_bien']== 'Terrain' )
{ include('acheter_terrain.php'); // Evidemment pas de nombre de pièces requis !!
}
else if (){}
else {$e_type_de_bien= 'Veuillez choisir un type de bien';}
}


testé avec 50 types d'imbrications à l'intérieur if ($_POST['type_de_bien']== 'Appartement' ) lorsqu'à appart sélectionné.

Enfin bref, subtilités du php enregistrées!
Merci
0
ReSoLu
0