problème de requete

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 : problème de requete

par Snipy » 16 août 2007, 19:52

Après diverses modifications, tout remarche..


Merci de votre aide :D

par Vikchill » 16 août 2007, 19:04

Tu devrais faire un truc: tu reproduis le problème en affichant la requête qui pose problème (dans le 'or die()' par exemple) et tu nous la file après l'avoir testé directement dans phpMyAdmin.

par Snipy » 16 août 2007, 18:49

Pendant un moment je n'avais plus l'erreur et voila que je l'ai de nouveau :
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 'ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE, NOM
Revoici ma page
<?php if (!isset($_GET['champ']))
   {
    $champ = $_SESSION['champ'];
   }

else
{
$champ=$_GET['champ'];
}



$query = "SELECT phpl_divisions.nom, phpl_saisons.annee, (phpl_saisons.annee)+1 
          FROM phpl_championnats, phpl_divisions, phpl_saisons 
          WHERE phpl_championnats.id='$champ' 
          AND phpl_divisions.id=phpl_championnats.id_division
          AND phpl_saisons.id=phpl_championnats.id_saison";

$result = mysql_query($query) or die (mysql_error());

        while ($row=mysql_fetch_array($result))
        {
            echo "<div align=\"center\"><h4><b>".$row[0]."  ".$row[1]."/".$row[2]."</b></h4></div>\n";
        }

$class=0;
$lien="oui";


    // RAPPEL DES PARAMETRES du CHAMPIONNAT
    $result=mysql_query("SELECT accession, barrage, estimation, relegation, id_equipe_fetiche, fiches_clubs
                         FROM phpl_parametres
                         WHERE id_champ='$champ'");
    $row=mysql_fetch_array($result);

    $accession = $row['accession'];
    $barrage = $row['barrage'] + $accession;
    $estimation = $row['estimation'];
    $fiches_clubs = $row['fiches_clubs'];
    $id_equipe_fetiche=$row['id_equipe_fetiche'];
    
    $relegation = $nb_equipe - $row['relegation'];
      

echo $champ;
    $requete='SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM';
    clmnt($accession, $barrage, $relegation, $champ, $requete, $lien, $id_equipe_fetiche);
  
    $query="SELECT max(phpl_journees.numero) FROM phpl_journees, phpl_matchs WHERE phpl_journees.id=phpl_matchs.id_journee and buts_dom is not NULL and phpl_journees.id_champ='$champ'";
    $result=mysql_query($query) or die (mysql_error());
    while ($row=mysql_fetch_array($result))
        {
        $numero=$row[0];
        }
    ?>
    <br /><br />
    <?
    if (!empty($numero)) {aff_journee($champ, $numero, CONSULT_CLMNT_MSG6, 0, $fiches_clubs, $id_equipe_fetiche);}

    if ($numero<$nb_journees)
     {
      aff_journee($champ, $numero+1, CONSULT_CLMNT_MSG62, 0, $fiches_clubs, $id_equipe_fetiche);
     }
mysql_close();
Ainsi que la fonction clmnt
<?php function clmnt($accession, $barrage, $relegation, $champ, $requete, $lien, $id_equipe_fetiche)
{
echo "<table class=\"tablephpl2\" align=\"center\" cellspacing=\"0\" width=\"60%\"><tr class=\"trphpl3\"><th colspan=\"11\">Classement général</th></tr>\n";
echo "<tr class=\"trphpl3\">
<th align=\"center\">Position</th>
<th align=\"left\">Equipes</th>
<th align=\"left\">Pts</th>\n";
echo "<th align=\"left\">J</th>
<th align=\"left\">V</th>
<th align=\"left\">D</th>
<th align=\"left\">PM</th>
<th align=\"left\">PE</th>
<th align=\"left\">Dif</th>
<th align=\"left\"></th></tr>\n";

$result = mysql_query($requete) or die (mysql_error());
$pl=1;

      while ($row=mysql_fetch_array($result))
       {

                        if ($row['NOM']==EXEMPT){continue;}
                        if ($pl<=$accession){echo '1<tr class="accession">';}
                        elseif ($pl<=$barrage){echo '2<tr class="barrage">';}
                        elseif ($pl>$relegation){echo '3<tr class="relegation">';}
                        elseif (($pl%2)==0){echo '4<tr class="ligne1">';}
                      	else{echo '5<tr class="ligne2">';}

        echo '<td align="center">'.$pl.'</td>';
        $pl++;
        $x=0;


              while($x<8)
               {
               echo "<td>";

                   if ($x==0)
                    {
                     if ($row['id_equipe']==$_SESSION['id_equipe']){echo "<b>";}

                     if ($lien=='non'){echo "$row[$x]";}
                     else {echo "<a href=\"detaileq.php?champ=$champ&id_equipe=".$row['id_equipe']."\">$row[$x]</a>";
                     if ($row['id_equipe']==$_SESSION['id_equipe']){echo "</b>";}
                     }
                     }

                     else print $row[$x];
                     echo "</td>";
                     $x++;
                     }
             echo "<td align=\"right\">";
             $leg="graphique";
             echo "<a href=\"#\" onclick=\"window.open('graph.php?equipe=".$row['ID_EQUIPE']."','Stats','toolbar=0,location=0,directories=0,status=0,scrollbars=0,resizable=0,copyhistory=0,menuBar=0,width=560,height=320');return false;\"><img src=\"../images/graph.gif\" border=\"0\" alt=\"$leg\"></a>";
             echo "</td></tr>\n";
        }
        echo "</table>";
}
Encore merci pour ton aide

par Sékiltoyai » 16 août 2007, 17:10

Ouais, donne la fonction.

par Snipy » 16 août 2007, 16:22

C'est bien ce que je disais, tu n'exécutes pas la requète que tu m'as dis exécuter. En fait, elle n'est l'a que pour faire joli.
Toi tu préfère exécuter une requète qui buggue :
$query="SELECT max(phpl_journees.numero) FROM phpl_journees, phpl_matchs WHERE phpl_journees.id=phpl_matchs.id_journee and buts_dom is not NULL and phpl_journees.id_champ='$champ'";
Ma premiere requete s'effectue bien :wink: mais dans la fonction clmnt
<?php
    $requete='SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM';
    clmnt($legende, $type, $accession
Tu veux voir la fonction?

Sinon ma seconde requete n'est donc pas bonne ?

Merci de ton aide :)

par Sékiltoyai » 16 août 2007, 13:37

C'est bien ce que je disais, tu n'exécutes pas la requète que tu m'as dis exécuter. En fait, elle n'est l'a que pour faire joli.
Toi tu préfère exécuter une requète qui buggue :
$query="SELECT max(phpl_journees.numero) FROM phpl_journees, phpl_matchs WHERE phpl_journees.id=phpl_matchs.id_journee and buts_dom is not NULL and phpl_journees.id_champ='$champ'";

par Snipy » 16 août 2007, 13:29

Voici
<?php if (!isset($_GET['champ']))
   {
    $champ = $_SESSION['champ'];
   }

else
{
$champ=$_GET['champ'];
}



$query = "SELECT phpl_divisions.nom, phpl_saisons.annee, (phpl_saisons.annee)+1 
          FROM phpl_championnats, phpl_divisions, phpl_saisons 
          WHERE phpl_championnats.id='$champ' 
          AND phpl_divisions.id=phpl_championnats.id_division
          AND phpl_saisons.id=phpl_championnats.id_saison";

$result = mysql_query($query) or die (mysql_error());

        while ($row=mysql_fetch_array($result))
        {
            echo "<div align=\"center\"><h4><b>".$row[0]."  ".$row[1]."/".$row[2]."</b></h4></div>\n";
        }

$class=0;
$lien="oui";


    // RAPPEL DES PARAMETRES du CHAMPIONNAT
    $result=mysql_query("SELECT accession, barrage, estimation, relegation, id_equipe_fetiche, fiches_clubs
                         FROM phpl_parametres
                         WHERE id_champ='$champ'");
    $row=mysql_fetch_array($result);

    $accession = $row['accession'];
    $barrage = $row['barrage'] + $accession;
    $estimation = $row['estimation'];
    $fiches_clubs = $row['fiches_clubs'];
    $id_equipe_fetiche=$row['id_equipe_fetiche'];
    
    $relegation = $nb_equipe - $row['relegation'];
      

echo $champ;
    $requete='SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM';
    clmnt($legende, $type, $accession, $barrage, $relegation, $champ, $requete, $lien, $id_equipe_fetiche);
  
    $query="SELECT max(phpl_journees.numero) FROM phpl_journees, phpl_matchs WHERE phpl_journees.id=phpl_matchs.id_journee and buts_dom is not NULL and phpl_journees.id_champ='$champ'";
    $result=mysql_query($query) or die (mysql_error());
    while ($row=mysql_fetch_array($result))
        {
        $numero=$row[0];
        }
    ?>
    <br /><br />
    <?
    if (!empty($numero)) {aff_journee($champ, $numero, CONSULT_CLMNT_MSG6, 0, $fiches_clubs, $id_equipe_fetiche);}

    if ($numero<$nb_journees)
     {
      aff_journee($champ, $numero+1, CONSULT_CLMNT_MSG62, 0, $fiches_clubs, $id_equipe_fetiche);
     }
mysql_close();

par Sékiltoyai » 15 août 2007, 22:49

Alors donne le code réel… :-/

par Snipy » 15 août 2007, 22:15

Pourtant dans mon code il y a 3 requetes, et c'est en enlevant celle la que l'erreur disparait.

par Sékiltoyai » 15 août 2007, 21:45

Alors l'erreur ne correspond pas au code que tu nous donnes. Si tu veux qu'on t'aide, il faut que tu nous donnes les bonnes erreurs. Au passage, le code que tu nous as donné est exact (enfin à part le ',NOM' à la fin de la requète. EDIT: Ah non, même pas, la requète est bel et bien correcte).

par Snipy » 15 août 2007, 20:16

j'ai $champ = $_SESSION['champ'];

et un echo de champ me renvois bien mon nombre (1)

par Sékiltoyai » 15 août 2007, 01:02

Tu es sur que tu ne t'es pas trompé d'erreur avec la dernière requète ?
Normalement, celle que tu viens de nous poster ne devrait pas renvoyer cette erreur, à moins que tu aies fait
$champ = '\'$champ\'';

par Snipy » 15 août 2007, 00:55

J'ai essayé sans les guillemets (car $champ est effectivement un nombre.
J'ai aussi essayé avec
$requete='SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM';
L'erreur de Mysql
MySQL a répondu:Documentation
#1064 - 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 ''SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='.$champ.' ORDER BY POIN' at line 1

par Ryle » 14 août 2007, 23:47

Affiche la requête générée.. regarde s'il n'y a rien d'anormal... joue la dans mysql ou phpMyAdmin... est ce que ta table existe ? est-ce que tes champs existent ? que donne la requête sans le distinct ? et avec les noms des champs que tu veux récupérer à la place de l'étoile ?

Si id_champ est un nombre (int, tinyint, ..) alors il ne faut pas d'apostrophes autour de ses valeurs.. les apostrophes doivent uniquement délimiter des chaines...

bref rappel de l'utilisation du distinct : http://dev.mysql.com/doc/refman/5.0/fr/select.html
Après le mot SELECT, vous pouvez ajouter certaines options qui affectent le comportement de la commande.

Les options DISTINCT, DISTINCTROW et ALL indiquent quels enregistrements avec doublons doivent être retournés. Par défaut, c'est (ALL), retournant ainsi tous les enregistrements. DISTINCT et DISTINCTROW sont synonymes et indique que les doublons doivent être éliminés du résultat.

problème de requete

par Snipy » 14 août 2007, 23:05

Bonsoir tout le monde,

Je vois pour la première fois SELECT DISTINCT mais cela ne marche pas
L'erreur retournée est
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 '1' at line 1
    $requete="SELECT DISTINCT * FROM phpl_clmnt_cache WHERE ID_CHAMP='$champ' ORDER BY POINTS DESC, DIFF DESC, BUTSPOUR DESC , BUTSCONTRE ASC, NOM";
Merci d'avance de m'éclaircir.

Et si quelqu'un au passage peut me faire un bref rappel de l'utilisation de Distinct :)

Bonne soirée