Affichage page par page ?

Eléphant du PHP | 226 Messages

12 févr. 2008, 10:43

Bonjour,
J'essaye d'appliquer le tuto du même nom issu de PHP débutant. Mais malgré la qualité pédagogique, rien n'y fait. Rien ne se passe (le serveur ne me renvoie même pas d'erreur) Pourtant, il doit bien y en avoir puisque je n'ai aucun affichage. Le code:
//Système d'affichage page par page pour les résultats du choix des menus
// Nbre de résultats par page
$nombre = 15;

// Fonction qui vérifie la validité de $limite, variable servant à l'argument 'LIMIT' de la requête
function verifLimite($limite,$total,$nombre) {
if(is_numeric($limite)) {
// si $limite est entre 0 et $total, $limite est ok
// sinon $limite n'est pas valide.
if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
// j'assigne 1 à $valide si $limite est entre 0 et $max
$valide = 1;
}
else {
// sinon j'assigne 0 à $valide
$valide = 0;
}
}
else {
// si $limite n'est pas numérique j'assigne 0 à $valide
$valide = 0;
}
// je renvois $valide
return $valide;
}

if (!$limite){
$limite = 0; // si on arrive sur la page pour la première fois, on met limite à 0
}

// On récupère le nom de la page qui sera utilisée dans les liens.
$path_parts = pathinfo($PHP_SELF);
$page = $path_parts["basename"];

// requête qui sélectionne le total des enregistrements à afficher pour $BassinEmploi ($BassinEmploi est une valeur provenant d'une liste déroulante)
$select = 'SELECT count(IDZG) FROM zonegeographique WHERE BassinEmploi=\''.$BassinEmploi.'\';';
$requete = mysql_query($select) or die('Erreur SQL! Nous avons un problème avec la base de données. Il sera résolu dans peu de temps <br>'.$select.'<br>'.mysql_error());
$result = mysql_fetch_row($requete);
$total = $result[0];

// emploi de la fonction verifLimite
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à Zéro
if(!$verifLimite) {
$limite = 0;
}

//Affichage limité du choix des menus
//Pour le bassin d'emploi
//requête
$select = 'SELECT IDZG, Commune, CodePostal, BassinEmploi FROM zonegeographique WHERE BassinEmploi=\''.$BassinEmploi.'LIMIT '.$limite.','.$nombre.'\';';
$requete = mysql_query($select) or die('Erreur SQL! Nous avons un problème avec la base de données. Il sera résolu dans peu de temps <br>'.$select.'<br>'.mysql_error());

//affichage des résultats de la requête avec le lien pointant sur la pop up pour modifier les données
if($requete = mysql_query($select)){
// si on a récupéré un resultat on l'affiche dans un boucle
if($total) {
while($data = mysql_fetch_array($requete)) {
echo'<br><a href=\'javascript:popup("formZg.php?IdZg='.$data['IDZG'].'")\'>'.$data['Commune'].' ('.$data['CodePostal'].') '.$data['BassinEmploi'].'</a>\'';
} // fin de la boucle
} // fin de la condition de $total
} // fin de la condition requete
else {
echo 'Désolé, Pas d\'enregistrements dans cette table...';
}
Merci de m'aider à y voir clair...
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

d0m
Mammouth du PHP | 1141 Messages

12 févr. 2008, 11:12

Si rien du tout n'est affiché c'est soit que :
- il y a un gros problème de syntaxe
- aucune instruction d'affichage est effectuée

Pour vérifier met un simple
echo 'ok'
par exemple à la fin de ton code, pas dans une condition ou une boucle.

Si ça marche alors tu es dans le 2ème cas :
Or tu n'affiches qu'à 2 endroits :
if($requete = mysql_query($select)){
// si on a récupéré un resultat on l'affiche dans un boucle
  if($total) { 
    while($data = mysql_fetch_array($requete)) {
//ici
      echo'<br><a href=\'javascript:popup("formZg.php?IdZg='.$data['IDZG'].'")\'>'.$data['Commune'].' ('.$data['CodePostal'].') '.$data['BassinEmploi'].'</a>\'';
    } // fin de la boucle
  } // fin de la condition de $total
} // fin de la condition requete
else {
//et ici
  echo 'Désolé, Pas d\'enregistrements dans cette table...';
}
Le problème vient de ce résultat :
if($requete = mysql_query($select))
qui n'est pas faux si aucune ligne n'est retourné, il est faux si la requête a échouée ce qui est différent!
Pour tester le nombre de lignes retourné il y a mysql_num_rows

PS : pense à incrémenter ton code c'est beaucoup plus lisible pour toi comme pour les autres.

Eléphant du PHP | 226 Messages

12 févr. 2008, 18:50

Bonsoir,

J'ai passé quelque tests d'affichage sur les requêtes. La première est pleinement opérationnelle:
// requête qui sélectionne le total des enregistrements à afficher pour $BassinEmploi
$select = 'SELECT count(IDZG) FROM zonegeographique WHERE BassinEmploi=\''.$BassinEmploi.'\';';
$result = mysql_query($select) or die ('Erreur : '.mysql_error());
$row = mysql_fetch_row($result);
$total = $row[0];
echo $total;
$total m'affiche bien le nombre de résultats en fonction de $BassinEmploi. En revanche, c'est la requête d'affichage limité qui ne vas pas du tout.
$sql = 'SELECT IDZG, Commune, CodePostal, BassinEmploi FROM zonegeographique WHERE BassinEmploi=\''.$BassinEmploi.'LIMIT '.$limite.','.$nombre.'\';';
$result = mysql_query($sql) or die('Erreur SQL! Impossible de communiquer avec la base de données.<br>'.$sql.'<br>'.mysql_error());
Soit c'est la fonction 'limit' qui ne vas pas, soit c'est la requête. Mais je ne vois vraiment pas où peut se trouver l'erreur...
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

d0m
Mammouth du PHP | 1141 Messages

13 févr. 2008, 09:50

l'exécution de la requête te renvoie elle un message d'erreur?

Eléphant du PHP | 226 Messages

13 févr. 2008, 10:23

Bonjour,

Non, c'est ça que je ne comprends pas, je n'ai rien venant du serveur...
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

d0m
Mammouth du PHP | 1141 Messages

13 févr. 2008, 10:26

et en testant ta requête directement dans phpMyadmin (ou autre) y a t il des résultats?

Eléphant du PHP | 226 Messages

13 févr. 2008, 10:58

Petite évolution : il semblerait qu'il y ait eu une erreur de syntaxe dans la seconde requête:
$sql = 'SELECT IDZG, Commune, CodePostal, BassinEmploi FROM zonegeographique WHERE BassinEmploi=\''.$BassinEmploi.'\' LIMIT '.$limite.','.$nombre.'\';';
Il manquait un \ après $BassinEmploi. Ce qui fait réagir le serveur maintenant dès l'affichage de la page
Erreur SQL! Impossible de communiquer avec la base de données.
SELECT IDZG, Commune, CodePostal, BassinEmploi FROM zonegeographique WHERE BassinEmploi='' LIMIT 0,15';
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 ''' at line 1
Si je choisi en second temps une valeur dans la liste déroulante:
Erreur SQL! Impossible de communiquer avec la base de données.
SELECT IDZG, Commune, CodePostal, BassinEmploi FROM zonegeographique WHERE BassinEmploi='St Florent' LIMIT 0,15';
You have an error in your SQL syntax;...
merci,
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

ViPHP
ViPHP | 4039 Messages

13 févr. 2008, 11:26

Code : Tout sélectionner

SELECT IDZG, Commune, CodePostal, BassinEmploi FROM zonegeographique WHERE BassinEmploi='' LIMIT 0,15'; SELECT IDZG, Commune, CodePostal, BassinEmploi FROM zonegeographique WHERE BassinEmploi='St Florent' LIMIT 0,15';
L'art de résoudre les erreurs SQL, c'est de lire les messages.
Rien ne te heurte dans ces requêtes ?

Moi, il me semble que dans la première, il manque quelque chôse, et que dans les deux y'a comme qui dirait un apostrophe en trop quelque part..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.