pb script php: script multi champ

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : pb script php: script multi champ

par fersayn » 12 janv. 2006, 11:57

Résolu!!!!

par fersayn » 12 janv. 2006, 11:56

merci beaucoup!!!!

:)

par Invité » 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 :?:

par sadeq » 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>";   
?>

par Cyrano » 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:

par Invité » 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?

par Cyrano » 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.

par Invité » 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.
?

par Cyrano » 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
}
?>

par Invité » 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!

par Cyrano » 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 ??

par fersayn » 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>

par Cyrano » 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.

par Truc » 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: )

pb script php: script multi champ

par Invité » 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>";  
?>