IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Champ de recherche multiple avec php mysql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut Champ de recherche multiple avec php mysql
    Bonjour à tous !

    J'ai créer un moteur de recherche qui permet de rechercher plusieurs catégorie avec plusieurs champs.
    Une erreur sql n'arrête pas d'apparaître lors de l'exécution de mon script.
    S'il vous plait je demande votre assistance.

    Voici l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur SQL !DHEAT
    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 '' at line 1
    Je vous donne l'ensemble de mon code pour vous permettre une meilleure compréhension. Merci beaucoup d'avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    <?php
    //recherche des résultats dans la base de données$result = mysql_query( 'SELECT prenom
    if(isset($_GET['recherche'])){
    extract($_GET);
    $req = "SELECT `id`, `idsiteinterne`, `idsiteprovider`, `site_name`,  `adresseIP`, `service` FROM cyb_site WHERE 1=1 ";
     
    //Le WHERE 1=1 permet de pas s'embeter à savoir si le WHERE a déjà été mis ou pas après dans les différents "if isset..."
    //Ajout de la recherche sur le idsiteinterne s'il est renseigné
    if (isset($_POST['idsiteinterne'])) $req = $req & " AND idsiteinterne LIKE '%".htmlentities(trim($_post['idsiteinterne']))."%'";
     
    //Ajout de la recherche sur le idsiteprovider s'il est renseigné
    if (isset($_POST['idsiteprovider'])) $req = $req & " AND idsiteprovider LIKE '%".htmlentities(trim($_post['idsiteprovider']))."%'";
     
    //Ajout de la recherche sur site_name si elle est renseignée
    if (isset($_POST['site_name'])) $req = $req & " AND site_name LIKE '%".htmlentities(trim($_post['site_name']))."%'  ";
     
    if (isset($_POST['adresseIP'])) $req = $req & " AND adresseIP LIKE '%".htmlentities(trim($_post['adresseIP']))."%'  ";
     
    if (isset($_POST['service'])) $req = $req & " AND service LIKE '%".htmlentities(trim($_post['service']))."%'  ";
     
    $req = $req & " LIMIT 10";
     
     echo'<h4>Resultat de recherche</h4>';
     echo '<table>';
     echo '<tr>';
    	echo '<th class="td_seach_titre">N&deg;</th>';
    	echo '<th class="td_seach_titre">ID Provider</th>';
    	echo '<th class="td_seach_titre">ID Interne</th>';
    	echo '<th class="td_seach_titre">Etat du site</th>';
    	echo '<th class="td_seach_titre">Nom du site</th>';
    	echo '<th class="td_seach_titre">Adresse IP</th>';
    	echo '<th class="td_seach_titre">Service</th>';
    	echo '</tr>';
      echo '</table>';
     
    // affichage d'un message "pas de résultats"
    	//$result = mysql_query($req)
    echo $result = mysql_query($req)
    or die('Erreur SQL !'.$req.'<br /><b>'.mysql_error().'</b>');
     
    if (mysql_num_rows($result)==0)
    {
    ?>
        <h3 style="text-align:center; margin:10px 0;">Pas de r&eacute;sultats pour cette recherche</h3>
    <?php
    }
    else
    {
        // parcours et affichage des résultats
        while( $result = mysql_query($result))
        {
        ?>
     
     
            <div class="article-result">
    <table>
    			<tr>
    			<td class="id"><?php echo $post->id; ?></td>
    			<td class="td_seach"><a href="accueil.php?view=24&u='.$row['id'].'""><?php echo $post->idsiteinterne; ?></a></td>
    			<td class="td_seach"><?php echo $post->idsiteprovider; ?></td>
    			<td class="td_seach"><?php echo $post->idetatsite; ?></td>
    			<td class="td_seach"><?php echo $post->site_name; ?></td>
    			<td class="td_seach"><?php echo $post->adresseIP; ?></td>
    			<td class="td_seach"><?php echo $post->service; ?></td>
    			</tr></table>
    			</table>
            </div>
        <?php
        }
    }
    }
    ?>
    <div id="boxManage">
    <h4>Rechercher un site</h4>
    <p>Trouvez un site par son nom, sa date de cr&eacute;ation, son ID, son statut. </p>
    <form method="get" action="">
              <table width="480" border="0" class="right">
     
                <tr>
                  <td class="recherche_text"><label for="id_interne">ID interne</label></td>
                  <td > <input type="text" name="idsiteinterne" class="recherche" id="id_interne" value="<?php if (isset($_POST['idsiteinterne']))  echo htmlentities(trim($_POST['idsiteinterne'])); ?>"></td>
                </tr>
     
                <tr>
     
                  <td class="recherche_text"><label for="id_provider" >ID Provider</label></td>
                  <td >
                      <input type="text" name="idsiteprovider" class="recherche" id="id_provider" value="<?php if (isset($_POST['idsiteprovider']))  echo htmlentities(trim($_POST['idsiteprovider'])); ?>"></td>
                </tr>
     
                   <tr>
                   <td class="recherche_text"><label for="nom_du_site">Nom du site</label></td>
                  <td >
                      <input type="text" name="site_name" class="recherche" id="nom_du_site" value="<?php if (isset($_POST['site_name']))  echo htmlentities(trim($_POST['site_name'])); ?>"></td>
                </tr>
     
     <tr>
        <td class="recherche_text"> <label for="adresse_ip">Adresse IP</label></td>
                  <td >
                      <input type="text" name="adresseIP" class="recherche" id="adresse_ip" value="<?php if (isset($_POST['adresseIP']))  echo htmlentities(trim($_POST['adresseIP'])); ?>"></td>
                </tr>
     
     
                 <tr>
                  <td class="recherche_text">Statut</td>
                  <td class="seach_name" >
    			  <?php
    				$query = "SELECT * FROM `etat_site`";
    				$result = mysql_query($query);
    				echo '<SELECT  name="idetatsite"  class="recherche_select">';
    				while ($row = mysql_fetch_array($result)) {
    				echo '<OPTION>'.$row['etatsite'].'</OPTION>';
    				}
    				echo '</SELECT>';
    				?>
    			 </td>
                </tr>
                       <tr>
                             <td></td>
                             <td><input type="submit" name="recherche" class="recherche_submit" value="Rechercher" /></td>
                </tr>
    			</table>
     
    </form>
     
    </div>
     
    <div id="results"></div>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    "Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour le droit d'utiliser la syntaxe''près à la ligne 1"
    Affiche la requête $req, pour voir où est l'erreur.

    De plus, il est fortement recommandé d'utiliser mysql_real_escape_string() !

    [edit] en PHP, la concaténation se fait avec ".", pas avec "&" :
    $req = $req & " AND...
    => $req = $req . " AND...
    ou encore :
    => $req .= " AND...

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Je pense qu tu as un autre problème : pour échapper des valeurs destinées à mysql c'est mysql_real_escape_string() et non htmlentities() (je radote )

    Ensuite tu ne fais jamais un extract() sur le tableau global $_GET (brèche dans la sécurité)

    Par ailleurs, pour complèter la réponse de l'ami jreaux62, il est préférable de créer ta clause where en utilisant un tableau au lieu d'un critère du genre 1 = 1 :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    $where = array();
     
    if (isset($_POST['idsiteinterne'])) {
       $where[] = "idsiteinterne LIKE '%".mysql_real_escape_string(trim($_POST['idsiteinterne']))."%'";
    }
     
    if (isset($_POST['idsiteprovider'])) {
       $where[] = "idsiteprovider LIKE '%".mysql_real_escape_string(trim($_POST['idsiteprovider']))."%'";
    }
     
    if (isset($_POST['site_name'])) {
       $where[] = "site_name LIKE '%".mysql_real_escape_string(trim($_POST['site_name']))."%'";
    }
     
    if (isset($_POST['adresseIP'])) {
       $where[]= "adresseIP LIKE '%".mysql_real_escape_string(trim($_POST['adresseIP']))."%'";
    }
     
    if (isset($_POST['service'])) {
       $where[] = "service LIKE '%".mysql_real_escape_string(trim($_POST['service']))."%'";
    }
     
    $sqlWhere = implode(' AND ', $where);

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut
    Merci beaucoup j'ai modifié par les sources que vous venez de me fournir mais l'erreur s'affiche toujours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_query() expects parameter 1 to be string, resource given in C:\wamp\www\internetservices\sitemanage.php on line 60
    Ligne 60

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( $result = mysql_query($result))

  5. #5
    Membre éclairé
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Par défaut
    tu construit ta requête dans $req pourquoi tu fais un
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    while( $result = mysql_query($result))
    ca devrai pas plutot être:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    while( $result = mysql_query($req))

    et une question si tu affiches $req avant le mysql_query il t'affiche quoi???

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    J'ai repris tant bien que mal le code de ta page mais je n'ai pas pu terminer pour la simple et unique bonne raison que ta logique m'échappe...
    J'ai joué aux devinettes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    <?php
     
    if( ! isset($_GET['recherche'])) {
       return;
    }
     
    extract($_GET);  // qu'est ce tu récupères ici ?
     
    $sql = 'SELECT id, idsiteinterne, idsiteprovider, site_name, adresseIP, service FROM cyb_site';
     
    $where = array();
    if (isset($_POST['idsiteinterne'])) {
       $where[] = "idsiteinterne LIKE '%".mysql_real_escape_string(trim($_POST['idsiteinterne']))."%'";
    }
    if (isset($_POST['idsiteprovider'])) {
       $where[] = "idsiteprovider LIKE '%".mysql_real_escape_string(trim($_POST['idsiteprovider']))."%'";
    }
    if (isset($_POST['site_name'])) {
       $where[] = "site_name LIKE '%".mysql_real_escape_string(trim($_POST['site_name']))."%'";
    }
    if (isset($_POST['adresseIP'])) {
       $where[]= "adresseIP LIKE '%".mysql_real_escape_string(trim($_POST['adresseIP']))."%'";
    }
    if (isset($_POST['service'])) {
       $where[] = "service LIKE '%".mysql_real_escape_string(trim($_POST['service']))."%'";
    }
     
    if ( ! empty($where)) {
       $sql .= ' WHERE ' . implode(' AND ', $where);
    }
     
    $sql .= ' LIMIT 10';
     
    $exec = mysql_query($sql);
    if ( ! $exec) {
       die('Erreur SQL : '.$sql.'<br /><b>'.mysql_error().'</b>');
    }
     
    $data = array();
    while($row = mysql_fetch_assoc($exec)) {
       $data[] = $row;
    }
    ?>
     
    <h4>Resultat de recherche</h4>
    <table>
       <thead>
          <tr>
             <th class="td_seach_titre">N&deg;</th>
             <th class="td_seach_titre">ID Provider</th>
             <th class="td_seach_titre">ID Interne</th>
             <th class="td_seach_titre">Etat du site</th>
             <th class="td_seach_titre">Nom du site</th>
             <th class="td_seach_titre">Adresse IP</th>
             <th class="td_seach_titre">Service</th>
          </tr>
       </thead>
       <tbody class="article-result">
       <?php if (empty($data)): ?>
          <tr>
             <td colspan="7" style="text-align:center;">Pas de r&eacute;sultats pour cette recherche</td>
          </tr>
       <?php else: ?>
          <?php foreach($data as $row): ?>
          <tr>
             <td class="id"><?php echo $row['id']; ?></td>
             <td class="td_seach"><a href="accueil.php?view=24&u=<?php echo $row['id']; ?>"><?php echo $row['idsiteinterne']; ?></a></td>
             <td class="td_seach"><?php echo $row['idsiteprovider']; ?></td>
             <td class="td_seach"><?php echo $row['idetatsite']; ?></td>
             <td class="td_seach"><?php echo $row['site_name']; ?></td>
             <td class="td_seach"><?php echo $row['adresseIP']; ?></td>
             <td class="td_seach"><?php echo $row['service']; ?></td>
          </tr>
          <?php endforeach; ?>
       <?php endif; ?>
       </tbody>
    </table>
    ?>
    Comme tu le verras je me suis arrêté juste avant <div id="boxManage">Dans tous les cas, étudies mon code, tu verras comment utiliser mysql_query()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 22/06/2010, 16h08
  2. Quel SGBD avec PHP : MySQL ou Postgres
    Par charliejo dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/01/2006, 12h13
  3. Recherche Login Script PHP & MySQL
    Par whbh dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 01/12/2005, 16h45
  4. multi update avec php/ mysql
    Par arnoweb dans le forum Administration
    Réponses: 1
    Dernier message: 17/11/2005, 22h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo