Variable ($_GET['pays']) vide

Résolu/Fermé
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 27 juin 2015 à 20:35
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 28 juin 2015 à 18:50
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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
27 juin 2015 à 21:13
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);
0
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515
27 juin 2015 à 21:37
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.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
Modifié par NHenry le 27/06/2015 à 22:10
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.
0
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515
27 juin 2015 à 23:41
Salut NHenry,
Ben dans les deux cas que tu me propose c'est pire.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
27 juin 2015 à 23:44
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.
0
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515
28 juin 2015 à 01:33
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.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
28 juin 2015 à 12:39
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>
0
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
28 juin 2015 à 15:31
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 !
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
Modifié par NHenry le 28/06/2015 à 16:32
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.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024
28 juin 2015 à 17:00

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 :/
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
28 juin 2015 à 17:01
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.


0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
28 juin 2015 à 17:03
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 ?
0

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

Posez votre question
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
28 juin 2015 à 17:24
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>



0
txiki Messages postés 6597 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 515
28 juin 2015 à 18:50
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.
0