Requête SQL et concaténation de $_POST
Résolu
Gallagher
-
Gallagher -
Gallagher -
Bonjour,
Pour un stage j'ai dû dévelloper une interface permettant aux techniciens de l'entreprise où je suis d'enregistrer des modifications qu'ils ont effectué avec pour champs à renseigner : nom du technicien, secteur, équipement entre autre, sous forme de liste déroulantes toutes ces données sont dans une base de donnée. La modification sera enregistré dans une table " modifications " de la base de donnée.
Dans cette interface j'ai une page de recherche pour recherche des modifications. Les critères de la recherche sont sous la forme de listes déroulantes similaires à celles citées plus haut. Les résultats sont affichés par page.
Si vous avez besoin de la fonction pagination faites le moi savoir.
Les différents $_POST sont les données des listes déroulantes issues de la base de données.
Le problème : Lorsque dans ma page de recherche je laisse toutes les listes déroulantes il m'affiche toutes les modifications sans problème.
Mais si je met qu'un seul critère : Warning: mysql_result() expects parameter 1 to be resource, string given
Je me doute que le problème vient de la suite de if après le " SELECT COUNT(*) " j'ai essayé de modifier les guillemets quote, ça m'affiche toujours ce message.
Merci d'avance pour votre aide.
Pour un stage j'ai dû dévelloper une interface permettant aux techniciens de l'entreprise où je suis d'enregistrer des modifications qu'ils ont effectué avec pour champs à renseigner : nom du technicien, secteur, équipement entre autre, sous forme de liste déroulantes toutes ces données sont dans une base de donnée. La modification sera enregistré dans une table " modifications " de la base de donnée.
Dans cette interface j'ai une page de recherche pour recherche des modifications. Les critères de la recherche sont sous la forme de listes déroulantes similaires à celles citées plus haut. Les résultats sont affichés par page.
<?php $query=mysql_query('SELECT COUNT(*) FROM modifications WHERE 1=1') or die(mysql_error()); if(isset($_POST['technicien'])&&$_POST['technicien']!="") $query.=" AND intervenant='".$_POST['technicien']."'"; if(isset($_POST['date'])&&$_POST['date']!="") $query.=" AND date='".$_POST['date']."'"; if(isset($_POST['unite'])&&$_POST['unite']!="") $query.=" AND unite='".$_POST['unite']."'"; if(isset($_POST['secteur'])&&$_POST["secteur"]!="") $query.=" AND secteur='".$_POST['secteur']."'"; if(isset($_POST['api'])&&$_POST['api']!="") $query.=" AND api='".$_POST['api']."'"; if(isset($_POST['equipement'])&&$_POST['equipement']!="") $query.=" AND equipement='".$_POST['equipement']."'"; if(isset($_POST['motif'])&&$_POST['motif']!="") $query.=" AND motif='".$_POST['motif']."'"; if(isset($_POST['status'])&&$_POST['status']!="") $query=" AND status='".$_POST['status']."'"; $nb_entrees = mysql_result($query,0,0); $entrees_par_page = 5; $total_pages = ceil($nb_entrees/$entrees_par_page); if(!isset($_GET['page'])) { $page_courante = 1; } else { $page = $_GET['page']; if ($page<1) $page_courante=1; elseif ($page>$total_pages) $page_courante=$total_pages; else $page_courante=$page; } $start = ($page_courante * $entrees_par_page - $entrees_par_page); $sql="SELECT * FROM modifications WHERE 1=1"; if(isset($_POST['technicien'])&&$_POST['technicien']!="") $sql=$sql." AND intervenant='".$_POST['technicien']."'"; if(isset($_POST['date'])&&$_POST['date']!="") $sql=$sql." AND date='".$_POST['date']."'"; if(isset($_POST['unite'])&&$_POST['unite']!="") $sql=$sql." AND unite='".$_POST['unite']."'"; if(isset($_POST['secteur'])&&$_POST['secteur']!="") $sql=$sql." AND secteur='".$_POST['secteur']."'"; if(isset($_POST['api'])&&$_POST['api']!="") $sql=$sql." AND api='".$_POST['api']."'"; if(isset($_POST['equipement'])&&$_POST['equipement']!="") $sql=$sql." AND equipement='".$_POST['equipement']."'"; if(isset($_POST['motif'])&&$_POST['motif']!="") $sql=$sql." AND motif='".$_POST['motif']."'"; if(isset($_POST['status'])&&$_POST['status']!="") $sql=$sql." AND status='".$_POST['status']."'"; $sql=$sql.' LIMIT '.$start.','.$entrees_par_page; $requete=mysql_query($sql,$db) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); if(mysql_num_rows(mysql_query($sql,$db))==false) { echo "Aucune donnée ne correspond à votre recherche"; echo '<META http-equiv="refresh" content="1;url=modif_rech.php" />'; } else { echo "<center><table><tr><td><h1>Intervenant</h1></td><td><h1>Date</h1></td><td><h1>Heure</h1></td><td><h1>Unité</h1></td><td><h1>Secteur</h1></td><td><h1>API</h1></td><td><h1>Equipement</h1></td><td><h1>Motif</h1></td><td><h1>Status</h1></td><td><h1>Commentaires</h1></td></tr>"; while($item = mysql_fetch_array($requete)) { echo ("<tr><th>".$item['intervenant']."</th><th>".$item['date']."</th><th>".$item['heure']."</th><th>".$item['unite']."</th><th>".$item['secteur']."</th><th>".$item['api']."</th><th>".$item['equipement']."</th><th>".$item['motif']."</th><th>".$item['status']."</th><th>".$item['commentaire']."</th><th> <a href=\"modif_saisie.php?id_modif=".$item['id_modif']."\">Modifier</a></th><th><a href=\"#\" onClick=\"confirme('".$item['id_modif']."')\" >Supprimer</a><br>\n</th></tr>") ; } echo "</table></center>\n<br>"; echo pagination($total_pages,$page_courante); } ?>
Si vous avez besoin de la fonction pagination faites le moi savoir.
Les différents $_POST sont les données des listes déroulantes issues de la base de données.
Le problème : Lorsque dans ma page de recherche je laisse toutes les listes déroulantes il m'affiche toutes les modifications sans problème.
Mais si je met qu'un seul critère : Warning: mysql_result() expects parameter 1 to be resource, string given
Je me doute que le problème vient de la suite de if après le " SELECT COUNT(*) " j'ai essayé de modifier les guillemets quote, ça m'affiche toujours ce message.
Merci d'avance pour votre aide.
A voir également:
- Requête SQL et concaténation de $_POST
- Logiciel sql - Télécharger - Bases de données
- Sql (+) - Forum Programmation
- Inverse de concatener excel ✓ - Forum Bureautique
- Excel - Inverse de Concatenate ✓ - Forum Excel
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
9 réponses
Avant d'exécuter ta requête fais un echo $sql; et regarde ce qu'il ne va pas dans ta requête sur phpmyadmin
Ah je vois ça affiche toujours le post que j'ai sélectionné mais je sais pas trop comment régler ça. Autre question la suite de if en dessous est correct ?
Mes if sont tous faux en fait...je viens de voir ça. Je sais pas comment traiter les post un par un et à plusieurs...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question$query=mysql_query('SELECT COUNT(*) FROM modifications WHERE 1=1') or die(mysql_error()); if(isset($_POST['technicien'])&&$_POST['technicien']!="") $query.=" AND intervenant='".$_POST['technicien']."'"; tu va un peu trop vite ... $query='SELECT COUNT(*) FROM modifications WHERE 1=1'; if(isset($_POST['technicien'])&&$_POST['technicien']!="") $query.=" AND intervenant='".$_POST['technicien']."'";
çà marchera mieux comme çà déjà
pour ne pas repeter tes if :
$query = ''; foreach($_POST as $key => $value){ if($value != ''){ $query .= ' AND '.$key .' = "'.$value.'"'; } } if($query != ''){ $req = 'SELECT COUNT(*) FROM modifications WHERE (1 '.$query.')'; }
Il faut que tu réfléchisse au nombre de listes que tu as, aux nombre de tables que tu dois gérer et aux nombres de scenarii différents...
maka54 je ne comprend pas trop comment fonctionne le foreach dans mon cas.
Breub62 je te met le code avec les listes déroulantes :
Breub62 je te met le code avec les listes déroulantes :
<?php $demande="SELECT DISTINCT intervenant FROM modifications ORDER BY intervenant"; $result=mysql_query($demande); echo '<select name="technicien">'; echo'<option value="" selected="selected"></option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row[0].'">'.$row[0].'</option>'; } echo '</select><br /><br />'; echo 'Date : '; $demande="SELECT DISTINCT date FROM modifications ORDER BY date"; $result=mysql_query($demande); echo '<select name="date">'; echo'<option value="" selected="selected"></option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row[0].'">'.$row[0].'</option>'; } echo '</select><br /><br />'; echo 'Unité : '; $demande="SELECT DISTINCT unite FROM modifications ORDER BY unite"; $result=mysql_query($demande); echo '<select name="unite">'; echo'<option value="" selected="selected"></option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row[0].'">'.$row[0].'</option>'; } echo '</select><br /><br />'; echo 'Secteur : '; $demande="SELECT DISTINCT secteur FROM modifications ORDER BY secteur"; $result=mysql_query($demande); echo '<select name="secteur">'; echo'<option value="" selected="selected"></option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row[0].'">'.$row[0].'</option>'; } echo '</select><br /><br />'; echo 'API : '; $demande="SELECT DISTINCT api FROM modifications ORDER BY api"; $result=mysql_query($demande); echo '<select name="api">'; echo'<option value="" selected="selected"></option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row[0].'">'.$row[0].'</option>'; } echo '</select><br /><br />'; echo 'Equipement : '; $demande="SELECT DISTINCT equipement FROM modifications ORDER BY equipement"; $result=mysql_query($demande); echo '<select name="equipement">'; echo'<option value="" selected="selected"></option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row[0].'">'.$row[0].'</option>'; } echo '</select><br /><br />'; echo 'Motif : '; $demande="SELECT DISTINCT motif FROM modifications ORDER BY motif"; $result=mysql_query($demande); echo '<select name="motif">'; echo'<option value="" selected="selected"></option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row[0].'">'.$row[0].'</option>'; } echo '</select><br /><br />'; echo 'Status : '; $demande="SELECT DISTINCT status FROM modifications ORDER BY status"; $result=mysql_query($demande); echo '<select name="status">'; echo'<option value="" selected="selected"></option>'; while($row = mysql_fetch_array($result)) { echo '<option value="'.$row[0].'">'.$row[0].'</option>'; } echo '</select><br /><br />'; ?>
Si j'ai bien compté tu 8 listes déroulantes soit :
0 sélectionnés : 1 cas
1 sélectionnés : 8 cas
2 sélectionnés : 8x7 cas
3 sélectionnés : 8x7x6 cas
4 sélectionnés : 8x7x6x5 cas
5 sélectionnés : 8x7x6 cas
6 sélectionnés : 8x7 cas
7 sélectionnés : 8 cas
8 sélectionnés : 1 cas
Ce qui fais 2482 scénarios possibles...
A toi de voir comment t'organiser...
0 sélectionnés : 1 cas
1 sélectionnés : 8 cas
2 sélectionnés : 8x7 cas
3 sélectionnés : 8x7x6 cas
4 sélectionnés : 8x7x6x5 cas
5 sélectionnés : 8x7x6 cas
6 sélectionnés : 8x7 cas
7 sélectionnés : 8 cas
8 sélectionnés : 1 cas
Ce qui fais 2482 scénarios possibles...
A toi de voir comment t'organiser...
foreach($_POST as $key => $value){ if($value != ''){ $query .= ' AND '.$key .' = "'.$value.'"'; } }
tu boucles sur tes $_POST et tu recupères la clé et la valeur
exemple avec
$_POST['technicien'] $key = 'technicien'; $valeur = 'la valeur de ton $_POST'; $query .= ' AND '.$key .' = "'.$value.'"'; -> $query .= ' AND technicien = "une_valeur"';
par contre je viens de voir que ton champ s'appelait intervenant, du coup, çà marchera pas, mais si tous tes champs du formulaire avait le meme nom que dans ta base, çà te ferait gagner un temps considérable ...
Pour cette partie là :
if(isset($_POST['status'])&&$_POST['status']!="") $query=" AND status='".$_POST['status']."'"; $nb_entrees = mysql_result($query,0,0);mysql_result ne fonctionne pas avec une chaîne de caractère ça devrait plutôt être :
if(isset($_POST['status'])&&$_POST['status']!="") $query=" AND status='".$_POST['status']."'"; $res = $requete=mysql_query($sql,$db); $nb_entrees = mysql_result($res,0,1);