Signaler

Php my sql

Posez votre question deep_sea 91Messages postés mardi 10 mai 2016Date d'inscription 22 juin 2017 Dernière intervention - Dernière réponse le 22 juin 2017 à 17:34 par jordane45
Bonjour,

j'ai rencontré un problème avec cette requête:
<?php

//activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display-errors','on');

//------------------------------------------------------------//
// le temps des tests
//------------------------------------------------------------//
echo "<pre> Variable POST = ";
print_r($_POST);
echo "</pre>";

//------------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//------------------------------------------------------------//
$salle = !empty($_POST['titre']) ? $_POST['titre']: NULL;
$etoile = !empty($_POST['etoile']) ? $_POST['etoile']: NULL;
$event = !empty($_POST['event']) ? $_POST['event']: NULL;
$place = !empty($_POST['place']) ? $_POST['place']: NULL;
$prix = !empty($_POST['prix']) ? $_POST['prix']: NULL;
$wilaya = !empty($_POST['choix']) ? $_POST['choix']: NULL;
$option = !empty($_POST['option_salle']) ? $_POST['option_salle']: NULL;


//------------------------------------------------------------//
// Traitement du SUBMIT
//------------------------------------------------------------//
if( isset($_POST['submit'])) {

  $requete = "
                   SELECT * 
                   FROM annonce A ,wilaya W 
                   WHERE A.`code_wilaya` = W.`code_wilaya` 
                   AND `Etat_annonce`='1' 
                   and ( 
                   (`nom_salle` LIKE '$salle ' ) 
                   or 
                   (`prix_salle`>=$prix and `prix_salle`<=$prix) 
                   or 
                   (`nbre_etoile` =$etoile )
                   or 
                   (`nbre_place` =$place) 
                   or 
                   (`designation_wilaya` like '$wilaya')
                     )

   ";
     

  $resultat = $conn->query($requete);;
  if (!$resultat) {
      printf("Message d'erreur : %s\n", mysqli_error($conn));
  }



  if(mysqli_num_rows($resultat)>0) {
    while ($row = mysqli_fetch_assoc($resultat)) {

     {
          echo ' <div class="icon-awesome">
              <img src="imagesbd/'. $row["gallerie"] . '" alt="salle" />
              </div>
              <h3>'.$row['nom_salle'].'</h3>

              <h4>'.$row['prix_salle'].',00 DZ </h4>
              <h5> '.$row['event'] .' </h5>
              <p>'.$row['adresse_salle'].' ,'.$row['designation_wilaya'] .' </p>
              ';



      }

    }
  } else {
    echo '<div class="alert alert-info">
    <strong>Info!</strong> Aucune résultat a été retourné.
    </div>';
  }
} else {
  echo '<div class="alert alert-danger">
  <strong>Erreur!</strong> php .
  </div>';
}
?>



aucune résultat ni retourné malgré j'ai essayé la requête dans MYSQL elle marche bien , une fois j’exécute sur mon site , ces erreurs apparaît :

Variable POST = Array
(
[titre] => fériel
[choix] => Chlef
[number_etoile] => 4
[event] => mariage
[place_salle] => 350
[prix] => 200000
[submit] => Filtrer
)
Message d'erreur : 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 ') or (`nbre_place` =) ' at line 10
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\Afrahcom\services.php on line 404
Info! Aucune résultat a été retourné.


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45
Afficher la suite 
Utile
+0
plus moins
salut,

si tu entoures tes variables php dans ta requêtes de quotes (apostrophe), ça devrait aller mieux
Donnez votre avis
Utile
+0
plus moins
bjr, peut-être en ajoutant
echo $requete;
pour mieux comprendre?
as-tu remarqué que $_POST['etoile'] est absent?
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Dans ta requête :
 $requete = "
                   SELECT * 
                   FROM annonce A ,wilaya W 
                   WHERE A.`code_wilaya` = W.`code_wilaya` 
                   AND `Etat_annonce`='1' 
                   and ( 
                   (`nom_salle` LIKE '$salle ' ) 
                   or 
                   (`prix_salle`>=$prix and `prix_salle`<=$prix) 
                   or 
                   (`nbre_etoile` =$etoile )
                   or 
                   (`nbre_place` =$place) 
                   or 
                   (`designation_wilaya` like '$wilaya')
                     )

il y a plusieurs soucis .....

Déjà : lorsqu'on utilise un LIKE c'est pour le faire avec des "jokers"
par exemple :
// commence par $salle
`nom_salle` LIKE '$salle%' 

// contient $salle
`nom_salle` LIKE '$salle%' 

// se termine par $salle
`nom_salle` LIKE '%$salle' 


Actuellement... non seulement tu n'as pas '%' mais tu y as un espace en trop :
`nom_salle` LIKE '$salle '
</code>

Ensuite :
`prix_salle`>=$prix and `prix_salle`<=$prix

Tu m'expliques comment un prix peut être à la fois supérieur et inférieur en même temps ???
Cette ligne se traduirait (en l'état) de cette façon :
`prix_salle`=$prix 



Et enfin... comme te l'ont dit les autres ... il faut mettre TOUTES tes variables entre QUOTES dans ta requête
 (`prix_salle`>='$prix' OR `prix_salle`<='$prix') 
                   or 
                   (`nbre_etoile` ='$etoile' )
                   or 
                   (`nbre_place` ='$place') 

jordane45 17545Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 juin 2017 Dernière intervention - 19 juin 2017 à 02:14
Ah tiens... c'est bizarre .... une partie de mes remarques t'avais déjà été faites dans une de tes discussions précédente ... ici : http://www.commentcamarche.net/forum/affich-34595582-my-sql#7

Il serait bien de tenir compte de nos remarque avant d'ouvrir des discussions en doublon !!!

PS: Merci de mettre la précédente question en RESOLU.
Répondre
deep_sea 91Messages postés mardi 10 mai 2016Date d'inscription 22 juin 2017 Dernière intervention - 19 juin 2017 à 14:31
(`prix_salle`>='$prix_min' and `prix_salle`<='$prix_max') on utilise le Et car je veux que le prix saisi sera entre les 2 intervalle min et max
Répondre
Donnez votre avis
Utile
+0
plus moins
Le problème jusque j'essai champs par champs il fait le filtrage et les résultat s'affiche correctement mais lorsque je choisi plusieurs critère il ya un affichage de tous les enregistrements
if( isset($_POST['submit'])) {

$requete = "
SELECT *
FROM annonce A ,wilaya W
WHERE A.`code_wilaya` = W.`code_wilaya`
AND `Etat_annonce`='1'
and (
(`nom_salle` LIKE '$salle%' )
or
(`prix_salle`>='$prix_min' and `prix_salle`<='$prix_max')

or
(`event` LIKE '$event' )
or
(`nbre_etoile` = '$etoile')
or
(`nbre_place` ='$place')
or
(`designation_wilaya` like '$wilaya')
)

";
yg_be 2568Messages postés lundi 9 juin 2008Date d'inscription 25 juin 2017 Dernière intervention - 19 juin 2017 à 19:58
deux choses:
1) peux-tu partager ce qu'affiche
echo $requete;
?
2) es-tu certain de vouloir "or" dans ta requête? que souhaites-tu obtenir quand tu choisis plusieurs critères? ton programme sélectionne tous les enregistrements qui répondent à au moins un critère.
Répondre
Donnez votre avis
Utile
+0
plus moins
Mais....Eureka .. j'ai compris quel était ton souci ....
EN fait .. il faut construire ta requête en fonction des champs qui sont remplis ou non....

Par exemple :


$strsalle = !empty($salle) ? " AND nom_salle = '$salle' " : "";
$stretoile = !empty($etoile ) ? " AND nbre_etoile = '$etoile ' " : "";
$strplace = !empty($place) ? " AND nbre_place = '$place' " : "";

$requete = " SELECT * 
                   FROM annonce A ,wilaya W 
                   WHERE A.`code_wilaya` = W.`code_wilaya` 
                   AND `Etat_annonce`='1' 
                   $strsalle
                   $stretoile
                   $strplace
                  ";
echo $requete;


Amuses toi à remplir ou non tes champs "salle" "nombre d'étoiles" et nombre de places ... puis regarde ce que donne le écho de ta requete...

Tu verras qu'en fonction des champs que tu auras remplis (ou non) la requête s'adaptera et t'affichera uniquement les résultats en fonction des critères voulus.


deep_sea 91Messages postés mardi 10 mai 2016Date d'inscription 22 juin 2017 Dernière intervention - 20 juin 2017 à 13:44
elle ne retourne rien le ECHO
SELECT * FROM annonce A ,wilaya W WHERE A.`code_wilaya` = W.`code_wilaya` AND `Etat_annonce`='1'

je veux afficher les résultat selon les critères des users saisis et c'est pas une obligations que tous les champs doivent être remplis
Répondre
jordane45 17545Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 juin 2017 Dernière intervention - 20 juin 2017 à 13:52
je veux afficher les résultat selon les critères des users saisis et c'est pas une obligations que tous les champs doivent être remplis

Donc c'est bien ce que j'ai compris et que j'ai traduit par le code que je t'ai donné juste avant ....

elle ne retourne rien le ECHO
SELECT * FROM annonce A ,wilaya W WHERE A.`code_wilaya` = W.`code_wilaya` AND `Etat_annonce`='1'

Tu peux nous montrer ton code modifié ????

Peux tu également ajouter, au début de ton code, un
print_r($_POST);
et nous dire ce qu'il retourne
Répondre
deep_sea 91Messages postés mardi 10 mai 2016Date d'inscription 22 juin 2017 Dernière intervention - 22 juin 2017 à 11:56
j'ai appliqué ça il ne récupére pâs les 3 champs nom salle nombre étoile et le nombre des places
Répondre
jordane45 17545Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 juin 2017 Dernière intervention - 22 juin 2017 à 11:58
Tu as appliqué le code ....... en mettant le nom de TES variables ???
Comme déjà dit ici : http://www.commentcamarche.net/forum/affich-34615059-php-my-sql#13
Répondre
Donnez votre avis
Utile
+0
plus moins
si j'en crois le message de départ:
Variable POST = Array
(
[titre] => fériel
[choix] => Chlef
[number_etoile] => 4
[event] => mariage
[place_salle] => 350
[prix] => 200000
[submit] => Filtrer
)
je te rappelle ma remarque en #2:
as-tu remarqué que $_POST['etoile'] est absent?
deep_sea 91Messages postés mardi 10 mai 2016Date d'inscription 22 juin 2017 Dernière intervention - 20 juin 2017 à 14:29
j'ai pas compris elle n'est pas absente !!
Répondre
jordane45 17545Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 juin 2017 Dernière intervention - 20 juin 2017 à 14:35
La variable POST se nomme : number_etoile et non "etoile" comme tu l'as écris dans le code....
Idem pour la variable place ... => Dans ton POST c'est : place_salle

....
Encore du cafouillage dans le code .....
Répondre
deep_sea 91Messages postés mardi 10 mai 2016Date d'inscription 22 juin 2017 Dernière intervention - 20 juin 2017 à 14:45
ouii j'ai corrigé ça suite a votre remarque la derniére fois
le probléme c pas a ce niveau
 <div class="portfolio container">
<div class="portfolio-title">
<h4 style="font-style: italic;color: #c6526b;font-family:Times;">Les Salles des fêtes retrouvées</h4>
</div>
<div class="row">

<?php
//activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display-errors','on');

//------------------------------------------------------------//
// le temps des tests
//------------------------------------------------------------//
echo "<pre> Variable POST = ";
print_r($_POST);
echo "</pre>";



//------------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//------------------------------------------------------------//

$salle = !empty($_POST['titre']) ? $_POST['titre']: NULL;
$etoile = !empty($_POST['number_etoile']) ? $_POST['number_etoile']: 0;
$event = !empty($_POST['event']) ? $_POST['event']: NULL;
$place = !empty($_POST['place_salle']) ? $_POST['place_salle']: 0;
$prix_min = !empty($_POST['prix_min']) ? $_POST['prix_min']: 0;
$prix_max = !empty($_POST['prix_max']) ? $_POST['prix_max']: 0;
$wilaya = !empty($_POST['choix']) ? $_POST['choix']: NULL;
$option = !empty($_POST['option_salle']) ? $_POST['option_salle']: NULL;


//------------------------------------------------------------//
// Traitement du SUBMIT
//------------------------------------------------------------//
if( isset($_POST['submit'])) {

$requete = "
SELECT *
FROM annonce A ,wilaya W
WHERE A.`code_wilaya` = W.`code_wilaya`
AND `Etat_annonce`='1'
and (

(`nom_salle` LIKE '$salle%' )
AND
(`prix_salle`>='$prix_min' and `prix_salle`<='$prix_max')
/*
AND
(`event` LIKE '$event' )
AND
(`nbre_etoile` = '$etoile')
AND
(`nbre_place` ='$place')
AND
(`designation_wilaya` like '$wilaya')
AND

(`parking` like '$option')
AND
(`traiteur` like '$option')
AND
(`serveur`like '$option')
AND
(`diner` like '$option')
AND
(`soiree` like '$option')
AND
(`boisson` like '$option')
AND
(`salee` like '$option')
AND
(`dj` like '$option')
AND
(`decoration` like '$option')
AND
(`camera` like '$option')
AND
(`zorna` like '$option')
AND
(`limosine` like '$option')*/
)

";


$resultat = $conn->query($requete);


if (!$resultat) {
printf("Message d'erreur : %s\n", mysqli_error($conn));
}


if(mysqli_num_rows($resultat)>0) {
while ($row = mysqli_fetch_assoc($resultat)) {

{
{

echo '<div class="work span4">
<img src="imagesbd/'. $row["gallerie"] . '" alt="salle" />

<h4>'.$row['nom_salle'].'</h4>
<h4>'.$row['prix_salle'].',00 DZ </h4>
<h5> '.$row['event'] .' </h5>
<p>'.$row['adresse_salle'].' ,'.$row['designation_wilaya'] .' </p>


<p> +(213) 0'.$row['tel_fixe'].' / '.$row['tel_mobile'] .'<p/>

<div class="icon-awesome">
<a href="imagesbd/'. $row[" rel="nofollow noopener noreferrer" target="_blank"gallerie"] . '"><i class="icon-search"></i></a>

<a href="afficher_salle_rechercher.php?variable='.$row['id_pub'].'" rel="nofollow noopener noreferrer" target="_blank" "><i class="icon-list-alt"></i></a>

</div>
</div>';


}

}
}

} else {
echo '<div class="alert alert-info">
<strong>Info!</strong> Aucune résultat a été retourné.
</div>';
}
} else {
echo '<div class="alert alert-danger">
<strong>Erreur!</strong> php .
</div>';
}
?>



</div>
</div>
Répondre
jordane45 17545Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 juin 2017 Dernière intervention - 21 juin 2017 à 11:29
Avant de te répondre ... je te fais une dernière fois la remarque :

NB : Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code) => En indiquant DANS les balises ... le LANGAGE utilisé !!! (cela permet d'avoir la couleur et les numéros de lignes !!!!!!!!! )

Explications disponibles ici : http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Répondre
deep_sea 91Messages postés mardi 10 mai 2016Date d'inscription 22 juin 2017 Dernière intervention - 21 juin 2017 à 11:27
lorsque je teste champs par champs , le derneir message s'est affiché :
    <strong>Info!</strong> Aucune résultat a été retourné.


et lorsque je mis presque tous les champs en commentaires et je teste un par un il ya des résultats
le probléme je veux une affichage selon les critéres saisie quelque soit input ou bien les checkbox
PS : lorsque je choisis plusieurs options (Checkboxes) dans le post le 1er qui est t'afficher els autre no
SVP est ce vous pouvez m'aider
Répondre
Donnez votre avis
Utile
+0
plus moins
Donc... maintenant... lorsque je regarde le code que tu viens de nous poster ... je constate que tu n'as pas tenu compte de mon message précédent : http://www.commentcamarche.net/forum/affich-34615059-php-my-sql#8

Je te laisse apporter cette correction puis nous reposter ton code modifié avant de poursuivre cette discussion !!!!


jordane45 17545Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 juin 2017 Dernière intervention - 22 juin 2017 à 14:12
ah ben dans ce cas tu modifies 'ma' requête pour mettre que des OR
Répondre
deep_sea 91Messages postés mardi 10 mai 2016Date d'inscription 22 juin 2017 Dernière intervention - 22 juin 2017 à 14:17
Le problème monsieur , la requête avec or est juste sure phénylamine mais lorsque j'entre les données dans le formulaire aucune
[/contents/1068-sql-commande-select SELECT] * FROM annonce A ,wilaya W WHERE A.`code_wilaya` = W.`code_wilaya` AND `Etat_annonce`='1' ( AND nom_salle = 'fériel' or AND nbre_etoile = '3 ' or AND nbre_place = '100' ) Message d'erreur : 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 '( AND nom_salle = 'fériel' or AND nb' [/contents/1147-introduction-aux-systemes-unix at] [http://www.commentcamarche.net/download/telecharger-34098305-line line] 5 
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\Afrahcom\services.php on line 456
Info! Aucune résultat a été retourné.
Répondre
jordane45 17545Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 juin 2017 Dernière intervention - 22 juin 2017 à 14:31
.... c'est dans ces lignes de code la qu'il faut mettre des OR au lieu des AND

$strsalle = !empty($salle) ? " AND nom_salle = '$salle' " : "";
$stretoile = !empty($etoile ) ? " AND nbre_etoile = '$etoile ' " : "";
$strplace = !empty($place) ? " AND nbre_place = '$place' " : "";



DOnc :

$strsalle = !empty($salle) ? " OR nom_salle = '$salle' " : "";
$stretoile = !empty($etoile ) ? " OR nbre_etoile = '$etoile ' " : "";
$strplace = !empty($place) ? " OR nbre_place = '$place' " : "";

Répondre
yg_be 2568Messages postés lundi 9 juin 2008Date d'inscription 25 juin 2017 Dernière intervention - 22 juin 2017 à 17:16
jordane45, j'admire ta patience!
Répondre
jordane45 17545Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 25 juin 2017 Dernière intervention - 22 juin 2017 à 17:34
Je te remercie.
Ce n'est pas toujours le cas ... mais de temps en temps j'arrive à prendre sur moi :-)
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !