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

problème de requete+affichage de page

par 001cod10 » 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

problème de requete

par 001cod10 » 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

par ouckileou » 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:

probleme de requete

par 001cod10 » 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 ();
?>

probleme de requete

par 001cod10 » 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

par Truc » 22 août 2006, 12:49

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

par Henri » 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

par dark_vidor » 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'

probleme de requete

par 001cod10 » 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

par dark_vidor » 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';

problème de requete

par 001cod10 » 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