Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1359 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Requête mysql marche sauf pour une condition ....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête mysql marche sauf pour une condition ....

n°1536830
1cat
Posté le 01-04-2007 à 08:44:47  profilanswer
 

Bon, j'ai avancé un peu dans mes affaires, mais le programme php qui exploite un formulaire coince toujours à un endroit. Et là je suis un peu paniquée, je dois terminer tout aujourd'hui. Etant grande débutante, je m'excuse pour la maladresse du code que je vous présente...
 
Toutes les requêtes marchent parfaitement, sauf si je combine le contenu du champ "Nom commence par..." à celui d'un autre (Maison, Année etc..).  J'ai tout vérifié, je ne vois pas d'où peut venir le problème.
 
J'ai testée les requêtes directement sur la base de données (hébergé chez OVH) en passant par PhPMyadmin / Recherche et j'ai repris leur code, d'où les CONVERT et autres indications. Faites comme ça, elles marchent toutes.. aussi celles qui concernent les combinaisons avec "Nom commence par". Mais dès que fais les requêtes de mon site, en passant par le formulaire html et mon programme php, le problème réapparait. C'est ça que je ne comprends pas.  
 
Voici deux test qui devraient fournir un résultat:
 
Mettre Car dans "Nom commence par" et 1523 dans "Année".
Mettre Car dans "Nom commence par" et Catherine de Médicis dans "Maison".
 
 
Voici le code html de la rubrique du formulaire:
 
<td class="label">Nom commence par</td>
<td class="input"><input type="text" id="debut" name="debut" valeur=""/></td>
<td class="help" colspan="2"><i>Ex.: "Mont" ou "Montmorency"...</i></td>

 
Et voici le programme php associé:
 
<?php    
  /* Etablit la connexion au fichier qui contient les mots de passe et  
  informations sur le serveur et la base de données */
  require ("../connect.php" );
   
  /* Etablit la connexion avec le serveur mysql et la base de données mysql */
  $connexion = mysql_pconnect($serveur, $user, $mdp) or die("Connexion au serveur impossible" );
  $db = mysql_select_db($base, $connexion)or die("Connexion à la base impossible" );
   
  /* Variables pour le contenu des champs de saisie */
   
  $debut = $_GET['debut'];
  $motcle = $_GET['motcle'];
  $reineroi = $_GET['reineroi'];
  $year = $_GET['year'];
  $compil = $_GET['compil'];
   
/* requêtes sur nom et motclé uniquement */
   
if (($debut) && (!$motcle) && (!$reineroi) && (!$year) && (!$compil))
{$requete="SELECT * FROM `Etat` WHERE `Identification` LIKE CONVERT( _utf8 '$debut%' USING latin1 )COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
 
elseif (($motcle) && (!$debut) && (!$reineroi) && (!$year) && (!$compil))
      {$requete="SELECT * FROM `Etat` WHERE `Identification` LIKE CONVERT( _utf8 '%$motcle%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
elseif (($debut) && ($motcle) && (!$reineroi) && (!$year) && (!$compil))
 {$requete="SELECT * FROM `Etat` WHERE `Identification` LIKE CONVERT( _utf8 '$debut%' USING latin1 )COLLATE latin1_swedish_ci OR `Identification` LIKE CONVERT( _utf8 '%$motcle%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
/* Requete sur nom, motclé et maison */
   
elseif (($debut) && (!motcle) && ($reineroi) && (!$year) && (!$compil))
{$requete="SELECT * FROM `Etat` WHERE `Maison` LIKE CONVERT( _utf8 '$reineroi' USING latin1 ) COLLATE latin1_swedish_ci AND `Identification` LIKE CONVERT( _utf8 '$debut%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
elseif (($motcle) && (!$debut) && ($reineroi) && (!$year) && (!$compil))
{$requete="SELECT * FROM `Etat` WHERE `Maison` LIKE CONVERT( _utf8 '$reineroi' USING latin1 ) COLLATE latin1_swedish_ci AND `Identification` LIKE CONVERT( _utf8 '%$motcle%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
elseif (($debut) && ($motcle) && ($reineroi) && (!$year) && (!$compil))
 {$requete="SELECT * FROM `Etat` WHERE `Maison` LIKE CONVERT( _utf8 '$reineroi' USING latin1 ) COLLATE latin1_swedish_ci AND `Identification` LIKE CONVERT( _utf8 '$debut%' USING latin1 ) COLLATE latin1_swedish_ci OR `Identification` LIKE CONVERT( _utf8 '%$motcle%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
/* Requete sur nom, motclé et annee */
   
elseif (($debut) && (!motcle) && (!$reineroi) && ($year) && (!$compil))
{$requete="SELECT * FROM `Etat` WHERE `Annee` ='$year' AND `Identification` LIKE CONVERT( _utf8 '$debut%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
elseif (($motcle) && (!$debut) && (!$reineroi) && ($year) && (!$compil))
{$requete="SELECT * FROM `Etat` WHERE `Annee` ='$year' AND `Identification` LIKE CONVERT( _utf8 '%$motcle%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
elseif (($debut) && ($motcle) && (!$reineroi) && ($year) && (!$compil))
 {$requete="SELECT * FROM `Etat` WHERE `Annee` ='$year' AND `Identification` LIKE CONVERT( _utf8 '$debut%' USING latin1 ) COLLATE latin1_swedish_ci OR `Identification` LIKE CONVERT( _utf8 '%$motcle%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
/* Requete sur nom, motclé et periode */
 
elseif (($debut) && (!motcle) && (!$reineroi) && (!$year) && ($compil))
{$requete="SELECT * FROM `Etat` WHERE `Periode` LIKE CONVERT( _utf8 '$compil' USING latin1 ) COLLATE latin1_swedish_ci AND `Identification` LIKE CONVERT( _utf8 '$debut%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
elseif (($motcle) && (!$debut) && (!$reineroi) && (!$year) && ($compil))
{$requete="SELECT * FROM `Etat` WHERE `Periode` LIKE CONVERT( _utf8 '$compil' USING latin1 ) COLLATE latin1_swedish_ci AND `Identification` LIKE CONVERT( _utf8 '%$motcle%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
elseif (($debut) && ($motcle) && (!$reineroi) && (!$year) && ($compil))
 {$requete="SELECT * FROM `Etat` WHERE `Periode` LIKE CONVERT( _utf8 '$compil' USING latin1 ) COLLATE latin1_swedish_ci AND `Identification` LIKE CONVERT( _utf8 '$debut%' USING latin1 ) COLLATE latin1_swedish_ci OR `Identification` LIKE CONVERT( _utf8 '%$motcle%' USING latin1 ) COLLATE latin1_swedish_ci LIMIT 0 , 30";
$resultat=mysql_query($requete) or die("<p>Exécution de la requête impossible</p>" );}
   
else
      { echo "<p>Vous avez indiqué trop de conditions: merci de choisir soit une maison, soit une année ou une période, mais pas deux ou trois à la fois.</p>";
 
echo '<p><a href="http://cour-de-france.fr/cour/bases/fr_bases/curia_recherche_avancee.php">Retour au formulaire de recherche</a></p>';}
       
        while ($ligne = mysql_fetch_array($resultat)) {
 extract($ligne);
   echo '<table class="result">';
   echo '<tr class="title">
           <td class="big">Notice de l\'état de maison</td>
    <td class="middle">Maison de</td>
    <td class="small">Année</td>
    <td class="middle">Periode</td>
    <td class="middle">Charge</td>
    </tr>';
       
   echo '<tr class="result">
    <td class="big">'."$Notice".'</td>
    <td class="middle">'."$Maison".'</td>
    <td class="small">'."$Annee".'</td>
    <td class="middle">'."$Periode".'</td>
    <td class="middle">'."$Charge".'</td>
    </tr>';
   echo '</table>';
   }
   exit;
?>


Message édité par 1cat le 02-05-2007 à 18:23:28
mood
Publicité
Posté le 01-04-2007 à 08:44:47  profilanswer
 

n°1536837
olivthill
Posté le 01-04-2007 à 09:19:34  profilanswer
 

Quels sont les symptomes ?
Est-ce qu'il y a un message d'erreur ?
Est-ce que cela ne fait rien ?
Est-ce que cela donne un autre résultat que celui qui est attendu ?
 
A première vue, le code présente une faible qui est une source de problèmes potentiels : Le programme n'est pas structuré. Cela se traduit concrétement par les deux choses suivantes :
 
1. Les conditions contiennent des parties qui sont redondantes, par exemple, le test sur ($debut) que l'on voit partout, alors qu'il ne faudrait l'avoir qu'une fois, et avoir des sous-conditions.
 
2. Il manque des parenthèses dans les requêtes. En conséquence, tous les opérateurs sont traités au même niveau, alors que les règles sur la priorité des opérateurs peuvent nous jouer des tours.

n°1536838
1cat
Posté le 01-04-2007 à 09:28:47  profilanswer
 

Merci pour tes indications. Le message d'erreur est:  
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home.10.11/courdefr/cgi-bin/formulaires/avancee.php on line 186
 
 
Sur la ligne 186 se trouve:  
 
 while ($ligne = mysql_fetch_array($resultat)) {


Message édité par 1cat le 01-04-2007 à 09:29:43
n°1536840
1cat
Posté le 01-04-2007 à 09:33:04  profilanswer
 

J'essaie de mettre en oeuvre tes conseils; est-ce que le résultat devrait être ainsi:
 
if ($debut, $motcle) {
     $requete="blabla...";
     $resultat=mysql_.... }
 
c'est à dire indiquer que ce qui doit retourner "VRAI" ?
 
Je ne sais pas comment faire pour indiquer qu'une fois $debut et mettre des sous-conditions  [:dfefe67]  
 
 :jap:


Message édité par 1cat le 01-04-2007 à 09:35:44
n°1536844
olivthill
Posté le 01-04-2007 à 09:42:31  profilanswer
 

Il faudrait voir la requête qui a provoqué ce message d'erreur.
 
Pour les conditions, la solutions actuelle marche peut-être.
Cependant, j'aurais remplacé ceci:

if (($debut) && (!$motcle) && (!$reineroi) && (!$year) && (!$compil))  
  requete1
elseif (($motcle) && (!$debut) && (!$reineroi) && (!$year) && (!$compil))  
  requete2  
elseif (($debut) && ($motcle) && (!$reineroi) && (!$year) && (!$compil))  
  requete3
elseif (($debut) && (!motcle) && ($reineroi) && (!$year) && (!$compil))  
  requete4
elseif (($motcle) && (!$debut) && ($reineroi) && (!$year) && (!$compil))  
  requete5  
elseif (($debut) && ($motcle) && ($reineroi) && (!$year) && (!$compil))  
  requete6
elseif (($debut) && (!motcle) && (!$reineroi) && ($year) && (!$compil))  
  requete7
elseif (($motcle) && (!$debut) && (!$reineroi) && ($year) && (!$compil))  
  requete8
elseif (($debut) && ($motcle) && (!$reineroi) && ($year) && (!$compil))  
  requete9


par cela, qui est plus clair pour moi, et permet tout de suite repérer des cas non prévus :

if (!$compil) {
  if ($debut) {
    if ($motcle) {
      if ($reineroi) {
        if ($year)
          requete_manquante
        else  
          requete6
      }
      else {
        if ($year)
          requete9
        else  
          requete3
      }
    }
    else {
      if ($reineroi) {
        if ($year)
          requete_manquante
        else  
          requete4
      }
      else {
        if ($year)
          requete7
        else
          requete1
      }
    }
  }
  else {
    if ($motcle) {
      if ($reineroi) {
        if ($year)
          requete_manquante
        else  
          requete5  
      }
      else {
        if ($year)
          requete8
        else
          requete2
      }
    }
    else {
      requete_manquante
    }
  }
}

n°1536846
1cat
Posté le 01-04-2007 à 09:51:40  profilanswer
 

Mama mia, je te remercie beaucoup ... et je vais essayer de comprendre, et d'appliquer !

n°1536848
1cat
Posté le 01-04-2007 à 09:58:22  profilanswer
 

La requête qui provoque l'erreur est :
 
Car dans "Nom commence par" et 1523 dans "Année"
ou
Car dans "Nom commence par" et Catherine de Médicis dans "Maison".  
 
Dans les deux cas, un résultat devrait s'afficher. Ce qui marche d'ailleurs quand je fais cette requête en passant par PHPMyadmin.


Message édité par 1cat le 01-04-2007 à 09:58:42
n°1536852
1cat
Posté le 01-04-2007 à 10:06:13  profilanswer
 

Une seule question par rapport au code que tu proposes, pour que je comprenne bien : qu'est-ce qui se passe quand "$compil" renvoie une valeur "vrai" ?

n°1539188
1cat
Posté le 05-04-2007 à 19:18:04  profilanswer
 

Uff... quelques jours plus tard, j'ai retravaillé tout en fonction des conseils de olivthill et maintenant ça marche à merveille...  
 
Un gros merci, qu'est-ce que je ferais sans le forum et des gens géniaux comme olivthill qui s'est tapé au moins une heure à m'écrire le code exemple ???
 
 
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Requête mysql marche sauf pour une condition ....

 

Sujets relatifs
Lien php + MySqlRequête SQL pour modifier une partie d'une valeur d'un champ
Passage d'une requête en paramètre[PHP] Votre avis sur ma requete
Problème pour la création d'un trigger dans MySQL[PHP] Requete et SQL
redirection 301 marche pasMySQL et chevauchement de 2 périodes
Pb mon code ne marche pas avec FlashPlayer7Multi Requete Ajax
Plus de sujets relatifs à : Requête mysql marche sauf pour une condition ....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR