pb script php: script multi champ

Invité
Invité n'ayant pas de compte PHPfrance

10 janv. 2006, 19:23

bon bah, aprés des jours de combats, j'ai a peu prés quelque chose...
mais il m'affiche tous les résultats...

Je ne vois pas où?

voici le script:
<?php
  include('connexion.php');

  echo $date;


    $h = $_POST['name'];
    echo "<BR><BR><BR>\n";

    echo $row['date']; 
    echo "Vous recherchez le id  <EM>$h</EM>.\n";
    echo "<BR><BR>\n";
    $SQL = "SELECT * FROM recherche WHERE mots LIKE '$h%'";
    $result = mysql_query($SQL) or die("La requête <BR><PRE>$SQL</PRE>a échoué : ".mysql_error()); 
    $article =mysql_fetch_object($result);
    $result = mysql_query($SQL) ;
    //j'ai defini une variable $i pour afficher 5 enregistremnt par ligne
    echo "<TABLE border =\"0\" width=\"100%\" CELLPADDING=\"0\" cellspacing=\"0\">";

//initialiser la variable $i a 0
   $i=0;
   while($row = mysql_fetch_row($result)) 
      {
    if ($i==0) 
     {
  echo "<TR>";
  }

//on incremente la variable
  $i=$i+1;

//$row[numero du champ a afficher]
  echo " <br>$row[1] <br><br>$row[2]<br><br> $row[3]<br><br> $row[4]<br><br> $row[5]<br><br> $row[6]<br><br> <i><b><u>Produits :</i></b></u>$row[7]</td>";
  if ($i==5) 
  {
  echo "</TR>";
  $i=0;
  }
   }
 echo"</table>";  
 
 $k = $_POST['produit'];
    echo "<BR><BR><BR>\n";

    echo $row['date']; 
    echo "Vous recherchez le id  <EM>$k</EM>.\n";
    echo "<BR><BR>\n";
    $SQL = "SELECT * FROM recherche WHERE produits LIKE '$k%'";
    $result = mysql_query($SQL) or die("La requête <BR><PRE>$SQL</PRE>a échoué : ".mysql_error()); 
    $article =mysql_fetch_object($result);
    $result = mysql_query($SQL) ;
    //j'ai defini une variable $i pour afficher 5 enregistremnt par ligne
    echo "<TABLE border =\"0\" width=\"100%\" CELLPADDING=\"0\" cellspacing=\"0\">";

//initialiser la variable $i a 0
   $i=0;
   while($row = mysql_fetch_row($result)) 
      {
    if ($i==0) 
     {
  echo "<TR>";
  }

//on incremente la variable
  $i=$i+1;

//$row[numero du champ a afficher]
  echo " <br>$row[1] <br><br>$row[2]<br><br> $row[3]<br><br> $row[4]<br><br> $row[5]<br><br> $row[6]<br><br> <i><b><u>Produits :</i></b></u>$row[7]</td>";
  if ($i==5) 
  {
  echo "</TR>";
  $i=0;
  }
   }
 echo"</table>";  
?>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 janv. 2006, 01:09

c'est quoi la question ?

c'est quoi le problème ?

C'est un dédoublement de post ou tu commences comme ça (auquel cas :twisted: )

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

11 janv. 2006, 10:45

Modération : à l'invité qui a posté, si la question n'est pas précisée, il ne faut pas attendre de réponse : ce message a toutes les chances de passer à la poubelle si il n'y a pas de précisions, ça pollue l'espace pour rien.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 101 Messages

11 janv. 2006, 11:22

oui, désolé j'ai oublié la question.

je souhaite faire une page de recherche dans une meme base de données avec deux champ de recherche l'un qui cherche dans le champ mots de la bd et l'autre dans le champ produits.

Et qu'il m'affiche les résultats...

Voici le code du formulaire qui ext relié au php:

Code : Tout sélectionner

<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <CENTER> <FORM ACTION="search.php" METHOD="POST"> Entrer un nom: <INPUT TYPE="text" NAME="name"> <INPUT TYPE="submit" VALUE="Rechercher"> </FORM> </CENTER> <CENTER> <FORM ACTION="search.php" METHOD="POST"> Entrer un nom: <INPUT TYPE="text" NAME="produit"> <INPUT TYPE="submit" VALUE="Rechercher"> </FORM> </CENTER> </BODY> </HTML>

Mammouth du PHP | 19672 Messages

11 janv. 2006, 11:36

Il y a un progrès, mais tu n'as pas clairement expliqué le problème : qu'est-ce qui se passe qui ne devrait pas se produire au juste ??
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2006, 12:37

Le probleme est que lorsque que c'est en ligne, je rentre un mot dans le premier champ....il me sort le résultat concerner ok! et ensuite toutes les résultats de la base.Comme si il considérait le champ vide comme une demande et qu'il retourne toute la base.

J'essaie de mettre des conditions: if....else. pour lui faire comprendre si $h est envoyé alors envoie les résultats de $h seulement.
Et si $k est envoyé envoie seulement les résultats de $k.


Du style

Code : Tout sélectionner

if($h = $_POST['name']); . . . else
mais je n'y arrive pas pas: pas bon en syntaxe!

Mammouth du PHP | 19672 Messages

11 janv. 2006, 12:44

Ce n'est pas un problème de syntaxe mais de logique.

Quel que soit la saisie, tu exécutes la saisie, si un des champs du formulaire est vide, tu te retrouves avec dans ta requête une clause LIKE avec pour valeur "%" : ça retourne la table au complet. Proposition de correction avec en prime nettoyage du code :
<?php
include('connexion.php');

echo $date;

$h = isset($_POST['name']) ? trim($_POST['name']) : null;
if(isset($h))
{
    echo "<BR><BR><BR>\n";

    echo $row['date'];
    echo "Vous recherchez le id  <EM>". $h ."</EM>.\n";
    echo "<BR><BR>\n";
    $SQL = "SELECT * FROM recherche WHERE mots LIKE '". $h ."%'";
    $result = mysql_query($SQL) or die("La requête <BR><PRE>". $SQL ."</PRE>a échoué : ".mysql_error());
    $article =mysql_fetch_object($result);
    $result = mysql_query($SQL) ;
    //j'ai defini une variable $i pour afficher 5 enregistremnt par ligne
?>
<TABLE border ="0" width="100%" CELLPADDING="0" cellspacing="0">
<?php
    //initialiser la variable $i a 0
    $i=0;
    while($row = mysql_fetch_row($result))
    {
        if ($i==0)
        {
?>
  <TR>
<?php
        }
        //on incremente la variable
        $i=$i+1;
        //$row[numero du champ a afficher]
?>
    <td>
      <br>
      <?php echo($row[1]); ?><br>
      <br>
      <?php echo($row[2]); ?><br>
      <br>
      <?php echo($row[3]); ?><br>
      <br>
      <?php echo($row[4]); ?><br>
      <br>
      <?php echo($row[5]); ?><br>
      <br>
      <?php echo($row[6]); ?><br>
      <br>
      <i><b><u>Produits :</i></b></u><?php echo($row[7]); ?>
    </td>
<?php
        if ($i==5)
        {
?>
  </TR>
<?php
        $i=0;
        }
    }
?>
</table>
<?php
}
$k = isset($_POST['produit']) ? trim($_POST['produit']) : null;
if(isset($k))
{
    echo "<BR><BR><BR>\n";

    echo $row['date'];
    echo "Vous recherchez le id  <EM>$k</EM>.\n";
    echo "<BR><BR>\n";
    $SQL = "SELECT * FROM recherche WHERE produits LIKE '". $k ."%'";
    $result = mysql_query($SQL) or die("La requête <BR><PRE>". $SQL ."</PRE>a échoué : ".mysql_error());
    $article =mysql_fetch_object($result);
    $result = mysql_query($SQL) ;
    //j'ai defini une variable $i pour afficher 5 enregistremnt par ligne
?>
<TABLE border ="0" width="100%" CELLPADDING="0" cellspacing="0">
<?php
    //initialiser la variable $i a 0
    $i=0;
    while($row = mysql_fetch_row($result))
    {
        if ($i==0)
        {
?>
  <TR>
<?php
        }
        //on incremente la variable
        $i=$i+1;

    //$row[numero du champ a afficher]
?>
    <td>
      <br>
      <?php echo($row[1]); ?><br>
      <br>
      <?php echo($row[2]); ?><br>
      <br>
      <?php echo($row[3]); ?><br>
      <br>
      <?php echo($row[4]); ?><br>
      <br>
      <?php echo($row[5]); ?><br>
      <br>
      <?php echo($row[6]); ?><br>
      <br>
      <i><b><u>Produits :</i></b></u><?php echo($row[7]); ?>
    </td>
<?php
        if ($i==5)
        {
?>
  </TR>
<?php
        $i=0;
        }
    }
?>
</table>
<?php
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2006, 15:06

j'ai essayé, mais ca ne veut toujours pas marcher.

le premier champ fonctionne mais le second il ne retourne aucun résultats.
?

Mammouth du PHP | 19672 Messages

11 janv. 2006, 15:21

Si il y en a un qui ne fonctionne pas, fais afficher la requête SQL générée (echo($SQL);) et teste-la directement dans phpMyAdmin pour vérifier ce qui se passe exactement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2006, 16:45

J'ai essayé la requete dans phpadmin et voici le résultat:


ERROR: Ponctuation invalide @ 1
STR: <?
SQL: <?php
}
$k = isset($_POST['produit']) ? trim($_POST['produit']) : null

requête SQL:


MySQL a répondu:

#1064 - You have an error in your SQL syntax near '<?php
}
$k = isset($_POST['produit']) ? trim($_POST['produit']) : null' at line 1


ce qui veut dire qu'il y aurait une erreur de ce coté ci?

Mammouth du PHP | 19672 Messages

11 janv. 2006, 16:47

Est-ce que par hasard tu essayerais d'exécuter du code PHP dans une fenêtre SQL de phpMyAdmin ??? :shock:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

11 janv. 2006, 17:10

C'est la requête SQL qui normalement doit changer selon est-ce que c'est une recherche par name ou produit.
if ($_POST[name]) 
 $SQL = "SELECT * FROM recherche WHERE nom LIKE '". $_POST[name] ."%'";
else 
  $SQL = "SELECT * FROM recherche WHERE produit LIKE '". $_POST[produit] ."%'";
Ce qui va simplifier considérablement ton programme puisque d'après ce qu'on voit dans ton PHP, le même code se répète deux fois.
Il suffit d'un seul bloc d'affichage.

Simplification : (Attention j'ai viré des lignes ne se rapportant pas au sujet)
 
<?php 
  include('connexion.php'); 

if ($_POST[name]) {
     $SQL = "SELECT * FROM recherche WHERE nom LIKE '". $_POST[name] ."%'";
    $h = $_POST[name];
}
else {
    $SQL = "SELECT * FROM recherche WHERE produit LIKE '". $_POST[produit] ."%'";
    $h = $_POST[produit];
}

echo $date; 

echo "<BR><BR><BR>\n"; 

echo "Vous recherchez le id  <EM>$h</EM>.\n";
 
echo "<BR><BR>\n"; 

$result = mysql_query($SQL) or die("La requête <BR><PRE>$SQL</PRE>a échoué : ".mysql_error()); 

//j'ai defini une variable $i pour afficher 5 enregistremnt par ligne 
echo "<TABLE border =\"0\" width=\"100%\" CELLPADDING=\"0\" cellspacing=\"0\">"; 

//initialiser la variable $i a 0 
$i=0; 
while($row = mysql_fetch_row($result)) 
{ 
    if ($i==0) 
     { 
       echo "<TR>"; 
     } 

   //on incremente la variable 
  $i=$i+1; 

   //$row[numero du champ a afficher] 
   echo " <br>$row[1] <br><br>$row[2]<br><br> $row[3]<br><br> $row[4]<br><br> $row[5]<br><br> $row[6]<br><br> <i><b><u>Produits :</i></b></u>$row[7]</td>"; 
  if ($i==5) 
  { 
  echo "</TR>"; 
  $i=0; 
  } 
} 
echo"</table>";   
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2006, 18:46

Aie...Il ne me retourne pas les valeurs pour le champ produit.Il affiche simplement votre recherche pour id...C tout :?:

Eléphant du PHP | 101 Messages

12 janv. 2006, 11:56

merci beaucoup!!!!

:)

Eléphant du PHP | 101 Messages

12 janv. 2006, 11:57

Résolu!!!!