Where & order by

Résolu/Fermé
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - Modifié par pijaku le 22/01/2014 à 08:03
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 22 janv. 2014 à 14:16
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.

12 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
21 janv. 2014 à 12:32
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
21 janv. 2014 à 16:05
MErci bcp Pitet,

je vais tester en suivant tes conseils.

Bonne soirée.
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 21/01/2014 à 17:17
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 21/01/2014 à 17:15
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 21/01/2014 à 17:24
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
21 janv. 2014 à 17:44
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par pijaku le 22/01/2014 à 08:04
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 mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
21 janv. 2014 à 18:39
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
21 janv. 2014 à 18:44
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 mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
21 janv. 2014 à 18:47
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par pijaku le 22/01/2014 à 08:05
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 21/01/2014 à 21:42
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par pijaku le 22/01/2014 à 08:05
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 jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
22 janv. 2014 à 14:16
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