problème de requete

Eléphant du PHP | 131 Messages

22 août 2006, 11:52

salut à tous,

J'ai un souci je n'arrive pas à retrouver l'erreur dans cette requête:

requête SQL:

Code : Tout sélectionner

SELECT id, description, lieu, DATE_FORMAT( dateevent, '%d-%m-%Y' ) AS dateevent FROM event WHERE ville = '$ville' ORDER BY id ASC LIMIT '.$_GET['debut '].', '.$nb_affichage_par_page' LIMIT 0 , 30
Voici le message d'erreur
#1064 - Erreur de syntaxe pr賠de ''.$_GET['debut'].','.$nb_affichage_par_page' LIMIT 0, 30' ࠬa ligne 1

Eléphant du PHP | 231 Messages

22 août 2006, 11:56

sql = 'SELECT id, description, lieu, DATE_FORMAT( dateevent, '%d-%m-%Y' ) AS dateevent
FROM event
WHERE ville = '$ville'
ORDER BY id ASC
LIMIT '.$_GET['debut '].', '.$nb_affichage_par_page'
LIMIT 0 , 30'; 
tu as bien ça ?

essaye :
sql = 'SELECT id, description, lieu, DATE_FORMAT( dateevent, '%d-%m-%Y' ) AS dateevent
FROM event
WHERE ville = '.$ville.'
ORDER BY id ASC
LIMIT '.$_GET["debut"].', '.$nb_affichage_par_page.'
LIMIT 0 , 30';

Eléphant du PHP | 131 Messages

22 août 2006, 12:01

Voici ce j'ai comme message

Il semble qu'il y ait une erreur dans votre requête SQL. Le message ci-bas peut vous aider à en trouver la cause.

ERROR: Ponctuation invalide @ 65
STR: -%
SQL:
sql = 'SELECT id, description, lieu, DATE_FORMAT( dateevent, '%d-%m-%Y' ) AS dateevent 
FROM event 
WHERE ville = '.$ville.' 
ORDER BY id ASC 
LIMIT '.$_GET["debut"].', '.$nb_affichage_par_page.' 
LIMIT 0 , 30'
requête SQL:
sql = 'SELECT id, description, lieu, DATE_FORMAT( dateevent, '%d-%m-%Y' ) AS dateevent FROM event WHERE ville = '.$ville.' ORDER BY id ASC LIMIT '.$_GET["debut"].', '.$nb_affichage_par_page.' LIMIT 0 , 30' 
MySQL a répondu:

#1064 - Erreur de syntaxe pr賠de 'sql = 'SELECT id, description, lieu, DATE_FORMAT( dateevent, '%d' ࠬa ligne 1

Eléphant du PHP | 231 Messages

22 août 2006, 12:30

sql = 'SELECT id, description, lieu, DATE_FORMAT( dateevent, \'%d-%m-%Y\' ) AS dateevent FROM event WHERE ville = '.$ville.' ORDER BY id ASC LIMIT '.$_GET["debut"].', '.$nb_affichage_par_page.' LIMIT 0 , 30'

Eléphant du PHP | 332 Messages

22 août 2006, 12:30

Code : Tout sélectionner

SELECT id, description, lieu, DATE_FORMAT( dateevent, '%d-%m-%Y' ) AS dateevent FROM event WHERE ville = '$ville' ORDER BY id ASC LIMIT '.$_GET['debut '].', '.$nb_affichage_par_page' LIMIT 0 , 30
Pourquoi tu as deux fois la clause LIMIT ?

Si tu veux utiliser des variables PHP dans une chaîne, il faut l'entourer de doubles guillemets et pas de simples guillemets.

$a = 'bonjour';
echo "La valeur est $a"; // Affiche La valeur est bonjour
echo 'La valeur est $a'; // Affiche La valeur est $a


Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 août 2006, 12:49

001cod10, dark_vidor pensez à utiliser les balises de mise en forme du code ou des requêtes :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 131 Messages

22 août 2006, 13:06

je n'ai pas mis deux limit. Ceci est apparu après l'exécution de la requete. Je viens de faire la correction des "" mais cela n'a rien donné. toujours même messade d'erreur

Eléphant du PHP | 131 Messages

24 août 2006, 14:22

voici mon code, pouvez vous m'aider à trouver la soulution message d'erreur sur la requete :Parse error: parse error in c:\easyphp1-8\www\dossier\event.php on line 148
<?	
function barre_navigation ($nb_total, 
        $nb_affichage_par_page, 
        $debut,
        $nb_liens_dans_la_barre) {

    $barre = '';
    
    // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
    if ($_SERVER['QUERY_STRING'] == "") {
        $query = $_SERVER['PHP_SELF'].'?debut=';
    }
    else {
        $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
        $nb_element = count ($tableau);
        if ($nb_element == 1) {
            $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
        }
        else {
            if ($tableau[0] == "") {
                $query = $_SERVER['PHP_SELF'].'?debut=';
            }
            else {
                $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
            }
        }
    }
    
    // on calcul le numéro de la page active
    $page_active = floor(($debut/$nb_affichage_par_page)+1);
    // on calcul le nombre de pages total que va prendre notre affichage
    $nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
    
    // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
    // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
    if ($nb_liens_dans_la_barre%2==0) {
        $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
        $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
    }
    else {
        $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
        $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
    }
    
    if ($cpt_deb1 <= 1) {
        $cpt_deb = 1;
        $cpt_fin = $nb_liens_dans_la_barre;
    }
    elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
        $cpt_deb = $cpt_deb1;
        $cpt_fin = $cpt_fin1;
    }
    else {
        $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
        $cpt_fin = $nb_pages_total;
    }

    if ($nb_pages_total <= $nb_liens_dans_la_barre) {
        $cpt_deb=1;
        $cpt_fin=$nb_pages_total;
    }
    
    // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
    if ($cpt_deb != 1) {
        $cible = $query.(0);
        $lien = '<A HREF="'.$cible.'"><<</A>&nbsp;&nbsp;';
    }
    else {
        $lien='';
    }
    $barre .= $lien;

    // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
    for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
        if ($cpt == $page_active) {
            if ($cpt == $nb_pages_total) {
                $barre .= $cpt;
            }
            else {
                $barre .= $cpt.'&nbsp;-&nbsp;';
            }
        }
        else {
            if ($cpt == $cpt_fin) {
                $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
                $barre .= "'>".$cpt."</A>";
            }
            else {
                
                $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
                $barre .= "'>".$cpt."</A>&nbsp;-&nbsp;";
            }
        }
    }
    
    $fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
    if (($nb_total % $nb_affichage_par_page) == 0) {
        $fin = $fin - $nb_affichage_par_page;
    }

        // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
    if ($cpt_fin != $nb_pages_total) {
        $cible = $query.$fin;
        $lien = '&nbsp;&nbsp;<A HREF="'.$cible.'">>></A>';
    }
    else {
        $lien='';
    }
    $barre .= $lien;

    return $barre;    
}
$BD_serveur     = "localhost";
$BD_utilisateur = "root";
$BD_motDePasse  = "";
$BD_base        = "base";

$description  = isset($_POST["description"]) ? $_POST["description"] : ""; 
$typevent  = isset($_POST["typevent"]) ? $_POST["typevent"] : ""; 
$ville  = isset($_POST["ville"]) ? $_POST["ville"] : ""; 
$date  = "";

 @mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
        or die("Impossible de se connecter au serveur de bases de données.");
    @mysql_select_db($BD_base)
        or die("Impossible de se connecter à la base de données.");


// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql  = 'SELECT count(*) FROM event';

// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);

// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
    echo 'Aucune réponse trouvée';
}
else {
   
    
    // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
    if (!isset($_GET['debut'])) $_GET['debut'] = 0;
    
    $nb_affichage_par_page = 3;
    
    // Préparation de la requête avec le LIMIT
    

$sql = "SELECT id,description,lieu,ville,prix,DATE_FORMAT(date, '%d-%m-%Y') as dateevent FROM event WHERE ville='$ville' AND ORDER BY ville ASC 
LIMIT ".$_GET['debut '].", ".$nb_affichage_par_page";

//ORDER BY id ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
if($req) {
echo '<table border="0" bgcolor="">'."\n";
// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($row = mysql_fetch_array($req))  {
	 
   
echo '<tr>';
echo '<td colspan="3"><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+3"><strong>Evènements à :</font><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+3"> '.$ville.'</strong></font></td>';
echo'</tr>';

echo '<tr>';
echo '<td></td>';
echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Description :</font></b></td>'; echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+2"><strong>'.$row["description"].'</strong></font></td>';
	echo'</tr>';
	echo '<tr>';
	echo '<td></td>';
	echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Lieu:    </font></b></td>'; echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+1">'.$row["lieu"].'</font></td>';	
	echo'</tr>';
		echo '<tr>';
		echo' <td></td>';
		echo '<td></td>';
	echo '</tr>';
	echo '<tr>';
		echo '<td></td>';
		echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Date :</font></b></td>'; echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+1">'.$row["dateevent"].'</font></td>';
	echo '</tr>';
	echo '<tr>';
		echo '<td></td>';
		echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Entrée:</font></b></td>'; echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+1">'.$row["prix"].' Euros</font></td>';
	echo '<td></td>';
 echo '</tr>';
}	   
	echo '</table>'."\n";
}
 
    // on libère l'espace mémoire alloué pour cette requête 
    mysql_free_result ($req); 
	 
    echo '</table><br />';
 
    // on affiche enfin notre barre
    echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 2).'</span>';
	 
} 
else
{
echo"pas d'évènement";
}	
}

// on libère l'espace mémoire alloué pour cette requête 
mysql_free_result ($resultat); 

// on ferme la connexion à la base de données. 
mysql_close ();
?>
Modifié en dernier par 001cod10 le 24 août 2006, 20:42, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 août 2006, 18:28

Guillemet en trop à la fin de ça : (ça se voit bien avec la coloration syntaxique :roll:)
$sql = "SELECT id,description,lieu,ville,prix,DATE_FORMAT(date, '%d-%m-%Y') as dateevent FROM event WHERE ville='$ville' AND ORDER BY ville ASC 
LIMIT ".$_GET['debut '].", ".$nb_affichage_par_page"; 
Un message ayant pour sujet "problème de requête" se poste dans le forum "SQL/BDD"

De plus, tu devrais lire ce sujet stp, pour savoir quoi donner lorsqu'il y a une erreur MySQL (ce qui était le cas au début)

=> http://www.phpfrance.com/forums/voir_sujet-19378.php

Et il faudrait aussi utiliser le bouton "Prévisualiser", afin de se rendre compte quand il y a des lignes trop longues qui déforment le message et donc insérer des sauts de ligne

Merci :merci:

Eléphant du PHP | 131 Messages

24 août 2006, 19:49

j'ai corrigé la requete comme ceci

Code : Tout sélectionner

$sql = "SELECT id,description,lieu,ville,prix,DATE_FORMAT(dateevent, '%d-%m-%Y') as dateevent FROM event WHERE ville='".$ville."' ORDER BY id ASC LIMIT ".$_GET["debut"].", ".$nb_affichage_par_page; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
Voici ce que cela me donne message

Code : Tout sélectionner

SELECT id,description,lieu,ville,prix,DATE_FORMAT(dateevent, '%d-%m-%Y') as dateevent FROM event WHERE ville='' ORDER BY id ASC LIMIT 0, 3

Eléphant du PHP | 131 Messages

24 août 2006, 20:39

Le problème de la requete est réglé. j'aimerai afficher mes enregistrements par page. La première page s'affiche correctement mais quand je clique sur la page 2 rien ne s'affiche. je ne vois pas ce qui peut etre la cause