Bonjour à toutes et à tous,
Je remercie tout d'abord ce site pour les tutoriels vidéo qu'il propose.
J'en ai utilisé plusieurs et ça m'a vraiment dépanné !! vraiment merci beaucoup.
Bon là par contre j'ai un sérieux problème et ça fait plusieurs jours que je suis dessus je ne m'en sort pas.
J'espère que vous pourrez m'aider...
Je suis sur le tutoriel des listes liées
Voici le code du PDO (identique à celui du tutoriel je pense)
<?php
class DB{
private $host = 'localhost';
private $username = 'root';
private $password = '';
private $database = 'test';
private $db;
public function __construct($host = null, $username = null, $password = null, $database = null){
if($host != null){
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->database = $database;
}
try{
$this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->username, $this->password, array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
));
}catch(PDOException $e){
die('<h1>Impossible de se connecter a la base de donnee</h1>');
}
}
public function query($sql, $data = array()){
$req =$this->db->prepare($sql);
$req->execute($data);
return $req->fetchAll(PDO::FETCH_OBJ);
}
}
Et voici le code de la page index.php qui utilise ce PDO
<?php
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" href="css/bootstrap.css">
</head>
<body>
<?php
require "db.class.php";
$DB = new DB();
$regions = $DB->query('SELECT * FROM regions');
?>
<select id="region">
<?php foreach ( $regions as $region ): ?>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<?php endforeach ?>
</select>
</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</html>
Problème :
J'obtiens une liste déroulante qui ne contient que des
name; ?>
et je ne comprend pas pourquoi, sa me rend ouf ce truc.
Merci par avance pour votre aide car là je sèche.
Seb
Bon plutôt incroyable. je vois pas ce qui cloche. Ton code devrait fonctionner mais php passe déçu comme si il n'existé pas :|
<?php
foreach ( $regions as $region ) {
echo '<option value="'.$region->id.'">'.$region->name.'</option>';
}
?>
A la place de
<?php foreach ( $regions as $region ): ?>
<option value="<?= $regions->id; ?>"><?= $region->name; ?></option>
<?php endforeach ?>
Bonsoir,
Il manque le fetchAll(PDO::FETCH_OBJ);
require "db.class.php";
$DB = new DB();
$req = $DB->query('SELECT * FROM regions');
$regions = $req->fetchAll(PDO::FETCH_OBJ);
Cordialement,
ok j'ai inclus ton morceau de code :
<?php
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" href="css/bootstrap.css">
</head>
<body>
<?php
require "db.class.php";
$DB = new DB();
$req = $DB->query('SELECT * FROM regions');
$regions = $req->fetchAll(PDO::FETCH_OBJ);
?>
<select id="region">
<?php foreach ( $regions as $region ): ?>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<?php endforeach ?>
</select>
</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</html>
Il me retourne une erreur :
Fatal error: Call to a member function fetchAll() on a non-object in C:\wamp\www\index.php on line 15
Oups désolé j'avais pas vue ton fichier db, donc pas besoins de ma ligne car elle est déjà dans ton fichier db.
Je cherche pour ton problème.
Quand je teste en enlevant
<?= $region->name; ?>
J'obtiens une liste qui semble contenir les 23 emplacements de la table regions mais la liste déroulante affiche 23 lignes vides ?!?! piouf pas facile ce truc !!
avant <?php foreach ( $regions as $region ): ?> ajotue <?php print_r($regions); ?> regarde si tu as bien les champs name dans le résultat
J'ai inclus <?php print_r($regions); ?> comme ceci :
<?php
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" href="css/bootstrap.css">
</head>
<body>
<?php
require "db.class.php";
$DB = new DB();
$regions = $DB->query('SELECT * FROM regions');
?>
<?php print_r($regions); ?>
<select id="region">
<?php foreach ( $regions as $region ): ?>
<option value="<?= $regions->id; ?>"></option>
<?php endforeach ?>
</select>
</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</html>
Et j'ai bien le nom des régions, voici ce qu'il retourne :
Array ( [0] => stdClass Object ( [id] => 1 [name] => Alsace ) [1] => stdClass Object ( [id] => 2 [name] => Aquitaine ) [2] => stdClass Object ( [id] => 3 [name] => Auvergne ) [3] => stdClass Object ( [id] => 4 [name] => Bourgogne ) [4] => stdClass Object ( [id] => 5 [name] => Bretagne ) [5] => stdClass Object ( [id] => 6 [name] => Centre ) [6] => stdClass Object ( [id] => 7 [name] => Champagne-Ardenne ) [7] => stdClass Object ( [id] => 8 [name] => Corse ) [8] => stdClass Object ( [id] => 9 [name] => Franche-Comté ) [9] => stdClass Object ( [id] => 10 [name] => Île-de-France ) [10] => stdClass Object ( [id] => 11 [name] => Languedoc-Roussillon ) [11] => stdClass Object ( [id] => 12 [name] => Limousin ) [12] => stdClass Object ( [id] => 13 [name] => Lorraine ) [13] => stdClass Object ( [id] => 14 [name] => Midi-Pyrénées ) [14] => stdClass Object ( [id] => 15 [name] => Nord-Pas-de-Calais ) [15] => stdClass Object ( [id] => 16 [name] => Basse-Normandie ) [16] => stdClass Object ( [id] => 17 [name] => Haute-Normandie ) [17] => stdClass Object ( [id] => 18 [name] => Pays de la Loire ) [18] => stdClass Object ( [id] => 19 [name] => Picardie ) [19] => stdClass Object ( [id] => 20 [name] => Poitou-Charentes ) [20] => stdClass Object ( [id] => 21 [name] => Provence-Alpes-Côte d'Azur ) [21] => stdClass Object ( [id] => 22 [name] => Rhône-Alpes ) [22] => stdClass Object ( [id] => 23 [name] => DOM ) )
Tu peux aussi afficher le code source généré de la page. Sur chrome, clique droit -> afficher code source. Regarde la structure de ton select
Voici le code source de la page :
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" href="css/bootstrap.css">
</head>
<body>
<select id="region">
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
<option value="<?= $region->id; ?>"><?= $region->name; ?></option>
</select>
</body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</html>
OOOOOOH quelle joie !!! Quel bonheur !!
TA solution fonctionne !!!! Je suis super content je te remercie mille fois
merci merci merci... et encore merci
ok c'est bon je sais, tu es sur une ancienne version de php qui ne supporte pas la syntaxe "<?=" tu peux placer "<?php echo ...." à la place
Ok c'est wamp et c'est vrai que je l'ai installé il y a quelques mois, demain je vais faire une grosse mise a jour.
Je te remercie encore c'est vraiement super merci