Ressortir une variable d'une fonction avec un Return.

Avatar du membre
Eléphanteau du PHP | 25 Messages

17 mai 2015, 17:10

Salut les amis ! Je poste aujourd'hui car je viens tout juste de finir d'apprendre le Poo. Je souhaite mettre tout cela en pratique mais malheureusement j'ai toujours eu un peu de mal à comprendre les Return dans les fonctions :(

Je vous explique mon problème.. dans une classe articleManager il y a une fonction showOne(). Un getters qui donne le dernier article ajouté dans la base de données. Jusque là, tout est bon. Je souhaite désormais récupérer ma variable $data sur ma page index.php afin de récupérer l'id de l'article pour pouvoir le faire passer en $_GET plus tard. Mais impossible ! Voici mon code :
<?php 

class articleManager {

	private $title;
	private $content;
	private $author;
	private $time;

	public function showOne() {

		global $bdd;

		$req = $bdd->query("SELECT * FROM articles ORDER BY id DESC LIMIT 0,1");
		$verif = $bdd->query("SELECT * FROM articles")->fetch();

		if($verif > 0) {

			while($data = $req->fetch()) {

				echo "<h3>".$data["title"]."</h3>
					<p>".$data["content"]."</p>";

				return $data;
			}

		} else {

			echo "<p>Aucun article dans la base de données.</p>";

		}

	}

}
Merci de votre humble aide ! :)

Mammouth du PHP | 688 Messages

17 mai 2015, 17:40

$verif = $bdd->query("SELECT * FROM articles")->fetch();
if($verif > 0) {

que retourne la fonction fetch ?
si ce n'est pas un entier, alors le if qui suit n'aura pas forcément l'effet voulu.

Avatar du membre
Eléphanteau du PHP | 25 Messages

17 mai 2015, 17:44

Il retourne un tableau sous cette forme Array ( [id] => 1 [0] => 1 [title] =>

EDIT : Mais j'ai déjà testé cette fonction et elle fonctionne très bien. J'ai testé sans article dans la BDD et j'ai bien le echo "<p>Aucun article dans la base de données.</p>"; qui apparaît. Mon problème est juste de retourner la variable $data pour la récupérer dans ma page index.php :(

Mammouth du PHP | 688 Messages

17 mai 2015, 18:05

tu as 2 fois la fonction fetch, et comme il n'y a qu'un enregistrement au cause du limit, le second fetch ne retourne rien, cela ne rentre donc jamais dans le while.