Where & order by

Résolu
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   -  
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je n'arrive pas à trouver d'où vient l'erreur dans mon script.
La zone de liste demeurant désespérément vide.

<?php
    if(isset($_POST['code_client'])) $code_client=$_POST['code_client'];
    else $code_client="";
?>
<?php
 $db='******'; 
 $cnx=mysql_connect('localhost', '*****', '*******') or die("Pb connexion serveur ".mysql_error()); // connexion à la base 
 $db_sel=mysql_select_db($db) or die("Erreur de selection ".mysql_error());

 $requete2 = mysql_query("SELECT apayer_id, date_apayer, code_client FROM oc_apayer WHERE code_client = $code_client ORDER BY date_apayer DESC");
?>
<?php 
while ($valeur = mysql_fetch_array($requete2)){ 
echo "<option value=\"". $valeur['apayer_id'] ."\" cli_name=\"". $valeur['date_apayer'] ."\" cli_name=\"". $valeur['code_client'] ."\">". $valeur['date_apayer'] ."   ". $valeur['code_client'] ."</option>n"; 
 
} 
?>


Merci bcp.

A voir également:

12 réponses

Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

Essaye d'afficher ta requête et de l'exécuter dans ton client SQL (PhpMyAdmin ou autre) pour voir si elle est correcte.

Si la variable $code_client dans ta requête n'est pas de type numérique, il faudrait lui ajouter des quotes :
$requete2 = mysql_query("SELECT apayer_id, date_apayer, code_client FROM oc_apayer WHERE code_client = '$code_client' ORDER BY date_apayer DESC");


Au passage, il faudrait si possible changer d'API pour les traitements sql (MySQL est obsolète, préférer MySQLi ou PDO) et sécuriser tes requêtes contre les injections.

Bonne journée
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
MErci bcp Pitet,

je vais tester en suivant tes conseils.

Bonne soirée.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Bon,

Visiblement le tri par '$code_client' est problématique, mais je ne comprends pas où.
Le script fonctionne très bien avec cette terminaison là :

WHERE TO_DAYS(NOW()) - TO_DAYS(date_apayer) <= 3 ORDER BY date_apayer DESC") or die("Pb avec la requette ".mysql_error());

Qui voit d'où vient le problème avec 'code_client" :
WHERE code_client = '$code_client' ORDER BY date_apayer DESC");

MErci à vous.
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
As tu une erreur SQL ? Si oui, quelle est cette erreur ?

Plusieurs causes possibles :
- le champ code_client n'existe pas dans la table
- la valeur de $code_client n'est pas correcte ou contient une injection sql
- il n'y a aucun enregistrement correspondant à la valeur de $code_client
- ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Ah si si il existe bien.
C quoi une injection ?

En fait il renvoie toujours le même résultat, les seuls champs de la table où code_client est vide...
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Et ta variable $code_client ne serait-elle pas vide par hasard ?
-> retour à mon premier message : Essaye d'afficher ta requête et de l'exécuter

$query = "SELECT apayer_id, date_apayer, code_client FROM oc_apayer WHERE code_client = $code_client ORDER BY date_apayer DESC";
var_dump($query);
$requete2 = mysql_query($query); 



Une injection SQL est une faille qui permet de modifier ta requête SQL, quelques exemples ici : https://fr.wikipedia.org/wiki/Injection_SQL
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Avec ton code cela me donne le message d'erreur suivant :

string(106) "SELECT apayer_id, date_apayer, code_client FROM oc_apayer WHERE code_client = '' ORDER BY date_apayer DESC"

J'ai testé la zone de liste avec un code_client fixe, cela fonctionne très bien.

jej pense qu'il faut que je mette la récupération du code_client pour que aies une vue d'ensemble :

<?php
    if(isset($_POST['code_client'])) $code_client=$_POST['code_client'];
    else $code_client="";
    
 $db='*****'; 
 $cnx=mysql_connect('localhost', '*****', '*****') or die("Pb connexion serveur".mysql_error());

 $db_sel=mysql_select_db($db) or die("Erreur de selection ".mysql_error()); 
 $query = "SELECT apayer_id, date_apayer, code_client FROM oc_apayer WHERE code_client = '$code_client' ORDER BY date_apayer DESC"; 
 var_dump($query);
 $requete2 = mysql_query($query);
?>
0
chico200987 Messages postés 791 Date d'inscription   Statut Membre Dernière intervention   143
 
Salut,

En mettant :

if(isset($_POST['code_client'])) $code_client=$_POST['code_client'];
else $code_client=""; 


Tu spécifies que la page est appelée depuis un formulaire ayant un champ nommé "code_client".

Est-ce bien le cas ? Quel est le formulaire HTML qui appelle cette page PHP ?
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Ah non ! la page "appelante" est index2.php.

Je teste cela, plus tard, faut que j'y aille !

Merci 1000 fois en tout cas.

Bonne soirée.
0
chico200987 Messages postés 791 Date d'inscription   Statut Membre Dernière intervention   143
 
Le "Ah non" répond à quel question ? C'est forcément le cas si tu veux récupérer ta valeur comme tu le fais. Le code HTML doit être dans ta page index2.php, si tu nous montres le formulaire de cette page on pourra peut-être mieux comprendre pourquoi la valeur n'est pas transmise sur la page appelée ;)

Bonne soirée à toi aussi !
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Voici le formulaire :

</script>

<form action="index3.php" name="sendform1" onsubmit="check1(); return false;" enctype="application/x-www-form-urlencoded">
<table cellpadding="0" cellspacing="5" class="formtab pluginwidth">
<tr>
<td colspan="2" class="h" id="myerror"></td>
</tr>
<!--Text-->
<?php
$db='****';
$cnx=mysql_connect('localhost', '****', '****') or die("Pb connexion serveur ".mysql_error());
$db_sel=mysql_select_db($db) or die("Erreur de selection ".mysql_error());
$requete = mysql_query("SELECT nom, code_client FROM oc_clients") or die("Pb avec la requette ".mysql_error());
?>


<td class="auto-style2" style="width: 131px; height: 29px;">code client *</td>
<td style="height: 29px"><select name="code_client" style="width: 159px">

<option selected="selected"></option>

<?php
while ($valeur = mysql_fetch_array($requete)){
echo "<option value=\"". $valeur['code_client'] ."\" cli_name=\"". $valeur['nom'] ."\">". $valeur['code_client'] ." ". $valeur['nom'] ."</option>n";
}
?>
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Bonjour chico200987,

Désolé, Oui c bien la cas 'code_client' provient d'un formulaire.
En me disant que la valeur n'est pas transmise, vous me mettez la puce à l'oreille,
je fais qques vérifs et je vous dis ce qu'il en est.
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
Bon, mes vérifs n'ont rien donné, normal suis un bleu :).

bon voilà mon formulaire sur index2.php :

<form action="index3.php" name="sendform1" onsubmit="check1(); return false;" enctype="application/x-www-form-urlencoded">
<table cellpadding="0" cellspacing="5" class="formtab pluginwidth">
<tr>
<td colspan="2" class="h" id="myerror"></td>
</tr>
<!--Text-->
<?php
$db='****';
$cnx=mysql_connect('localhost', '****', '****') or die("Pb connexion serveur ".mysql_error()); // connexion à la base
$db_sel=mysql_select_db($db) or die("Erreur de selection ".mysql_error()); // sélection de la base //messages de TEST à oter ensuite qd ça marchera
$requete = mysql_query("SELECT nom, code_client FROM oc_clients") or die("Pb avec la requette ".mysql_error());
?>


<td class="auto-style2" style="width: 131px; height: 29px;">code client *</td>
<td style="height: 29px"><select name="code_client" style="width: 159px">

<option selected="selected"></option>

<?php
while ($valeur = mysql_fetch_array($requete)){
echo "<option value=\"". $valeur['code_client'] ."\" cli_name=\"". $valeur['nom'] ."\">". $valeur['code_client'] ." ". $valeur['nom'] ."</option>n";
}
?>
0
maxireussite Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   5
 
J'ai trouvé !

En fait ma page initiale provenait d'une page récupérée à partir de 'Web to date", et je l'avais "bidouillée" vu que j'touche pas trop en PHP.

Vu les difficultés à la faire fonctionner, je suis reparti de zéro d'une page blanche en testant des trucs simples. Et là, la page appelée à fonctionné.

Le problème (que je n'ai pas réussi à détecter) provenait non pas du formulaire, mais de la page elle-même vu que le même script fonctionne sur une page "blanche"...

MErci à tous en tous cas.
0