Variable ($_GET['pays']) vide [Résolu/Fermé]

Signaler
Messages postés
3133
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
20 octobre 2020
-
Messages postés
3133
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
20 octobre 2020
-
Bonjour,
Je ne comprends pas ce qui s'est passé: ma question a disparue. Je vais essayer de la reformuler de tête:
Je suahaiterai obtenir quelque chose comme ceci Afrique du Sud, c'est une page htm toute bete. J'ai créé deux tables, billets et flag contenant chacun le champ pays.
Le premier tableau m'affiche les nom de variable avec leur mise en forme au lieu de leur valeur (voir ici en cliquant sur Afghanistan)


Voici un extrait du code
<?php
// On recupere la variable "pays" correspondant au pays cliqué
$pays = isset($_GET['pays'])?$_GET['pays']:'NULL'; // On utilise le passage de $_pays en $_GET['pays'] plutot qu'en $_POST["pays"]

// Déclaration des variables de la table "flag" 
$drapeau = '$drapeau';
$nomcomplet = '$nomcomplet';
$capitale = '$capitale';
$monnaie = '$monnaie';
$histoire = '$histoire';

// Déclaration des variables de la table "billets" 
$visuel_recto = 'visuel_recto';
$valeur_recto = 'valeur_recto';
$format = 'format';
$recto = 'recto';
$visuel_verso = 'visuel_verso';
$valeur_verso = 'valeur_verso';
$format= 'format'; // on réaffiche le format du billet pour le verso
$verso= 'verso';
?>
puis ceci :
<?php
require 'fonctions.php'; // On récupère les informations de connexion à la base 

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

// On selectionne seulement la ligne qui correspond au pays 
$select = ("SELECT drapeau, nomcomplet, capitale, monnaie, histoire FROM flag WHERE pays='$pays'");
$result = mysql_query($select)  or die ('Erreur : '.mysql_error() );

// n affiche que la première ligne pour la planche d'un pays, drapeau, capitale, monnaie et histoire de la monnaie 
echo"<table  width='90%' border='0' align='center' cellpadding='5' cellspacing='0' bgcolor='#ffffff'>";
echo "<tr>";
echo "<td width='10%'><img src='$drapeau' /></td><td class='pays' width='30%'><strong>'$nomcomplet'</strong><br />capitale: <strong>'$capitale'</strong><br />monnaie : <strong>'$monnaie'</strong></td><td width='60%'><p class='money'>'$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 visuel_recto, valeur_recto, format, recto, visuel_verso, valeur_verso, verso FROM billets WHERE pays='$pays'");
$result = mysql_query($select)  or die ('Erreur : '.mysql_error() );

// 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 "foreach"
 echo"<table ID='planche'>";
foreach ($billets as $pays) {
 $visuel_recto = $pays['visuel_recto'];
 $valeur_recto = $pays['valeur_recto'];
 $format = $pays['format'];
 $recto = $pays['recto'];
 $visuel_verso = $pays['visuel_verso'];
 $valeur_verso = $pays['valeur_verso'];
 $format= $pays['format']; // on réaffiche le format du billet pour le verso
 $verso= $pays['verso'];
// echo"<table ID='planche'>";
 echo "<tr>";
 echo "<td class='billet'><img src='$visuel_recto' alt='$valeur_recto'  title='$valeur_recto' /><br />'$valeur_recto'<br />'$format'<br />'$recto'</td>";
 echo "<td class='billet'><img src='$visuel_verso' alt='$valeur_verso' title='$valeur_verso' /><br />'$valeur_verso'<br />'$format'<br />'$verso'</td>";
 echo "</tr>";
 }
 echo"</table>";

mysql_close();
?>

Voir aussi mon post sur le forum webmaster
Merci beaucoup d'avance pour votre aide, je m'arrache les cheveux depuis quelques jours.



Le bonheur est la seule chose que l'on peut donner sans l'avoir.

6 réponses

Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
275
Petit rappel, l'extension mysql est obsolète


Ensuite, si tu veux inclure une variable dans une chaine, il y a 3 méthodes :

$Dest=$Source; ou $Dest='aa'.$Source;
$Dest="$Source"; // Note, c'est " et pas '
$Dest=sprintf('%s',$Source); ou
$Dest=sprintf('Une valeur dont je vous montre son état %d',$Source);
Messages postés
3133
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
20 octobre 2020
409
Bonsoir et merci Nhenry,
mais tu m'a complètement embrouillé là. Je continuerai donc à faire des pages htm, une pour chaque pays.
Merci quand même.
Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
275
Tu as écris :
$capitale = '$capitale';
Or, si tu veux faire ce que tu penses, c'est :
$capitale = $capitale;
ou
$capitale = "$capitale";

Mais je ne vois pas le but de l'assignation.
Messages postés
3133
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
20 octobre 2020
409
Salut NHenry,
Ben dans les deux cas que tu me propose c'est pire.
Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
275
Si ta variable _GET['pays'] est vide, c'est que tu n'a pas passé ce paramètre.

Comment appelles-tu ta page ?
Attention le nom du paramètre est sensible à la casse.
Messages postés
3133
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
20 octobre 2020
409
Salut NHenry,
Ben par un lien comme ceci:
<div id="LayerA" style="position:absolute; width:90%; height:236px; z-index:1; left: 72px; top: 220px; visibility: hidden;"><a class="lien" href="Planche.php">Afghanistan</a> | <a class="lien" href="Pays/Afrique_du_Sud.htm">Afrique du Sud</a> |

Ce lien se trouve dans un DIV (26 au total, un par lettre) et qui est caché par défaut. Il ne s'affiche qu'en cliquant sur une lettre Liste des lettres.
Afghanistan pointe sur la page planche.php ou il y a le code du début de ce topic, Afrique du Sud pointe lui sur une page htm classique et c'est pour éviter d'avoir a écrire autant de pages que de pays que j'aurais voulu utiliser une BDD.
Précisions: cette page Accueil.php n'a aucun code php. Tout mon problème semble venir de cette page Accueil et de ce lien Afghanistan.
Je pensais que le mot cliqué (Afghanistan) devenait automatiquement une variable et donc la récupérer dans la page Planche.php.
Je suis débutant en php et c'est pourtant la première fois que je suis confronté à un Pb aussi aussi longtemps. J'ai du louper quelque chose que je ne vois pas.
Merci en tous cas de t'interresser à mon Pb.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
Messages postés
31121
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021
3 201
Ce n'est pas comme ça que tu passes une variable GET.. il faut l'inclure dans l'url de la page appelée...

<a class="lien" href="Planche.php?pays=Afghanistan">Afghanistan</a>
Messages postés
3133
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
20 octobre 2020
409 >
Messages postés
31121
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021

Bonjour jordane45,
Désolé mais ça ne change absolument rien. Je suis sur que c'est un truc tout con pourtant !. Le pays est bien spécifié dans l'url
Ca m'énerve !
Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021
275
Le soucis vient sûrement du fait que tu essayes d'afficher des variables que tu as initialisé de cette manière :
$drapeau = '$drapeau';

Si tu veux mettre la valeur qui se trouve dans la base de données, il faut récupérer l'information avant de l'afficher.
Messages postés
31121
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021
3 201 >
Messages postés
14761
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 janvier 2021


Le soucis vient sûrement du fait que tu essayes d'afficher des variables que tu as initialisé de cette manière :
$drapeau = '$drapeau';

Ca .. je lui ai déjà dit dans sa précédente question..... mais visiblement... il n'en a pas tenu compte :/
Messages postés
31121
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021
3 201
mais ça ne change absolument rien. Je suis sur que c'est un truc tout con pourtant !. Le pays est bien spécifié dans l'url

Maintenant ..oui.. le pays est bien dans l'URL (suite à ma modif ....)
Maintenant... regardons le reste de ton code pour savoir ce qui bloque.


Messages postés
31121
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021
3 201
Déjà .... comme je te l'avais déjà dit (et Nhenry te le redit...)
Tout ceci est faux (e ne sert strictement à rien ! )
<?php
// Déclaration des variables de la table "flag" 
$drapeau = '$drapeau';
$nomcomplet = '$nomcomplet';
$capitale = '$capitale';
$monnaie = '$monnaie';
$histoire = '$histoire';


Selon toi.. d'où proviennent ces variables ?
Que devraient elles contenir ?
Messages postés
31121
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021
3 201
Bon...

testes ce code ....
Il y avait tellement d'erreurs dans le tient que je ne vais pas tout te lister....
mais en gros voici les plus grosses :
1 - Tu ne faisais aucun fetch
2 - Tu utilisais un foreach sur une variable... qui sort dont on ne sait où !

<?php
//***************************************************************//
// CONNEXION A LA BDD
//------------------------------------//
// On récupère les informations de connexion à la base 
require 'Fonctions_Billets.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
//***************************************************************//

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

// le temps des tests:
if(!$pays){
 echo "<br> Variables GET :<br>";
 print_r($_GET);
}


?>
<!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="Collection de billets de banque du monde, neufs et ayant circulés." />
<meta name="keywords" content="papier monnaie, billet de banque, monnaies du monde, billetophilie, collection de billets de banque, monnaie, billets neuf, billets anciens" />
<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> ERREUR ! Aucune donnée trouvée pour ce pays dans la table flag!";
}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  width='90%' border='0' align='center' cellpadding='5' cellspacing='0' bgcolor='#ffffff'>";
 echo "<tr>";
 echo "<td width='10%'>
         <img src='$drapeau' />
	   </td>
	   <td class='pays' width='30%'>
	    <strong>$nomcomplet</strong><br />capitale: <strong>$capitale</strong><br />monnaie : <strong>$monnaie</strong>
	   </td>
	   <td width='60%'>
	    <p class='money'>$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 visuel_recto, valeur_recto, format, recto, visuel_verso, valeur_verso, verso 
           FROM billets 
           WHERE pays='$pays'";
$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> ERREUR ! Aucune donnée trouvée pour ce pays dans la table billets !";
}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 "foreach"
 echo"<table ID='planche'>";
 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
   $visuel_recto = $row['visuel_recto'];
   $valeur_recto = $row['valeur_recto'];
   $format = $row['format'];
   $recto = $row['recto'];
   $visuel_verso = $row['visuel_verso'];
   $valeur_verso = $row['valeur_verso'];
   $format= $row['format']; // on réaffiche le format du billet pour le verso
   $verso= $row['verso'];
  echo "<tr>";
  echo "<td class='billet'>
          <img src='$visuel_recto' alt='$valeur_recto'  title='$valeur_recto'></img><br>$valeur_recto<br>$format<br>$recto
		</td>";
  echo "<td class='billet'>
          <img src='$visuel_verso' alt='$valeur_verso' title='$valeur_verso'></img><br>$valeur_verso<br>$format<br>$verso
		</td>";
  echo "</tr>";
  }

 echo"</table>";
}
mysql_close();
?>

</body>
</html>



Messages postés
3133
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
20 octobre 2020
409
Re-bonjour à tous les deux,
Merci, MERCIIIII ! je retrouve d'ailleurs les rows et les while que j'avais utilisé pour d'autres sites dont celui pour les prénoms basques avec un moteur de recherche.
Je ne sais pas pourquoi je me suis focalisé sur le foreach. Et ce que je vois sur ton code c'est que tu a mis le require et la connexion à la table au tout début de la page. C'est comme ça qu'on fait ?
Bon maintenant je vais virer ces types BLOB car vois le résultat que ça donne. Les commentaires au bas de chaque photos, eux, sont corrects.
Je n'ai pas l'impression que ce soit de l'utf8.
Merci beaucoup en tous cas pour votre patience et générosité à tous les deux.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.