PHP: fonction limit ne marche pas

Résolu/Fermé
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - Modifié le 22 mai 2023 à 17:22
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 1 juin 2023 à 14:23

Bonjour,
J'ai un souci avec la fonction limit car je veux limiter l'affichage des billets de banque a 10 et avoir les boutons Suivant comme sur mon autre site sur la recherche des prénoms basques [http://abarka.free.fr/index.php?page=Liste_PrenomsF&lang=Fr&limite=0].
Je veux la même chose avec les billets de banque [http://monnaiepapier.free.fr/Planche.php?pays=Atlantic+Forest%5D.
Voici ma fonction limit mais il y a des choses qui m'échappent. J'ai été gravement malade en mais 2018 et reprends peu à peu depuis 3/4 mois.

// =================================================================================
// fonction qui affiche boutons Précédent  Suivant
// =================================================================================

function displayNextPreviousButtons($limite,$total,$nb,$pays) 
{ 
	global $pays;   // On accède aux variables globales définies dans index.php
	// je ne comprends pas ce global
	$limiteSuivante = $limite + $nb;
	$limitePrecedente = $limite - $nb;
	echo  "<table align='center'><tr>\n";
	if($limite != 0) 
	{
        echo  "<td valign='top'>\n";
		echo  "<form action=\"index.php\" method=method=\"get\">\n";
        echo  "<input type='submit' value='Précédent'>\n";   // affiche le bouton Précédent si la valeur limit est atteinte, fin de la sélection
		echo  "<input type='hidden' value=".$pays." name='pays'>\n";
		//echo  "<input type='hidden' value=".$lang." name='lang'>\n";		// le site n'a pas de langues autre que le français
		echo  "<input type='hidden' value=".$limitePrecedente." name='limite'>\n";
        echo  "</form>\n";
        echo  "</td>\n";
	}
	if($limiteSuivante < $total) 
	{
        echo  "<td valign='top'>\n";
		echo  "<form action=\"index.php\" method=method=\"get\">\n";
        echo  "<input type='submit' value='Suivant'>\n";   // affiche le bouton Suivant si plus que la valeur limit
		echo  "<input type='hidden' value=".$pays." name='pays'>\n";
		//echo  "<input type='hidden' value=".$lang." name='lang'>\n";		// le site n'a pas de langues autre que le français
		echo  "<input type='hidden' value=".$limiteSuivante." name='limite'>\n";
        echo  "</form>\n";
        echo  "</td>\n";
            
	}
	echo  "</tr></table>\n";
}
?>

Si vous voyez quelque chose d'anormal (j'ai beau chercher pourtant !) vous seriez très sympa de me corriger, en commentant si possible.
J'ai obtenu et adapté ce code pour abarka il y a plus de 10 ans..... alors bien sur j'ai pas beaucoup de souvenirs !
Si vous avez des questions ou voulez d'autres bout de code, je me tiens à votre entière disposition.
Merci infiniment d'avance !


Windows / Firefox 113.0


A voir également:

17 réponses

jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
22 mai 2023 à 17:59

Bonjour,

J'ai déplacé ta question dans le bon forum "PHP" ...

Ensuite, merci d'expliquer le comportement obtenu ... et  en quoi ça ne correspond pas à tes attentes !

A noter que ce bout de code ne sert qu'à afficher les boutons suivant et précédent .. rien de plus...

Pour que ça ait un impact sur ton site.. il faut ensuite que les données transmises par tes formulaires soient prises en compte au niveau de ta requête sql...

Et puis.. tes formulaires pointes vers le fichier index.php au niveau des "actions"... Sauf que toi, ta page se nomme Planche.php ...  c'est normal ?


0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
22 mai 2023 à 20:58

Salut jordane45,
Merci pour le déplacement. Je n'ai pas reçu d'alerte pour ta réponse non plus !.
"ce bout de code ne sert qu'à afficher les boutons suivant et précédent .. rien de plus": ah! tu m'étonne que ça marche pas !
En allant sur cette page, j'ai tous les billets pour ce pays qui s'affichent alors que je voulais limiter à 10 puis utiliser les boutons Suivant pour afficher les 10 suivants etc...

Pourtant sur mon site abarka, les prénoms s'affichent par 20, suivant, 20, suivant, 20, etc... Et je n'ai que ça.
J'utilise des includes "fonctions.php" qui contient les infos de connexion a la base + limit.

J'ai mis ce script au début de la page "planche" qui génère autant de lignes qu'il y a de billets. Donc le tri est déjà fait, pas besoin d'interroger la table en entier, seul la sélection, ici Atlantic Forest (pays imaginaire) dans le lien ci-dessus.
Cdlt !


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
22 mai 2023 à 21:12

Il nous manque le code de ta requête SQL pour y ajouter les offset et limites suite à l'appui sur les boutons...

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 23 mai 2023 à 08:32

Salut jordane et merci beaucoup pour tes éclaircissements !
Dans le doute je met le code complet de la requête une fois cliqué sur un pays:

<?php
// On selectionne seulement la ligne qui correspond au pays 

$sql = "select drapeau, nomcomplet, capitale, monnaie, histoire FROM flag WHERE pays='".$pays."'";
$result = mysql_query($sql,$cnx)  or die ('Erreur : '.mysql_error() ."<br> Requete : ".$sql);

$num_rows = mysql_num_rows($result);
if($num_rows == 0){
  echo "<br> ! Aucun article n'a été trouvé pour ce pays !";
}else{
 //On récupère la premiere ligne de la requete:
 $arrFlag = mysql_fetch_array($result);

 //on initialise les variables avec les données issues de la requête:
 $drapeau = $arrFlag['drapeau'];
 $nomcomplet = $arrFlag['nomcomplet'];
 $capitale = $arrFlag['capitale'];
 $monnaie = $arrFlag['monnaie'];
 $histoire = $arrFlag['histoire'];

  
 // On affiche que la première ligne pour la planche d'un pays, drapeau, capitale, monnaie et histoire de la monnaie 
 echo"<table ID='Intro'>";
 echo "<tr>";
 echo "<td width='10%' bgcolor='#cccccc'><img src='$drapeau' /></td>";
 echo "<td class='pays' width='30%'><strong>$nomcomplet</strong><br />capitale: <strong>$capitale</strong><br />monnaie : <strong>$monnaie</strong></td>";
 echo "<td class='money' width='60%'><p>$histoire</p></td>";
 echo "</tr>";
 echo"</table>";
 // ce premier tableau ne se répète pas
}

// On selectionne seulement la ligne qui correspond au pays 

$select = "SELECT * FROM billets WHERE pays='$pays' ORDER BY chrono ASC";
$result = mysql_query($select,$cnx) or die ('Erreur : '.mysql_error() ."<br> Requete : ".$sql);
$nb_result = mysql_num_rows($result);
if($nb_result==0){
   echo "<br> ! Aucun article n'a été trouvée pour ce pays !";
}else{
// on demande ici que les lignes qui se répètent tant qu'il y a des billets pour ce pays via la boucle pour tableau "while"
 echo"<table ID='planche'>";
 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
   $visuel_recto = $row['visuel_recto'];
   $valeur = $row['valeur'];
   $chrono = $row['chrono'];
   $pick = $row['pick'];
   $dimensions = $row['dimensions'];
   $recto = $row['recto'];
   $visuel_verso = $row['visuel_verso'];
   $verso= $row['verso'];
// on affiche ici que les lignes qui se répètent tant qu'il y a des billets pour ce pays via la boucle pour tableau "while"
  echo "<tr>";
  echo "<td><center><img src='$visuel_recto' alt='$valeur' title='$valeur'></img></center></td>";
  echo "<td><center><img src='$visuel_verso' alt='$valeur' title='$valeur'></img></center></td>";
  echo "</tr>";
  echo "<tr class='ligne'>";
  echo "<td><p class='billet'>$valeur - P$pick<br>$recto</p></td>";
  echo "<td><p class='billet'>Dimensions: $dimensions<br>$verso</p></td>";
  echo "</tr>";
  }
 echo"</table>";
}
mysql_close();
?>

J'espère que je ne suis pas confus.

PS:
=> J'ai été obligé d'ajouter le champ "chrono" car le N° Pick du billet ne s'affichait pas dans l'ordre ASC. Mais ça m'arrange car certains n'ont pas de N° (billets fantaisies, édition privée comme Beauval (France Beauval).

=> je n'avais pas compris que le premier script servait uniquement a afficher les boutons Suivant et Précédent. J'aurais du le savoir pourtant ! c'est dire si je manque de concentration.... en ce moment !
Cdlt !


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
23 mai 2023 à 09:39

Et donc.. il manque bien, dans tes requêtes SQL la prise en compte de l'offset et de la limite

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 23 mai 2023 à 10:16

Salut jordane45,
Ça y est ! je viens de trouver le fameux script qui limite l'affichage d'une liste. Je me disais bien qu'il me manquait la valeur de la limite. J'ai consulté le site abarka, page par page pour voir où se trouvait ce fameux script limitant l'affiche.
Mais je suis perdu quand même. Je le met ci-dessous mais j'ai trop peur qu'il y ait des infos qu'on pourrait pirater, nom des variable qui indiquerait les champs des tables etc... Je le met quand même, tant pis !
 

==================================================================================
	Script pour limiter le nombre d'affichage (ligne d'un tableau de billet)
		Correspond aux prénoms basques
==================================================================================

<?php  
// Affichage de la liste par 10 pays par pages
// includes du fichier fonctions séparé pour les vérifs des limites et Nb de pages

require 'fonctions.php'; //infos de connexion a la base

// initialisation des variables 
$nombre = 10;  // on va afficher 10 résultats par page.

// si la limite a été passée par un [lien] c'est la ligne du billet que je veux, on la prend en compte. 
$limite = (isset($_GET["limite"])) ? $_GET["limite"] : 0;

// connection à la DB
$link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table

// requête SQL qui calcule la limite lorsquelle lettre (initiale) est spécifiée 
// c'est le pays qui doit etre spécifié
// En fait on calcule à quelle position se trouve le 1er enregistrement commençant par [cette lettre] ce pays

// if (!empty($_GET["lettre"])) 
if (!empty($_GET["pays"]))
{
	//$lettre = $_GET["lettre"];
	$pays = $_GET["pays"];
	// on compte tous les enregistrements qui se trouvent avant la [lettre] pays et c'est tout !
	// $select = 'SELECT count(*) FROM prenomsfeminins WHERE lettre <"'.$lettre.'"';
	$select = 'SELECT count(*) FROM monnaie ? WHERE pays <"'.$pays.'"';
	// $result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
	$result = mysql_query($select,$pays)  or die ('Erreur : '.mysql_error() );
	$row = mysql_fetch_row($result);
	$limite = $row[0];
}

// requête SQL qui compte le nombre total d'enregistrements dans la table.C'est le pays qu'il faudrait compter ?
//$select = 'SELECT count(*) FROM prenomsfeminins';
$select = 'SELECT count(*) FROM monnaie';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];

// vérifier la validité de notre variable $limite;
if ($limite < 0) $limite = 0;
if ($limite > $total) $limite = $total;

// requête SQL qui ne prend que le nombre d'enregistrement necessaire à l'affichage.
//$req = 'select * FROM prenomsfeminins ORDER BY Prenom ASC limit '.$limite.','.$nombre;
$req = 'select * FROM monnaie ORDER BY pays ASC limit '.$limite.','.$nombre;
$result = mysql_query($req) or die ('Erreur : '.mysql_error() );

// si on a récupéré un resultat on l'affiche.
//$lettres = "ABDEFGHIJKLMNOPRSTUVXYZ"; // ça ne m'interesse pas, c'est le bouton pays. ici c'est un lien alphabétique (initiales)

// ici il faudrait sans doutes les echo actuels pour chaque lique ligne de billet (déjà existant)
//if ($total) 
//{
//	echo "<table bgcolor='#FFFFFF' cellspacing='0' cellpadding='0' align='center'>\n";	
//	echo "<tr bgcolor='#EFEFEF' text-align='center' padding='3px'>";
	// première ligne on affiche l'alphabet/lien
//	for ($i=0; $i< strlen($lettres); $i++)
//	{
		// On récupère la lettre à la position $i dans $lettres : qd $i vaut 0 on obtient "A", $i vaut 1 on obtient "B" etc ...
//		$lettre = substr($lettres,$i,1);
//		echo "<td>";
		// Construit le lien vers la page index.php en lui passant en paramètre : la page, la langue et la lettre
//		printf("<a href=\"index.php?page=%s&lang=%s&lettre=%s\">%s</a>",$page,$lang,$lettre,$lettre);
//		echo "</td>";	
//		if ($i != strlen($lettres)-1)
//		{
//			echo "<td> | ";
//			echo "</td>";
//		}	
//	}	
//	echo "</table>";
//	echo "<br /><br />"; //espaces pour éclaircir l'alphabet de la liste
//}

//if ($total) 
//{	
	// on affiche un autre tableau avec la liste des prénoms
//	echo "<table width='50%' bgcolor='#FFFFFF' cellspacing='0' cellpadding='0' align='center'>\n";

	// lecture et affichage des résultats  
//    while($row = mysql_fetch_array($result)) 
//	{
		echo "<tr>";
//		echo "<td bgcolor='#FFFFFF' text-align='left'>"; 
		// Construit le lien vers la page index.php en lui passant en paramètre : la page, la langue et l'ID
//		printf("<a href=\"index.php?page=%s&lang=%s&id=%s\">%s</a>","Fiche_Prenom",$lang,$row['ID'],$row['Prenom']);
//		echo "</td>";
//		echo "</tr>\n";
//	}   
//	echo "</table>\n";
    // fin du tableau.
//}
//else 
//{
//	echo "Pas d\'origine pour ce prénom"; // ? il y a forcément une origine sur un prénom
//}

// on libère le résultat | mais je voudrais les lignes de tableau par pays, pas de liens !
mysql_free_result($result);

 si le nombre d'enregistrement à afficher est plus grand que $nombre 
if ($total > $nombre) {
    affichePages($nombre,$page,$total);  // affichage des liens vers les pages| tableau billet d'un pays, pas de lien comme prénom
    displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
}
mysql_close();
?> 

J'espère que c'est assez clair, pas pour moi, mais ce script c'est celui des prénoms basques, qui fonctionne.
Cdlt !


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
23 mai 2023 à 10:27

Regarde tes lignes 13 , 16 et 53

0

Tu as effectivement des failles de sécurité dans ton code qui pourraient être exploitées pour faire des injections sql : https://www.php.net/manual/fr/security.database.sql-injection.php

Puisque tu utilises l'ancienne API Mysql (les fonctions mysql_*), tu pourrais appliquer la fonction mysql_real_escape_string sur les variables utilisées dans les requêtes sql pour échapper les caractères réservés et éviter les injections sql.

0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734 > tipiak
23 mai 2023 à 11:10

ce n'est pas la question ....

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520 > tipiak
23 mai 2023 à 13:45

tipiak: merci pour ta réflexion, mais attendons un peu que le reste marche.
Je me doute bien qu'il y a des maladresses d'autant plus que je ne maitrise pas du tout la sécurité des codes, php ou autres.
Je regarderai la doc de ce sujet plus tard.
Merci beaucoup en tous cas !

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520 > tipiak
24 mai 2023 à 16:08

Salut tipiak (petits en basque dans le texte),
C'est effrayant ce que j'ai lu dans ton lien (j'avais déjà vu ce genre d'explications, le site du zéro notamment), qui a bien changé depuis. Il est devenu illisible aujourd'hui et dieu sait s'il m'a servi pour apprendre le PHP, en plus du bouquin.

Ici tu me propose un truc pour déclarer les variable mais je ne sautais pas le faire. Donc j'abandonne en espérant qu'il ne soit pas piraté.
"mysql_real_escape_string" : c'est la concaténation ça ?
Je vais modifier le script en supprimant tous les commentaires que j'y ai mis pour vous autres, afin de voir les différences avec celui que je veux faire.

Seulement je ne sais pas s'il est préférable de l'ajouter dans le fichier fonctions ou si je l'ajoute dans le fichier qui affiche les billets.
► Lequel sera le plus efficace ? Pour l’exécution et la maintenance du code.
Merci beaucoup quand même.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
23 mai 2023 à 13:42

Salut jordane45,
Voici ce que j'ai trouvé pour utiliser limit en php (réponse de christouphe). Mais ça me perturbe encore plus. Lignes 3 a 8.
Qu'est-ce quelles ont les lignes 13 et 16 ?
 

$req = 'select * FROM monnaie
monnaie c'est la table, c'est normal !
Cdlt !

0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
23 mai 2023 à 14:07

Lignes 13 et 16 ... récupération des variables à utiliser pour savoir quelles lignes de ta bdd tu veux afficher

// initialisation des variables 
$nombre = 10;  // on va afficher 10 résultats par page.

// si la limite a été passée par un [lien] c'est la ligne du billet que je veux, on la prend en compte. 
$limite = (isset($_GET["limite"])) ? $_GET["limite"] : 0;

Ligne 53 : exemple d'utilisation de ces variables dans une requête SQL

$req = 'select * FROM monnaie ORDER BY pays ASC limit '.$limite.','.$nombre;
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520 > jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025
23 mai 2023 à 17:01

Il manque pas une quote a la fin de $nombre; ?  '.$nombre';

Cdlt !
0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734 > txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024
23 mai 2023 à 18:32

Non.

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520 > jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025
23 mai 2023 à 18:45

Merci beaucoup jordane45 mais j'abandonne ! je reprendrai peut-être plus tard, quand je serais plus serein.
Je ne clôture pas encore.
Merci encore pour ta patience avec moi.

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 24 mai 2023 à 08:42

Salut à tous,
Au fait, le script que j’essaie de mettre en place, sur quelle page dois-je le mettre ?

► Dans la page "fonctions" a la suite des autres (infos de connexion BDD et affichage boutons), ou plutôt dans la page "planche", celle qui liste les billets ?

Je parle pour une question de commodité et suivi/évolution...
Perso, je pense l'ajouter a fonctions, ce sera plus facile pour l'évolution mais j'en suis pas sur du tout en fait !
Cdlt !


0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 25 mai 2023 à 11:15

Salut à tous,
Bon je reviens a la correction du script ci-dessous.
 

<?php  
// Affichage de la liste par 10 pays par pages
// includes du fichier fonctions séparé pour les vérifs des limites et Nb de pages

require 'fonctions.php'; //infos de connexion a la base et affichage des boutons Suivant et Précédent

// initialisation des variables 
$nombre = 10;  // on va afficher 10 résultats par page.

// si la limite a été passée par un lien, on la prend en compte. 
$limite = (isset($_GET["limite"])) ? $_GET["limite"] : 0;

// connection à la DB
$link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table

// requête SQL qui calcule la limite lorsque le pays est spécifié 
// En fait on calcule à quelle position se trouve le 1er enregistrement commençant par ce pays
if (!empty($_GET["pays"]))
{
	$pays = $_GET["pays"];  // on compte tous les enregistrements qui se trouvent avant le pays et c'est tout !
	$select = 'SELECT count(*) FROM monnaie ? WHERE pays <"'.$pays.'"';  // on compte les billets d'un pays
	$result = mysql_query($select,$pays)  or die ('Erreur : '.mysql_error() );
	$row = mysql_fetch_row($result);
	$limite = $row[0];
}

// requête SQL qui compte le nombre total d'enregistrements dans la table. C'est le pays qu'il faudrait compter ?
$select = 'SELECT count(*) FROM monnaie';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];

// vérifier la validité de notre variable $limite;
if ($limite < 0) $limite = 0;
if ($limite > $total) $limite = $total;

// requête SQL qui ne prend que le nombre d'enregistrement necessaire à l'affichage.
$req = 'select * FROM monnaie ORDER BY pays ASC limit '.$limite.','.$nombre;
$result = mysql_query($req) or die ('Erreur : '.mysql_error() );

// si on a récupéré un resultat on l'affiche.
//$lettres = "ABDEFGHIJKLMNOPRSTUVXYZ"; // ça ne m'interesse pas, c'est le bouton pays. ici c'est un lien alphabétique (initiales)

// ici il faudrait sans doutes les echo actuels pour chaque lique de billet (déjà existant planche.php)
//if ($total) 
//{
//	echo "<table bgcolor='#FFFFFF' cellspacing='0' cellpadding='0' align='center'>\n";	
//	echo "<tr bgcolor='#EFEFEF' text-align='center' padding='3px'>";
	// première ligne on affiche l'alphabet/lien
//	for ($i=0; $i< strlen($lettres); $i++)
//	{
		// On récupère la lettre à la position $i dans $lettres : qd $i vaut 0 on obtient "A", $i vaut 1 on obtient "B" etc ...
//		$lettre = substr($lettres,$i,1);
//		echo "<td>";
		// Construit le lien vers la page index.php en lui passant en paramètre : la page, la langue et la lettre
//		printf("<a href=\"index.php?page=%s&lang=%s&lettre=%s\">%s</a>",$page,$lang,$lettre,$lettre);
//		echo "</td>";	
//		if ($i != strlen($lettres)-1)
//		{
//			echo "<td> | ";
//			echo "</td>";
//		}	
//	}	
//	echo "</table>";
//	echo "<br /><br />"; //espaces pour éclaircir l'alphabet de la liste
//}

//if ($total) 
//{	
	// on affiche un autre tableau avec la liste des prénoms
//	echo "<table width='50%' bgcolor='#FFFFFF' cellspacing='0' cellpadding='0' align='center'>\n";

	// lecture et affichage des résultats  
//    while($row = mysql_fetch_array($result)) 
//	{
//     echo "<tr>";
//		echo "<td bgcolor='#FFFFFF' text-align='left'>"; 
		// Construit le lien vers la page index.php en lui passant en paramètre : la page, la langue et l'ID
//		printf("<a href=\"index.php?page=%s&lang=%s&id=%s\">%s</a>","Fiche_Prenom",$lang,$row['ID'],$row['Prenom']);
//		echo "</td>";
//		echo "</tr>\n";
//	}   
//	echo "</table>\n";
    // fin du tableau.
//}
//else 
//{
//	echo "Pas d\'origine pour ce prénom"; // ? il y a forcément une origine sur un prénom
//}

// on libère le résultat | mais je voudrais les lignes de tableau par pays, pas de liens !
mysql_free_result($result);

 si le nombre d'enregistrement à afficher est plus grand que $nombre 
if ($total > $nombre) {
    affichePages($nombre,$page,$total);  // affichage des liens vers les pages tableau billet d\'un pays, pas de lien comme prénom
    displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
}
mysql_close();
?> 

D'abord dans les lignes 97 et 98, les commentaires ne sont pas en orange comme le reste ici en rouge ?). Je ne comprends pas pourquoi. Même chose si je déposent en début et au dessus des instructions.
Ce serait sympa de m'expliquer ce phénomène.

Ensuite, ce serait sympa aussi de parcourir ce code et m'indiquer les boulettes que j'ai sans doutes faites mais que je ne vois pas (à mon age c'est sans doutes un peu normal) !!!

Commençons par cela, ce sera déjà une bonne avancée mais faut que je comprenne ce que je fais, sinon ça n'a aucun intérêt !
Merci beaucoup d'avance de m'éclairer, je commence à paniquer !


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
25 mai 2023 à 11:35

ligne 95 .. tu n'as pas mis ton commentaire en commentaire .....

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520 > jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025
25 mai 2023 à 13:31

Oooh ! merci, je ne l'aurais sans doute jamais vu. Je voyais bien qu'il y avait problème pourtant ! Merci encore !

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 27 mai 2023 à 14:53

Salut à tous,
J'ai aggravé mon problème, maintenant j'ai un message d'erreur (dans l'affichage) et quelque soit la page d'ailleurs qui dit ceci:

Erreur : 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 '? WHERE pays <"Atlantic Forest"' at line 1

Note: je suis une bille en anglais, ça n'aide pas !

Mais quelle ligne 1 (dans le fichier local c'est la balise <?php), ça ne peut pas être la cause de l'erreur ?

Si besoin je peux mettre le code de cette page, il doit y avoir des incohérences, sans doute, mais alors lesquelles ?

Note: que pensez-vous de cet autre site (de test) je parle des animations (personnages et faune). Si intéressant je pourrait les ajouter sur le site dédié avec d'autres billets bien sur.

Cdlt !


0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 27 mai 2023 à 16:53

Salut à tous,
Bon j'avance peu à peu, mais ici je bloque complet:

// si le nombre d'enregistrement à afficher est plus grand que $nombre 
if ($total > $nombre) {
    affichePages($nombre,$page,$total);  // affichage des liens vers les pages tableau billet d\'un pays, je ne veux pas de lien comme prénom
    displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
}
mysql_close();

La ligne 14 est: affichePages($nombre*********

Je comprends ici que si le total est supérieur a nombre (10) il doit afficher le bouton Suivant.
C'est pas ça ?
PS: j'utilise Google trad pour comprendre le message d'erreur, je sais c'est pas terrible !

Merci encore pour votre aide car je patauge sérieux ! Je suis obligé de faire des poses pour passer a autre chose et pouvoir réfléchir tranquillement, sans stress.


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
27 mai 2023 à 18:32

Erreur : 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 '? WHERE pays <"Atlantic Forest"' at line 1
 

La ligne "1" dont il est question concerne la requête SQL.

Mais le numéro de ligne, ici, n'a pas d'importance...   il faut regarder la partie indiquant à quel endroit de la requête il constate une erreur..  et en effet ..  est-ce que un PAYS peut être "plus petit" que "Atlantic Forest" ??

Les comparaisons > ou < .. s'appliquent à des NOMBRES pas à du TEXT ..

Ensuite.. quel rapport avec ton second message ?

Tu parles de la ligne 14 .. mais pourquoi ? .. tu as un message d'erreur ??  SI oui, tu sembles avoir oublié de le donner !

Par contre :

Je comprends ici que si le total est supérieur a nombre (10) il doit afficher le bouton Suivant.
C'est pas ça ?

Oui c'est bien ça ..   mais je ne vois pas non plus pourquoi tu nous parles de google trad .. alors que  le commentaire est en français..

// si le nombre d'enregistrement à afficher est plus grand que $nombre 

.

Bref.. si tu as des messages d'erreurs .. il faut nous les donner (sans essayer de les traduire ) ET nous montrer le code COMPLET de la page concernée.


0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 27 mai 2023 à 20:09

Salut jordane et encore merci pour ton aide si précieuse pour moi,
La première erreur que tu cite, n'a plus cour: en regardant la télé, je pensais a ça et que la table (monnaie), qui m'était resté en tête, n'existe pas. J'ai remplacé par "billets".

Google trad c'est pour traduire les erreurs affichées par le navigateur, pas les commentaires, c'est moi qui les faits.
"Erreur : 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 '? WHERE pays <"Atlantic Forest"' at line 1"
Maintenant c'est OK.

L'erreur affichée maintenant c'est:

Fatal error: Call to undefined function: affichepages() in /mnt/104/sdb/a/9/monnaiepapier/Planche.php on line 104
// ça correspond a ce que j'ai écrit dans mon dernier message
// la ligne 104 est 

affichePages($nombre,$page,$total); // ligne 104 (message ci-dessus).
Sauf que je ne sais pas a quoi correspond ce affichepPages (peut-être ici: http://abarka.free.fr/index.php?page=Fiche_PrenomM&lang=Fr&id=1 puisque le script est issu d'ici.
Je devrais sans doute le remplacer par "Planche" ? (page affichant les billets).
Je sais que je vais finir par y arriver mais ça va être long, il y a des choses qui m'échappent, c'est tout !

Je suis pénible, je sais, mais je dois toujours faire un break, vais regarder la télé mais je réfléchi mieux ainsi, sinon je m'embrouille trop devant le code.
Merci encore de ta patience avec moi !

0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734 > txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024
27 mai 2023 à 21:09

Ca veut dire que tu n'as pas mis le code de la fonctiona ffichepages dans ce site... Et/ou que tu n'as pas inclus le fichier la contenant dans la page où tu veux l'utiliser.

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 28 mai 2023 à 12:46

Salut à tous,

Les boutons Précédent Suivant s'affichent pas au bon endroit. Est du au fait que ce script se trouve dans un autre fichier, a la suite des infos de connexion ?
De plus, l'affichage limité n'est pas pris en compte (à cause de la mise en commentaire ci-dessous ?).

// si le nombre d'enregistrement à afficher est plus grand que $nombre 
if ($total > $nombre) {
// affichePages($nombre,$page,$total); // affichage des liens vers les pages tableau billet d\'un pays
    displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
}
mysql_close();

Je me dis que j'ai intérêt de mettre le script "limit" a la suite de celui-ci mais j'imagine avant le mysql_close(); ?

Décidément, il y a trop longtemps que j'ai adapté ce script a mes besoins (le site du zéro a trop changé, il était pourtant si intéressant pour les cours pas à pas...)

Merci encore pour les éclaircissement !


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
28 mai 2023 à 14:55

Comme déjà dit....

nous montrer le code COMPLET de la page concernée

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
28 mai 2023 à 17:36

OK, je n'osais pas,
Voici le code complet de la page planche (qui liste les billets):

<?php
//***************************************************************//
// On récupère les informations de connexion à la base 
require 'fonctions.php'; 

$cnx = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($cnx) or die ('Impossible de se connecter à la base'); // sélection de la table
// si encodage UTF-8 des données de la base, sinon mettre cette ligne en commentaire
mysql_query("SET NAMES 'utf8'");

// On recupere la variable "pays" correspondant au pays cliqué
$pays = isset($_GET['pays'])?$_GET['pays']:'NULL'; // 
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Billets de banque du monde </title>
<meta name="robots" content="index, follow" />
<meta name="author" content="Jean Michel Etchecolonea" />
<meta name="Description" content="billets de banque du monde." />
<meta name="Keywords" content="Billet de banque, Billets du monde, billetophilie, monnaie papier, monnaie ancienne, papier monnaie, monnaie fiduciaire, dollar, euro, rouble, pound, livre, billet de banque africain, billet de banque américain" />
<link href="Styles/Billets.css" type="text/css" rel="stylesheet" />
<meta name="revisit-after" content="20 days" />
<meta http-equiv="imagetoolbar" content="no" /><!-- Empeche IE de mettre une barre sur les images //-->
</head>
<body>

<?php
// On selectionne seulement la ligne qui correspond au pays 
$sql = "select drapeau, nomcomplet, capitale, monnaie, histoire FROM flag WHERE pays='".$pays."'";
$result = mysql_query($sql,$cnx)  or die ('Erreur : '.mysql_error() ."<br> Requete : ".$sql);

$num_rows = mysql_num_rows($result);
if($num_rows == 0){
  echo "<br> ! Aucun article n'a été trouvé pour ce pays !";
}else{
 //On récupère la premiere ligne de la requete:
 $arrFlag = mysql_fetch_array($result);

 //on initialise les variables avec les données issues de la requête:
 $drapeau = $arrFlag['drapeau'];
 $nomcomplet = $arrFlag['nomcomplet'];
 $capitale = $arrFlag['capitale'];
 $monnaie = $arrFlag['monnaie'];
 $histoire = $arrFlag['histoire'];
  
 // n affiche que la première ligne pour la planche d'un pays, drapeau, capitale, monnaie et histoire de la monnaie 
 echo"<table ID='Intro'>";
 echo "<tr>";
 echo "<td width='10%' bgcolor='#cccccc'><img src='$drapeau' /></td>";
 echo "<td class='pays' width='30%'><strong>$nomcomplet</strong><br />capitale: <strong>$capitale</strong><br />monnaie : <strong>$monnaie</strong></td>";
 echo "<td class='money' width='60%'><p>$histoire</p></td>";
 echo "</tr>";
 echo"</table>";
 // ce premier tableau ne se répète pas
}

//*************************************************
// Affichage de la liste par 10 pays par pages
// initialisation des variables 

$nombre = 10;  // on va afficher 10 résultats par page.

// si la limite a été passée par un lien, on la prend en compte. 
$limite = (isset($_GET["limite"])) ? $_GET["limite"] : 0;

// connection à la DB
$link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table

// requête SQL qui calcule la limite lorsque le pays est spécifié 
// En fait on calcule à quelle position se trouve le 1er enregistrement commençant par ce pays
if (!empty($_GET["pays"]))
{
	$pays = $_GET["pays"];  // on compte tous les enregistrements qui se trouvent avant le pays et c'est tout !
	$select = 'SELECT count(*) FROM billets WHERE pays <"'.$pays.'"';  // on compte les billets d'un pays
	$result = mysql_query($select,$pays)  or die ('Erreur : '.mysql_error() );
	$row = mysql_fetch_row($result);
	$limite = $row[0];
}

// requête SQL qui compte le nombre total d'enregistrements dans la table
// Que font ces 4 lignes ci-dessous ? C'est en trop ?
$select = 'SELECT count(*) FROM billets';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];

// vérifier la validité de notre variable $limite;
if ($limite < 0) $limite = 0;
if ($limite > $total) $limite = $total;

// requête SQL qui ne prend que le nombre d'enregistrement necessaire à l'affichage.
$req = 'select * FROM billets ORDER BY pays ASC limit '.$limite.','.$nombre;
$result = mysql_query($req) or die ('Erreur : '.mysql_error() );


// on libère le résultat | mais je voudrais les lignes de tableau par pays, pas de liens !
mysql_free_result($result);

// si le nombre d'enregistrement à afficher est plus grand que $nombre 
if ($total > $nombre) {
//    affichePages($nombre,$page,$total); // affichage des liens vers les pages tableau billet d\'un pays
    displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
}
mysql_close();

// On selectionne seulement la ligne qui correspond au pays 
$select = "SELECT * FROM billets WHERE pays='$pays' ORDER BY chrono ASC"; // chrono est un champ a 5 chiffres pour remplcer le champ pick (qui ne fonctionne pas !
$result = mysql_query($select,$cnx) or die ('Erreur : '.mysql_error() ."<br> Requete : ".$sql);
$nb_result = mysql_num_rows($result);
if($nb_result==0){
   echo "<br> ! Aucun article n'a été trouvée pour ce pays !";
}else{
// on n'affiche ici que les lignes qui se répètent tant qu'il y a des billets pour ce pays via la boucle pour tableau "while"
 echo"<table ID='planche'>";
 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
   $visuel_recto = $row['visuel_recto'];
   $valeur = $row['valeur'];
   $chrono = $row['chrono'];
   $pick = $row['pick'];
   $dimensions = $row['dimensions'];
   $recto = $row['recto'];
   $visuel_verso = $row['visuel_verso'];
   $verso= $row['verso'];
  echo "<tr>";
  echo "<td><center><img src='$visuel_recto' alt='$valeur' title='$valeur'></img></center></td>";
  echo "<td><center><img src='$visuel_verso' alt='$valeur' title='$valeur'></img></center></td>";
  echo "</tr>";
  echo "<tr class='ligne'>";
  echo "<td><p class='billet'>$valeur&nbsp;-&nbsp;P$pick<br>$recto</p></td>";
  echo "<td><p class='billet'>Dimensions:&nbsp;$dimensions<br>$verso</p></td>";
  echo "</tr>";
  }
 echo"</table>";
}
mysql_close();
?>

<br />
<table border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#ffffff">
<tr>
<td>&nbsp;&nbsp;<a class="lien" href="index.htm">&nbsp;&nbsp;Retour à l'accueil&nbsp;&nbsp;&nbsp;&nbsp;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="lien" href="Accueil.php">&nbsp;&nbsp;Retour à liste&nbsp;&nbsp;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="lien" href="#" onClick="history.go(-1)">&nbsp;&nbsp;Précédent&nbsp;&nbsp;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="lien" href="#">&nbsp;&nbsp;Haut de page&nbsp;&nbsp;</a></td>
</tr>
</table>
</body>
</html>

Puis le code complet de la page fonction:

<?php
//=========================================
// information pour la connection à le BDD
//=========================================

$host = 'localhost';
$user = '**********';  // nom du compte chez Free
$pass = '********';  
$db = '**********';   // nom de la BDD chez Free (toujours identique au compte chez Free)

// =================================================================================
// fonction qui affiche boutons Précédent  Suivant
// =================================================================================

function displayNextPreviousButtons($limite,$total,$nb,$pays) 
{ 
	global $pays;   // On accède aux variables globales définies dans index.php
	
	$limiteSuivante = $limite + $nb;
	$limitePrecedente = $limite - $nb;
	echo  "<table align='center'><tr>\n";
	if($limite != 0) 
	{
        echo  "<td valign='top'>\n";
		echo  "<form action=\"index.php\" method=method=\"get\">\n";
        echo  "<input type='submit' value='Précédent'>\n";   // affiche le bouton Précédent si la valeur limit est atteinte, fin de la sélection
		echo  "<input type='hidden' value=".$pays." name='pays'>\n";
		//echo  "<input type='hidden' value=".$lang." name='lang'>\n";		// le site n'a pas de langues autre que le français
		echo  "<input type='hidden' value=".$limitePrecedente." name='limite'>\n";
        echo  "</form>\n";
        echo  "</td>\n";
	}
	if($limiteSuivante < $total) 
	{
        echo  "<td valign='top'>\n";
		echo  "<form action=\"index.php\" method=method=\"get\">\n";
        echo  "<input type='submit' value='Suivant'>\n";   // affiche le bouton Suivant si plus que la valeur limit
		echo  "<input type='hidden' value=".$pays." name='pays'>\n";
		//echo  "<input type='hidden' value=".$lang." name='lang'>\n";		// le site n'a pas de langues autre que le français
		echo  "<input type='hidden' value=".$limiteSuivante." name='limite'>\n";
        echo  "</form>\n";
        echo  "</td>\n";
            
	}
	echo  "</tr></table>\n";
}
?>

J'ai bien envi de mettre cette seconde partie (fonction qui affiche...... dans l'autre page (planche.php) mais je ne vois pas a quel endroit exact.
Voila, ici se trouve le code dans son intégralité, sur deux pages.
Merci encore jordane45 !

0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
28 mai 2023 à 20:23

Oula.. c'est le bazaar dans ton code... 

Deux connexion à la bdd .. de multiple mysql_close ...  ça ne risque pas de marcher.

Et pusi.. je n'y vois toujours pas le code de la fonction qui génère les boutons suivant/précédent..

En gros, ton code devrait ressembler à un truc du genre

<?php
//***************************************************************//
// On récupère les informations de connexion à la base 
require 'fonctions.php'; 

$cnx = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($cnx) or die ('Impossible de se connecter à la base'); // sélection de la table
// si encodage UTF-8 des données de la base, sinon mettre cette ligne en commentaire
mysql_query("SET NAMES 'utf8'");

//------------------------------------------------------------------------//
// initialisation des variables 
//------------------------------------------------------------------------//
$nombre = 10;  // on va afficher 10 résultats par page.
// On recupere la variable "pays" correspondant au pays cliqué
$pays = isset($_GET['pays'])?$_GET['pays']:'NULL'; // 
// si la limite a été passée par un lien, on la prend en compte. 
$limite = (isset($_GET["limite"])) ? $_GET["limite"] : 0;

// vérifier la validité de notre variable $limite;
if ($limite < 0) $limite = 0;
if ($limite > $total) $limite = $total;

//------------------------------------------------------------------------//
// FONCTIONS ...
//------------------------------------------------------------------------//
function getDrapeauByPays($pays){
  global $cnx;
  $sql = "SELECT drapeau, nomcomplet, capitale, monnaie, histoire 
          FROM flag 
          WHERE pays='".$pays."'";
  $result =  mysql_query($sql,$cnx)  or die ('Erreur : '.mysql_error() ."<br> Requete : ".$sql);
   //On récupère la premiere ligne de la requete:
  return mysql_fetch_array($result);
}

function getCountFromBilletsByPays($pays){
  global $cnx;
	$select = 'SELECT count(*) as NB 
              FROM billets 
              WHERE pays ="'.$pays.'"';  // on compte les billets d'un pays
	$result = mysql_query($select,$pays)  or die ('Erreur : '.mysql_error() );
	return !empty($result['NB']) ? $result['NB'] : 0;
}

function getBilletsByLimit($pays, $limite, $nombre){
  global $cnx;
    
  // requête SQL qui ne prend que le nombre d'enregistrement necessaire à l'affichage.
  $req = 'SELECT * FROM billets 
          WHERE pays ="'.$pays.'"  
          ORDER BY chrono ASC
          LIMIT '.$limite.','.$nombre;
  return mysql_query($req) or die ('Erreur : '.mysql_error() );
}

function displayNextPreviousButtons($limite,$total,$nombre,$page){
   // ....
   // ....
   // ICI le code de ta fonction !!!
    // ....
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title> Billets de banque du monde </title>
    <meta name="robots" content="index, follow" />
    <meta name="author" content="Jean Michel Etchecolonea" />
    <meta name="Description" content="billets de banque du monde." />
    <meta name="Keywords" content="Billet de banque, Billets du monde, billetophilie, monnaie papier, monnaie ancienne, papier monnaie, monnaie fiduciaire, dollar, euro, rouble, pound, livre, billet de banque africain, billet de banque américain" />
    <link href="Styles/Billets.css" type="text/css" rel="stylesheet" />
    <meta name="revisit-after" content="20 days" />
    <meta http-equiv="imagetoolbar" content="no" /><!-- Empeche IE de mettre une barre sur les images //-->
  </head>
  <body>

      <?php
      // On selectionne seulement la ligne qui correspond au pays 
       $arrFlag = getDrapeauByPays($pays);

      if(!empty($arrFlag )){
        echo "<br> ! Aucun article n'a été trouvé pour ce pays !";
      }else{
        //on initialise les variables avec les données issues de la requête:
       $drapeau = $arrFlag['drapeau'];
       $nomcomplet = $arrFlag['nomcomplet'];
       $capitale = $arrFlag['capitale'];
       $monnaie = $arrFlag['monnaie'];
       $histoire = $arrFlag['histoire'];
        
       // n affiche que la première ligne pour la planche d'un pays, drapeau, capitale, monnaie et histoire de la monnaie 
       echo"<table ID='Intro'>";
       echo "<tr>";
       echo "<td width='10%' bgcolor='#cccccc'><img src='$drapeau' /></td>";
       echo "<td class='pays' width='30%'><strong>$nomcomplet</strong><br />capitale: <strong>$capitale</strong><br />monnaie : <strong>$monnaie</strong></td>";
       echo "<td class='money' width='60%'><p>$histoire</p></td>";
       echo "</tr>";
       echo"</table>";
       // ce premier tableau ne se répète pas
      }

      //*************************************************
      $total = getCountFromBilletsByPays($pays);

      $result = getBilletsByLimit($pays, $limite, $nombre);


      // si le nombre d'enregistrement à afficher est plus grand que $nombre 
      if ($total > $nombre) {
      //    affichePages($nombre,$page,$total); // affichage des liens vers les pages tableau billet d\'un pays
          displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
      }


      // On selectionne seulement la ligne qui correspond au pays 
      $result = getBilletsByLimit($pays, $limite, $nombre);
      $nb_result = mysql_num_rows($result);
      
      if($nb_result==0){
         echo "<br> ! Aucun article n'a été trouvée pour ce pays !";
      }else{
      // on n'affiche ici que les lignes qui se répètent tant qu'il y a des billets pour ce pays via la boucle pour tableau "while"
       echo"<table ID='planche'>";
       while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $visuel_recto = $row['visuel_recto'];
         $valeur = $row['valeur'];
         $chrono = $row['chrono'];
         $pick = $row['pick'];
         $dimensions = $row['dimensions'];
         $recto = $row['recto'];
         $visuel_verso = $row['visuel_verso'];
         $verso= $row['verso'];
        echo "<tr>";
        echo "<td><center><img src='$visuel_recto' alt='$valeur' title='$valeur'></img></center></td>";
        echo "<td><center><img src='$visuel_verso' alt='$valeur' title='$valeur'></img></center></td>";
        echo "</tr>";
        echo "<tr class='ligne'>";
        echo "<td><p class='billet'>$valeur&nbsp;-&nbsp;P$pick<br>$recto</p></td>";
        echo "<td><p class='billet'>Dimensions:&nbsp;$dimensions<br>$verso</p></td>";
        echo "</tr>";
        }
       echo"</table>";
      }

      ?>

    <br />
    <table border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#ffffff">
      <tr>
        <td>&nbsp;&nbsp;<a class="lien" href="index.htm">&nbsp;&nbsp;Retour à l'accueil&nbsp;&nbsp;&nbsp;&nbsp;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="lien" href="Accueil.php">&nbsp;&nbsp;Retour à liste&nbsp;&nbsp;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="lien" href="#" onClick="history.go(-1)">&nbsp;&nbsp;Précédent&nbsp;&nbsp;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="lien" href="#">&nbsp;&nbsp;Haut de page&nbsp;&nbsp;</a></td>
      </tr>
    </table>
  </body>
</html>

<?php
// Un SEUL CLOSE à la FIN de ta page !
mysql_close();
?>

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 28 mai 2023 à 20:41

Merci beaucoup jordane,
Je vais copier ta réponse mais faut que je garde l'autre pour comparer, faut que je vois mes c***, sinon je vais pas avancer.

Problème: j'ai deux écrans donc très bien !, mais faut que je cherche une astuce car avec Dreamwaver je ne pourrai pas afficher deux pages cote a cote.
Je vais chercher une astuce pour ça. Je tiens beaucoup a la coloration syntaxique !

Encore merci et bon week-end !


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
28 mai 2023 à 21:23

Notepad++ permet d'afficher deux fichiers côtes à côte

VScode et netbeans aussi permettent ça...

Mais bon.. j'ai déplacé pas mal de ton code histoire de le réorganiser plus proprement...

J'ai découpé le code en fonctions...

Dur de faire les comparaisons vu ton niveau de connaissances actuelles sur le langage...

Au passage... il manque, tu verras, le code qui concerne la fonction pour générer les boutons... je te laisse le mettre

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 30 mai 2023 à 14:18

Salut joradane (eh oui il n'y a toi...)
Pourquoi la variable nb_result vaut 0 (voir la page). 
Si je dis ça c'est parce qu’il m'affiche l'erreur de l'article non trouvé. Or cette erreur affichée vient du fait que la variable est vide.
Mais surtout le nom de cette variable qui me surprend.
Dans ma fonction c'est:

"function displayNextPreviousButtons($limite,$total,$nb,$pays){" mais en changeant le nom, ça ne fonctionne pas non plus.

      // On selectionne seulement la ligne qui correspond au pays 
      $result = getBilletsByLimit($pays, $limite, $nombre);
      $nb_result = mysql_num_rows($result); // c'est la ligne 140
      
      if($nb_result==0){ 
         echo "<br> ! Aucun article n'a été trouvée pour ce pays !";
      }else{
      // on n'affiche ici que les lignes qui se répètent tant qu'il y a des billets pour ce pays via la boucle "while"
       echo"<table ID='planche'>";

Dans ta correction, plus haut <29>, a quoi correspond NB lignes 39 et 43 ?
Dans les lignes 49 a 53, c'est habituel de faire des retours à la ligne ? C'est malin en tous cas !

Au cas ou, je remet le code complet en partant de ta correction:
 

<?php
//***************************************************************//
// On récupère les informations de connexion à la base 
require 'fonctions.php'; 

$cnx = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($cnx) or die ('Impossible de se connecter à la base'); // sélection de la table
// si encodage UTF-8 des données de la base, sinon mettre cette ligne en commentaire
mysql_query("SET NAMES 'utf8'");

//------------------------------------------------------------------------//
// initialisation des variables 
//------------------------------------------------------------------------//
$nombre = 10;  // on va afficher 10 résultats par page.
// On recupere la variable "pays" correspondant au pays cliqué
$pays = isset($_GET['pays'])?$_GET['pays']:'NULL'; // 
// si la limite a été passée par un lien, on la prend en compte. 
$limite = (isset($_GET["limite"])) ? $_GET["limite"] : 0;

// vérifier la validité de notre variable $limite;
if ($limite < 0) $limite = 0;
if ($limite > $total) $limite = $total;

//------------------------------------------------------------------------//
// FONCTIONS ...
//------------------------------------------------------------------------//
function getDrapeauByPays($pays){
  global $cnx;
  $sql = "SELECT drapeau, nomcomplet, capitale, monnaie, histoire 
          FROM flag 
          WHERE pays='".$pays."'";
  $result =  mysql_query($sql,$cnx)  or die ('Erreur : '.mysql_error() ."<br> Requete : ".$sql);
   //On récupère la premiere ligne de la requete:
  return mysql_fetch_array($result);
}

function getCountFromBilletsByPays($pays){
  global $cnx;
	$select = 'SELECT count(*) as NB 
              FROM billets 
              WHERE pays ="'.$pays.'"';  // on compte les billets d'un pays
	$result = mysql_query($select,$pays)  or die ('Erreur : '.mysql_error() );
	return !empty($result['NB']) ? $result['NB'] : 0;
}

function getBilletsByLimit($pays, $limite, $nombre){
  global $cnx;
    
  // requête SQL qui ne prend que le nombre d'enregistrement necessaire à l'affichage.
  $req = 'SELECT * FROM billets 
          WHERE pays ="'.$pays.'"  
          ORDER BY chrono ASC
          LIMIT '.$limite.','.$nombre;
  return mysql_query($req) or die ('Erreur : '.mysql_error() );
}

  // fonction qui affiche boutons Précédent  Suivant

function displayNextPreviousButtons($limite,$total,$nb,$pays){
  global $cnx;
	$limiteSuivante = $limite + $nb;
	$limitePrecedente = $limite - $nb;
	echo  "<table align='center'><tr>\n";
	if($limite != 0) 
	{
        echo  "<td valign='top'>\n";
		echo  "<form action=\"index.php\" method=method=\"get\">\n";
        echo  "<input type='submit' value='Précédent'>\n"; // affiche le bouton Précédent si la valeur limit est atteinte, fin de la sélection
		echo  "<input type='hidden' value=".$pays." name='pays'>\n";
		echo  "<input type='hidden' value=".$limitePrecedente." name='limite'>\n";
        echo  "</form>\n";
        echo  "</td>\n";
	}
	if($limiteSuivante < $total) 
	{
        echo  "<td valign='top'>\n";
		echo  "<form action=\"index.php\" method=method=\"get\">\n";
        echo  "<input type='submit' value='Suivant'>\n"; // affiche le bouton Suivant si plus que la valeur limit
		echo  "<input type='hidden' value=".$pays." name='pays'>\n";
		echo  "<input type='hidden' value=".$limiteSuivante." name='limite'>\n";
        echo  "</form>\n";
        echo  "</td>\n";
	}
	echo  "</tr></table>\n";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title> Billets de banque du monde </title>
    <meta name="robots" content="index, follow" />
    <meta name="author" content="Jean Michel Etchecolonea" />
    <meta name="Description" content="billets de banque du monde." />
    <meta name="Keywords" content="Billet de banque, Billets du monde, billetophilie, monnaie papier, monnaie ancienne, papier monnaie, monnaie fiduciaire, dollar, euro, rouble, pound, livre, billet de banque africain, billet de banque américain" />
    <link href="Styles/Billets.css" type="text/css" rel="stylesheet" />
    <meta name="revisit-after" content="20 days" />
    <meta http-equiv="imagetoolbar" content="no" /><!-- Empeche IE de mettre une barre sur les images //-->
  </head>
  <body>

      <?php
      // On selectionne seulement la ligne qui correspond au pays 
       $arrFlag = getDrapeauByPays($pays);

      if(!empty($arrFlag )){
        echo "<br> ! Aucun article n'a été trouvé pour ce pays !";
      }else{
        //on initialise les variables avec les données issues de la requête:
       $drapeau = $arrFlag['drapeau'];
       $nomcomplet = $arrFlag['nomcomplet'];
       $capitale = $arrFlag['capitale'];
       $monnaie = $arrFlag['monnaie'];
       $histoire = $arrFlag['histoire'];
        
       // n affiche que la première ligne pour la planche d'un pays, drapeau, capitale, monnaie et histoire de la monnaie 
       echo"<table ID='Intro'>";
       echo "<tr>";
       echo "<td width='10%' bgcolor='#cccccc'><img src='$drapeau' /></td>";
       echo "<td class='pays' width='30%'><strong>$nomcomplet</strong><br />capitale: <strong>$capitale</strong><br />monnaie : <strong>$monnaie</strong></td>";
       echo "<td class='money' width='60%'><p>$histoire</p></td>";
       echo "</tr>";
       echo"</table>";
       // ce premier tableau ne se répète pas
      }

      //*************************************************
      $total = getCountFromBilletsByPays($pays);
      $result = getBilletsByLimit($pays, $limite, $nombre);

      // si le nombre d'enregistrement à afficher est plus grand que $nombre 
      if ($total > $nombre) {
          affichePages($nombre,$page,$total); // affichage des liens vers les pages tableau billet d\'un pays
          displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
      }

      // On selectionne seulement la ligne qui correspond au pays 
      $result = getBilletsByLimit($pays, $limite, $nombre);
	  $nb_result = mysql_num_rows($result);
      
      if($nb_result==0){
         echo "<br> ! Aucun article n'a été trouvée pour ce pays !";
      }else{
      // on n'affiche ici que les lignes qui se répètent tant qu'il y a des billets pour ce pays via la boucle "while"
       echo"<table ID='planche'>";
       while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $visuel_recto = $row['visuel_recto'];
         $valeur = $row['valeur'];
         $chrono = $row['chrono'];
         $pick = $row['pick'];
         $dimensions = $row['dimensions'];
         $recto = $row['recto'];
         $visuel_verso = $row['visuel_verso'];
         $verso= $row['verso'];
        echo "<tr>";
        echo "<td><center><img src='$visuel_recto' alt='$valeur' title='$valeur'></img></center></td>";
        echo "<td><center><img src='$visuel_verso' alt='$valeur' title='$valeur'></img></center></td>";
        echo "</tr>";
        echo "<tr class='ligne'>";
        echo "<td><p class='billet'>$valeur - P$pick<br>$recto</p></td>";
        echo "<td><p class='billet'>Dimensions: $dimensions<br>$verso</p></td>";
        echo "</tr>";
        }
       echo"</table>";
      }
      ?>

    <br />
    <table border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#ffffff">
      <tr>
        <td>  <a class="lien" href="index.htm">  Retour à l'accueil    </a>    <a class="lien" href="Accueil.php">  Retour à liste  </a>    <a class="lien" href="#" onClick="history.go(-1)">  Précédent  </a>    <a class="lien" href="#">  Haut de page  </a></td>
      </tr>
    </table>
  </body>
</html>

<?php
// Un SEUL CLOSE à la FIN de ta page !
mysql_close();
?>

Tu verra certainement quelque chose que je ne vois pas (pourtant j'ai regardé..... au point que ça m'énerve maintenant parce que je loupe une "boulette" infime du style un ; qui manque, c’était ma spécialité !
Merci infiniment encore pour tes lumières !


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
30 mai 2023 à 17:52

Bonjour,

Le "NB" c'est un ALIAS dans la requête SQL.

https://fr.wikibooks.org/wiki/MySQL/Alias

Pour ce qui est du souci:

Peux tu modifier la fonction comme ceci :

function getBilletsByLimit($pays, $limite, $nombre){
  global $cnx;
    
  // requête SQL qui ne prend que le nombre d'enregistrement necessaire à l'affichage.
  $req = 'SELECT * FROM billets 
          WHERE pays ="'.$pays.'"  
          ORDER BY chrono ASC
          LIMIT '.$limite.','.$nombre;
  echo $req ; // pour voir ce que contient ta requête SQL 
  return mysql_query($req) or die ('Erreur : '.mysql_error() );
}

Puis prendre le résultat de ce echo et l'utiliser directement dans ta bdd ( via phpMyadmin ) et voir ce qu'elle te retourne comme résultat...

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
30 mai 2023 à 19:27

Désolé, mais j'utilise phpMyadmin uniquement pour créer, modifier, ajouter tables. Rien d'autre. Je soumet ensuite le fichier sql chez free. Point.

Je ne sais pas faire ce que tu me demande pour le echo dans mon phpMyadmin.

Par contre tu peux voir le résultat sur la page chez Free puisque je soumet les moindres modifs sue le serveur pour voir le résultat.

Autre chose:
C'est toujours la même erreur (sauf la ligne qui a changé puisque j'ai ajouté des lignes sur le code mais c'est toujours cette portion qui pose problème:
[Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /mnt/104/sdb/a/9/monnaiepapier/Planche.php on line 154]

ligne 154:   $nb_result = mysql_num_rows($result);

Et depuis le début c'est cette ligne qui m'emmerde !

Je crois que je vais abandonner, tant pis les pages seront interminables pour certains pays mais je ne vais pas monopoliser ton attention, déjà énorme !
Cdlt !


0
jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025 4 734
30 mai 2023 à 21:41

Si tu as mis le écho dans le code tel que je l'ai fait.... Peux-tu nous coller ici ce qu'il t'affiche ?

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520 > jordane45 Messages postés 38424 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 février 2025
31 mai 2023 à 13:15

Salut jordane45, (tu n'imagine pas à quel point tu m'encourage a ne pas abandonner !)

J'ai inséré tout le code que tu m'a mis dans ta réponse <33>
Je l'ai mis, (résultat de echo sur cette page, lien ci-dessus, je le remet ci-contre.

► Mais je trouve cette ligne bizarre, pas d'espace entre 10 et SELECT. C'est normal ?
ASC LIMIT 0,10SELECT

ligne 154:   $nb_result = mysql_num_rows($result);
J'ai beau chercher, je ne comprends vraiment pas !

Cdlt !

0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
Modifié le 1 juin 2023 à 14:24

Salut jordane45,

Bon, j’arrête. Je met Résolu !
Je suis revenu a la version sans limitation. Au moins peut voir les billets. Je verrais plus tard si je reprend la version avec affichage limité + boutons Suivant et Précédent.
Merci beaucoup tout de même !


0