recrire une requete

Eléphanteau du PHP | 29 Messages

18 juil. 2005, 17:45

Bonjour

Comment recrire cet 2 requetes;
$requete=mysql_db_query("$sql_bdd","select count(*) from cv WHERE MATCH ( ref , titre,  nom, code, ville, fonction, region1, nom_entr1,prec_ent, nom_entr2 ) AGAINST ('$phrase') AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau')",$db_link);
echo "$requete ";
$nb_total=mysql_result($requete,0,"count(*)");

$requete=mysql_db_query("$sql_bdd","select * from cv WHERE MATCH ( ref , titre , nom ,code, ville, fonction, region1, nom_entr1, prec_ent, nom_entr2) AGAINST ('$phrase') AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau') limit $debut,$limit",$db_link); $num=mysql_num_rows($requete);
car j'ai ce message d'erreur;

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /web/testweb/recherche.php3 on line 132

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /web/testweb/recherche.php3 on line 136

J'ai donc executé mes requetes dans phpadmin elle marche bien.
c'est donc au niveau du code php que ça bloque . il faut que je l'ai reécrive autrement . :?

MERCI

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 17:49

- on n'utilise plus mysql_db_query, mais mysql_query (cf la doc)
- tu peux nommer un champ calculé, c'est plus pratique que d'accéder à "count(*)
SELECT COUNT(*) AS nombre
- tu es bien sûr d'avoir testé le même code SQL que celui qui est exécuté par PHP ?

Eléphant du PHP | 396 Messages

18 juil. 2005, 17:51

Rajoute or die(mysql_error()); à ta requête pour voir ce que ça dit.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 17:53

Voici comment tu pourrais essayer ton code :
$requete = "SELECT COUNT(*) AS nombre FROM cv WHERE MATCH ( ref , titre,  nom, code, ville, fonction, region1, nom_entr1,prec_ent, nom_entr2 ) AGAINST ('$phrase') AND (fonction LIKE '".$fonction."') AND (niveau LIKE '".$niveau."')";
echo "$requete "; // t'affichera le code SQL généré que tu pourras tester

// exécution avec affichage de l'erreur en cas d'échec
$execution = mysql_query($requete) or die (mysql_error());
$nb_total=mysql_result($execution,0,"nombre");

ViPHP
pjl
ViPHP | 2119 Messages

18 juil. 2005, 17:58

dans ton code d'origine, regarde donc comment tu passes la variable $sql_bdd.

Eléphanteau du PHP | 29 Messages

18 juil. 2005, 18:13

comme ceci
$sql_bdd="formulaire"


Il faut savoir que je dois tenir compte de la pagination

Voici mon code
$db_link = mysql_connect("$sql_serveur","$sql_user","$sql_passwd");
$fonction=$_GET['fonction']; // pri a partir d'un menu deroulant
$niveau=$_GET['niveau']; // pri a partir d'un menu deroulant

$mot=$_GET['mot']; // pri à partir champ de type text


$mot=strtolower($mot);
$mots=split(" ",$mot);
$nombre_mots=count($mots);

$z=1;
$texte="Pages contenant <b>"$mots[0]"</b>";
$phrase="'%$mots[0]%'";
while($z<$nombre_mots)
   {
   $phrase.=" ".$et_ou." mots like '%$mots[$z]%'";
   $texte.=" ";
   if($et_ou=="and"){$texte.="et";}else{$texte.="ou";}
   $texte.=" <b>"$mots[$z]"</b>";
   $z++;
   }

if($debut==""){$debut=0;}
$debut=$page*$limit;

// NOMBRE TOTAL D'ENREGISTREMENTS REPONDANT A LA REQUETE
$requete=mysql_db_query("$sql_bdd","select count(*) from cv WHERE MATCH ( ref , titre,  nom, code, ville, fonction, region1, nom_entr1,prec_ent, nom_entr2 ) AGAINST ('$phrase') AND (fonction LIKE '$fonction' ) AND (niveau LIKE '$niveau')",$db_link);
echo "$requete "; 
$nb_total=mysql_result($requete,0,"count(*)");

$requete=mysql_db_query("$sql_bdd","select * from cv WHERE MATCH ( ref , titre , nom ,code, ville, fonction, region1, nom_entr1, prec_ent, nom_entr2) AGAINST ('$phrase') AND (fonction LIKE '$fonction') AND (niveau LIKE '$niveau' ) limit $debut,$limit",$db_link);

$num=mysql_num_rows($requete); // ------- ICI LIGNE 135

// DEFINITION DU MESSAGE A AFFICHER
if ($num==0) {echo "Désolé, aucune page de ce site ne contient
<b>$mot</b>...";}
else if ($mot=="")    {echo "Veuillez saisir mot-clés avant de cliquer
sur 'lancer la recherche' !";}
else if (strlen($mot)<2) {echo "Veuillez saisir au moins 2
caractères.";}
    
// AFFICHAGE DES RESULTATS
else {

echo "<span class=\"style2\"><b>$nb_total</b> r&eacute;ponse</span>";
if ($nb_total>1) {echo "s";}
//echo "<br>$texte";

//$i=0;
while ($tablo = mysql_fetch_object($requete)) {
            
print "<TR>";
print "<TD><BR></TD>";

print "</TR>";
            print "<TR  bgcolor=\"#E0ECF8\">";

print "<TD nowrap class=\"style2\" bgcolor=\"#E0ECF8\" ><b>Candidature
à l'offre:&nbsp</b>$tablo->ref</TD>";
print "<TD>";
print "<TD nowrap class=\"style2\"  bgcolor=\"#E0ECF8\"><b>Region
souhaité</b></TD>";

*********************
****************
*****************
****************


        }
?>

</table>              </td>
          </tr>
        </table></td>
      </tr>
    </table></td>
  </tr>
</table>
</body>
</html>

<?
print"<center>";
// AFFICHAGE DU LIEN PRECEDENT SI BESOIN EST
// (LA PREMIERE PAGES EST 0)
if ($page>0)
   {
   $precedent=$page-1;
   print  "<a
href=\"$script_name?page=$precedent&mot=$mot&fonction=$fonction&niveau=$niveau\">PRECEDENT</a>&nbsp;\n";
   }


// AFFICHAGE DES NUMEROS DE PAGE
$i=0;$j=1;
if($nb_total>$limit)
   {
   while($i<($nb_total/$limit))
      {
      if($i!=$page){echo "(<a
href=\"$script_name?page=$i&mot=$mot&fonction=$fonction&niveau=$niveau\">$j</a>)&nbsp;";}
      else {echo "<b>($j)</b>&nbsp;";}
      $i++;$j++;
      }
   }


// AFFICHAGE DU LIEN SUIVANT SI BESOIN EST
if($debut+$limit<$nb_total)
   {
   $suivant=$page+1;
   echo "<a
href=\"$script_name?page=$suivant&mot=$mot&fonction=$fonction&niveau=$niveau\">SUIVANT</a>";
   }
}

print"</center>";
// DECONNEXION DE LA BASE DE DONNEE
mysql_close($db_link);
?>

ViPHP
pjl
ViPHP | 2119 Messages

18 juil. 2005, 19:22

Si je comprends bien, il n'y a rien qui te choque là dedans ?
$requete=mysql_db_query("$sql_bdd","select count(*) from cv",$db_link);
Tes variables sont correctement passées ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

19 juil. 2005, 09:27

Si je comprends bien, il n'y a rien qui te choque là dedans ?
$requete=mysql_db_query("$sql_bdd","select count(*) from cv",$db_link);
Moi si, je ne savais pas qu'on pouvait commencer les noms de BDD par un signe dollar ($) :-k
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.