Probleme affichage requete

Eléphanteau du PHP | 10 Messages

05 avr. 2011, 09:54

Bonjour a tous,

Je suis nouveau sur ce forum et j'ai une question pour vous:

Voila, je veux afficher la liste des regions se trouvant dans ma base de données, en utilisant un PDO. Voila mon code php:
<?php
require_once("classe.spdo.php");
foreach (SPDO::getInstance()->query("SELECT region "
	. "FROM test2 "
	. "GROUP BY region") as $stmt) {
	echo print_r($stmt);
	}
?>	
et le PDO en question:
<?php
class SPDO {

	private $PDOInstance = null;
	private $PreparedQUERY = null;
	private static $SPDOInstance = null;

	private function __construct($chaine, $login, $password) { 
		$this->PDOInstance = new PDO($chaine, $login, $password); 
		$this->PDOInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
	}
	
	public static function getInstance() {
		if (is_null(self::$SPDOInstance))	{
			self::$SPDOInstance = new SPDO('mysql:dbname=annuaire;host=localhost', 'root', '');
		}
		return self::$SPDOInstance;
	}
 
	public function query($query) {
		return $this->PDOInstance->query($query,PDO::FETCH_ASSOC);
	} 
	
	public function quote($data) {
		return $this->PDOInstance->quote($data);
	}
	
	public function prepare($query) {
		$this->PreparedQUERY = $this->PDOInstance->prepare($query);
		return $this;
	}

	public function execute($array) {
		$this->PreparedQUERY->execute($array);
		return $this;
	}

	public function lastInsertId() {
		return $this->PDOInstance->lastInsertId();
	}

	public function exec($query) {
		return $this->PDOInstance->exec($query);
	}
}
?>

Et voila ce que cela m'affiche:
Array ( [region] => ) 1Array ( [region] => Alsace ) 1Array ( [region] => Aquitaine ) 1Array ( [region] => Auvergne ) 1Array ( [region] => Basse-Normandie ) 1Array ( [region] => Bourgogne ) 1Array ( [region] => Bretagne ) 1Array ( [region] => Centre ) 1Array ( [region] => Champagne-Ardenne ) 1Array ( [region] => Champagne-Ardennes ) 1Array ( [region] => Corse ) 1Array ( [region] => Franche-Comt? ) 1Array ( [region] => Guadeloupe ) 1Array ( [region] => Guyane ) 1Array ( [region] => Haute-Normandie ) 1Array ( [region] => Ile-de-France ) 1Array ( [region] => La R?union ) 1Array ( [region] => Languedoc-Roussillon ) 1Array ( [region] => Limousin ) 1Array ( [region] => Lorraine ) 1Array ( [region] => Martinique ) 1Array ( [region] => Mayotte ) 1Array ( [region] => Midi-Pyr?n?es ) 1Array ( [region] => Nord-Pas-de-Calais ) 1Array ( [region] => Pays de la Loire ) 1Array ( [region] => Pays-de-la-Loire ) 1Array ( [region] => Picardie ) 1Array ( [region] => Poitou-Charentes ) 1Array ( [region] => Provence-Alpes-C?te d'Azur ) 1Array ( [region] => Provence-Alpes-C?te-d'Azur ) 1Array ( [region] => R?union ) 1Array ( [region] => Rh?ne-Alpes ) 1Array ( [region] => Saint-Martin ) 1

Voila donc je voudrais savoir pourquoi "1Array ([region] =>" apparait et comment l'enlever?
Le probleme vient-il de la boucle? de la classe ?

Merci de votre aide.

ViPHP
xTG
ViPHP | 7331 Messages

05 avr. 2011, 11:56

Le problème vient de ta fonction d'affichage...
Lis la documentation de la fonction print_r(). ;)
Et pour résoudre ton problème il faudrait donc lire des cours sur comment accéder aux valeur d'un array.

Eléphanteau du PHP | 10 Messages

05 avr. 2011, 12:30

Merci de ta réponse,
en effet grace au manuel j'ai trouver la fonction "neat_r" dont l'affichage est meilleur:
region: region: Alsace region: Aquitaine region: Auvergne region: Basse-Normandie region: Bourgogne region: Bretagne region: Centre region: Champagne-Ardenne region: Champagne-Ardennes region: Corse region: Franche-Comté region: Guadeloupe region: Guyane region: Haute-Normandie region: Ile-de-France region: La Réunion region: Languedoc-Roussillon region: Limousin region: Lorraine region: Martinique region: Mayotte region: Midi-Pyrénées region: Nord-Pas-de-Calais region: Pays de la Loire region: Pays-de-la-Loire region: Picardie region: Poitou-Charentes region: Provence-Alpes-Côte d'Azur region: Provence-Alpes-Côte-d'Azur region: Réunion region: Rhône-Alpes region: Saint-Martin

Il reste encore les "region" a enlever et les sauts de ligne a ajouter.

En meme temps je suis tombé sur "PDO::FETCH_ASSOC". Je ne sais pas si s'est adapté a mon sujet et si s'est utile. Qu'est-ce que tu en penses?

ViPHP
xTG
ViPHP | 7331 Messages

05 avr. 2011, 12:50

Bon allons commençons par les bases... Connais-tu le HTML ?
Le HTML peut être utilisé en PHP.

Ensuite lis ceci et peut être que cela te conduira vers la bonne marche à suivre :
http://phpdebutant.org/article11.php
http://phpdebutant.org/article54.php

Eléphanteau du PHP | 10 Messages

05 avr. 2011, 14:44

Oui, je connais le html.
En fait je n'ai rencontré des problemes pour afficher cette liste de region que depuis que j'essaie de passer par le PDO (c'est la consigne).

J'ai toujours le probleme du "region" qui se repete et j'ai beau chercher, enlever le PDO (et remettre la connexion classique à la BDD) je ne vois pas quoi faire.
region: Alsace
region: Aquitaine
region: Auvergne
region: Basse-Normandie
region: Bourgogne
region: Bretagne

Eléphanteau du PHP | 10 Messages

05 avr. 2011, 16:42

Bon, probleme résolu:
En fait print_r et neat_r n'étaient pas adapté.

Voila le code corrigé avec en prime un lien par région.
			<?php
			require_once("classe.spdo.php");
			foreach (SPDO::getInstance()->query("SELECT DISTINCT region "
			. "FROM test2 "
			) as $stmt) {
			echo "<br>";
			$region = $stmt;
			echo '<li><a href="choisir_departement.php?region='. $region['region'].'">'. $region['region'].'</a></li>'; 
			}
			?>	
L'affichage est correcte:

Alsace

Aquitaine

Auvergne

Basse-Normandie

Bourgogne


Et merci xTG