Page 1 sur 2
Faire une correspondance entre 1 variable et 1 table
Posté : 29 mars 2014, 11:45
par yoann38
Salut, bon je suis un grand débutant en php d'où ce post qui va surement en faire sourire plus d'un.
J'ai une variable qui contient le codepostal ( $postalcode ) du visiteur qui change en fonction du visiteur.
J'ai une table nommé équipementier dans laquelle j'ai une colonne ville_code_postal et dans laquelle se trouve d'autre type de colone ( nom de l'équipementier, son adresse, ....)
Mon but est de pouvoir afficher les équipementiers en fonction de ma variable $postalcode..
Exemple: Si l'utilisateur est de Lyon, code postal 69000 , ça lui affiche les équipementier avec le même code postal j'espère que vous m'avez compris.
Merci pour votre aide
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 29 mars 2014, 13:02
par xTG
Il te faut utiliser la clause WHERE de ta requête de sélection.
Par exemple en utilisant PDO (une façon de faire parmi tant d'autres) :
$nombre_de_calorie = $pdo->quote($nombre_de_calorie); // protection contre les injections SQL
// Liste des plats dont le nombre de calorie est supérieur à ma variable
$resultat = $pdo->query('SELECT nom FROM plats WHERE nombre_de_calorie > ' . $nombre_de_calorie);
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 29 mars 2014, 13:10
par yoann38
merci d'avoir était aussi rapide je regarde ça et vous tiens informez de l'avencement
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 29 mars 2014, 20:36
par yoann38
Me revoilà, voici donc ou j'en suis:
<?php
$result = 'SELECT titre FROM equipementier WHERE postcode = "'.$data.'"';
echo $result;
?>
Le petit soucis c'est que enfait on dirait qu'il ne prends rien en compte, sur ma page web il affiche
LePin code postal :
38850
SELECT titre FROM publicite WHERE postcode = "Array"
Je ne suis que débutant dsl pour mon ignorance

Re: Faire une correspondance entre 1 variable et 1 table
Posté : 29 mars 2014, 22:28
par xTG
$data est un array (un tableau), il faut donc préciser l'index dans lequel se trouve ton code postal.
$monArray = array('index_1' => 'test');
echo "Ceci est un " . $monArray['index_1']; // Ceci est un test
Ensuite tu as juste déclaré une variable contenant ta requête, mais elle n'est en rien exécutée.
Il te faut interagir avec un driver pour accéder à la base de donnée et exécuter la requête.
Tu peux utiliser mysqli ou bien PDO. (voir la documentation sur le site de PHP, ou bien une recherche sur le net pour des tutoriaux)
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 30 mars 2014, 18:57
par yoann38
Alors voilà ou j'en suis
<?php
function trouveTitre( $codePostalIpUser )
{
$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
');
$req->execute(array('codePostIpUser'=>$codePostalIpUser));
$reponse = array();
for($i = 0; $donnees = $req->fetch(); $i++)
{
$reponse[$i] = $donnees['publicite.titre'];
}
$req -> closeCursor();
$val = (count($donnees)>0)?$donees:FALSE;
if($val)
{
foreach($val as $value)
{
return echo $value;
}
}
else
{
return echo 'Aucun titre ne correspond.';
}
}
$titrePub = function trouveTitre ($data);
echo $titrePub ;
?>
Mais celà m'affiche:
Parse error: syntax error, unexpected 'echo' (T_ECHO) in /home/users6/l/lasortie/www/test.php on line 83
et sur cette ligne j'ai return echo $value;
Quel est le problème svp ?
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 30 mars 2014, 19:35
par xTG
echo écrit sur la réponse HTTP.
Son retour ne peut donc pas être stocké dans une variable ou bien retourné en sortie de fonction.
return $value;
return "un texte";
return 0;
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 30 mars 2014, 19:45
par yoann38
Ah c'est vraiment tout con.
je le serais maitenant, merci
Tout à l'air de marcher sauf le retour en page web m'affiche :
Fatal error: Call to a member function prepare() on a non-object in /home/users6/l/lasortie/www/test.php on line 64
j'ai à cette ligne ma requete:
$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
');
<!-- récupération de l'adresse ip du visiteur et affichage de la ville -->
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$script = "http://www.ieducatif.fr/geoloc/geo.php?IP=";
$retour = file_get_contents($script.$ip);
echo $retour;
?>
<!-- récupération de l'adresse ip du visiteur et affichage de la ville -->
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$script = "http://www.ieducatif.fr/geoloc/geo.php?IP=";
$retour = file_get_contents($script.$ip);
?>
<?php
// lancement de la requete
$sql = 'SELECT ville_code_postal FROM villes_france WHERE ville_nom_reel = "'.$retour.'"';
// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on recupere le resultat sous forme d'un tableau
$data = mysql_fetch_array($req);
// on libère l'espace mémoire alloué pour cette interrogation de la base
mysql_free_result ($req);
mysql_close ();
?>
<!-- et on affiche le code postal -->
code postal :<br />
<?php echo $data['ville_code_postal']; ?>
<!-- Fin de procédure de récupération de l'adresse ip du visiteur ainsi que de son code postal -->
<?php
//instanciation de la fonction trouveTitre
function trouveTitre( $codePostalIpUser )
{
$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
');
$req->execute(array('codePostIpUser'=>$codePostalIpUser));
$reponse = array();
for($i = 0; $donnees = $req->fetch(); $i++)
{
$reponse[$i] = $donnees['publicite.titre'];
}
$req -> closeCursor();
$val = (count($donnees)>0)?$donees:FALSE;
if($val)
{
foreach($val as $value)
{
return $value;
}
}
else
{
return 'Aucun titre ne correspond.';
}
}
$resultat = trouveTitre($data['ville_code_postal']);
echo $resultat ;
?>
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 30 mars 2014, 21:44
par xTG
Ton problème vient du fait que $bdd n'existe pas.
PDO requiert une initialisation pour se connecter à la bdd.
Tu utilises plus haut le driver mysql.
Autant continuer à l'utiliser plutôt que de refaire une connexion à la bdd avec un autre driver.
Mais le mieux serait de migrer vers mysqli (les mêmes fonctions que mysql mais avec un i dedans pour la majorité des fonctions) ou bien PDO.
Car le driver mysql n'est plus maintenu et donc n'est pas exempt de failles de sécurité.
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 30 mars 2014, 22:24
par yoann38
il est vrai que je devrais mettre à jour par pdo ou mysqli
mais ca devrai quand même marcher et ma base exite bien je l'importe avec un include au debut c'est pour ca que je ne comprends par l'erreur
J'ai remis le code complet
Merci de votre aide
<?php
//******PARAMETRE DE CONNEXION*********
include("conndb.php");
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Document sans titre</title>
</head>
<body>
<!-- récupération de l'adresse ip du visiteur et affichage de la ville -->
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$script = "http://www.ieducatif.fr/geoloc/geo.php?IP=";
$retour = file_get_contents($script.$ip);
echo $retour;
?>
<!-- récupération de l'adresse ip du visiteur et affichage de la ville -->
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$script = "http://www.ieducatif.fr/geoloc/geo.php?IP=";
$retour = file_get_contents($script.$ip);
?>
<?php
// lancement de la requete
$sql = 'SELECT ville_code_postal FROM villes_france WHERE ville_nom_reel = "'.$retour.'"';
// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on recupere le resultat sous forme d'un tableau
$data = mysql_fetch_array($req);
// on libère l'espace mémoire alloué pour cette interrogation de la base
mysql_free_result ($req);
mysql_close ();
?>
<!-- et on affiche le code postal -->
code postal :<br />
<?php echo $data['ville_code_postal']; ?>
<!-- Fin de procédure de récupération de l'adresse ip du visiteur ainsi que de son code postal -->
<?php
//instanciation de la fonction trouveTitre
function trouveTitre( $codePostalIpUser )
{
//Si tout va bien, on peut continuer
//Ici je fais une requête préparée contre les ISQL
//il y'a deux conditions une sur l'egalité des element des tables jointe et l'autre sur la variable recupérée
//Pour plus de détails cf cours php (MATEO)
$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
');
$req->execute(array('codePostIpUser'=>$codePostalIpUser));
$reponse = array();
//On fait une while habituellement mais moi je fais une for pour stocker les élément dans un tableau
for($i = 0; $donnees = $req->fetch(); $i++)
{
$reponse[$i] = $donnees['publicite.titre'];
}
$req -> closeCursor();
// Normalement $val est un tableau qui ne contiendra qu'un seul element
//je fais un ternaire pour que tu aies le resultat ou alors un false en cas de non reponse
$val = (count($donnees)>0)?$donees:FALSE;
//Puiqu'en fait $val ne peut contenir qu'un seul titre on y va
if($val)
{
foreach($val as $value)
{
return $value;
}
}
else
{
return 'Aucun titre ne correspond.';
}
}
$resultat = trouveTitre($data['ville_code_postal']);
echo $resultat ;
?>
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 31 mars 2014, 19:24
par xTG
$bdd est déclarée dans conndb.php ?
Si c'est le cas c'est un problème de portée de variable.
Ce n'est pas une globale et donc elle n'est pas accessible depuis la fonction.
Il faut la déclarer globale dans la fonction pour qu'il sache où la chercher.
$maVariable = "test";
function foo()
{
global $maVariable;
echo $maVariable;
}
foo();
Ou plus proprement en la passant en argument à ta fonction.
$maVariable = "test";
function foo($var)
{
echo $var;
}
foo($maVariable);
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 05 avr. 2014, 19:37
par yoann38
Je me suis pris d'un façon différentes cependant j'ai un problème d'affichage sur la dernière variable de mon code, sur un echo de la variable suivante:
$resultat = trouveTitre($data['ville_code_postal']);
EN BDD pour l'exemple j'ai :
id_publicite: 1
id_departement: 26
id_type_publicite: 7
photo: nom de la photo
titre: lesoleil
description: unephrasedetest
phone: 0476010203
email: un email
website: un url
street; une adresse
postcode: 38850
J'ai bien une colone postcode, tout est bien rempli donc où est le problème, merci à vous encore.
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$script = "http://www.ieducatif.fr/geoloc/geo.php?IP=";
$retour = file_get_contents($script.$ip);
echo $retour;
?>
<!-- récupération de l'adresse ip du visiteur et affichage de la ville -->
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$script = "http://www.ieducatif.fr/geoloc/geo.php?IP=";
$retour = file_get_contents($script.$ip);
?>
<?php
$sql = 'SELECT ville_code_postal FROM villes_france WHERE ville_nom_reel = "'.$retour.'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
mysql_free_result ($req);
mysql_close ();
?>
code postal :<br />
<?php echo $data['ville_code_postal']; ?>
<!-- Fin de procédure de récupération de l'adresse ip du visiteur ainsi que de son code postal -->
<?php
function trouveTitre( $codePostalIpUser )
{
try
{
$bdd = new PDO('mysql:host=domaine;dbname=toto','user','mdp',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
die('Erreur: '.$e->getMessage());
}
$req = $bdd->prepare('SELECT publicite.titre FROM publicite, villes_france
WHERE villes_france.ville_code_postal = publicite.postcode AND publicite.postcode = :codePostIpUser
');
$req->execute(array('codePostIpUser'=>$codePostalIpUser));
$reponse = array();
for($i = 0; $donnees = $req->fetch(); $i++)
{
$reponse[$i] = $donnees['publicite.titre'];
}
$req -> closeCursor();
$val = (count($donnees)>0)?$donees:FALSE;
if($val)
{
foreach($val as $value)
{
return $value;
}
}
else
{
return 'Aucun titre ne correspond.';
}
}
$resultat = trouveTitre($data['ville_code_postal']);
echo $resultat ;
?>
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 05 avr. 2014, 23:32
par xTG
$val vaut $donees (au contraire de $donnees) qui n'existe en fait tout simplement pas.
Actives les affichages des Warnings dans ton php.ini cela t'aidera.

Re: Faire une correspondance entre 1 variable et 1 table
Posté : 07 avr. 2014, 11:31
par yoann38
Dsl de l'absence mais vu que ma femme vien d'accoucher. c'est chaud chaud ....
Bref, j'ai regardé ce que tu mas dit et je l'ai appliquer, cependant toujours rien qui s'affiche enfin si: Aucun titre ne correspond alors.
Je n'arrive pas à récupérer le titre de ma table publicite.
As tu une solution s'il te plait ?
Merci encore
Re: Faire une correspondance entre 1 variable et 1 table
Posté : 07 avr. 2014, 17:38
par xTG
Une nouvelle bouche à nourrir... Toutes mes condoléances...
Félicitations pour ce nouveau né.
Que donnes en résultat la requête si tu l'exécutes dans phpmyadmin ?