Fetch avec des functions

Fermé
Nightwish - 9 juil. 2012 à 07:17
 Utilisateur anonyme - 14 juil. 2012 à 01:19
Bonjour,

Cela ne fait que quelque semaine que je me suis mit sur le codage en PHP POO (Orienté Objet). J'ai décidé pour me pratiquer, de convertir mon site principal en POO. J'ai eu aucune problème avec l'enregistrement des membres etc, même le rowCount je n'es eu aucune difficulté. Par contre pour prendre des donnés dans la base de donné, j'ai toutes les misères du monde a utilisé la function Fetch.

Mon code suis comme cela :

class video
{
public function showVideo()
{
require ('query.inc.php');
$counter = $bdd->query('UPDATE video SET views=views+1 WHERE titre="'.$_GET['video'].'"');
$video_link = $bdd->prepare('SELECT * FROM video WHERE perma_title="'.$_GET['video'].'"');
$video_link->execute();
$show = $video_link->fetch(PDO::FETCH_OBJ);
return $show;
}
public function getMoviesTrailer()
{
$moviesFilter = $bdd->query('SELECT * FROM video WHERE categori_perma="trailer" AND type="movies"');
}
}

Ce code ci es le fichier class, l'autre es celui qui devrai normalement afficher toutes les donnés :

echo "<h3>
Vous regarder ".$getVideoInfo->showVideo()->$show['titre']." (".$getVideoInfo->showVideo()->$show['version'].")
</h3>
<h4>
Ajouté par : <a href=\"?section=chanel&show=publicprofil&user=".$getVideoInfo->showVideo()->$show['user']."\">".$getVideoInfo->showVideo()->$show['user']."</a> - Vues ".$getVideoInfo->showVideo()->$show['views']." fois
</h4>

Quelqu'un pourrais m'aider ?

Merci d'avance.

3 réponses

Bonjour

Deux choses :
1 - ta syntaxe pour récupérer les champs d'un objet est incorrecte : c'est showVideo()->titre et non pas showVideo()->$show['titre'].
Pourquoi avais-tu ajouté ce $show ? Ce nom de variable est local à la fonction showVideo() , il n'existe pas en dehors de cette fonction.
2 - pour réaliser ton affichage, tu appelles 5 fois la fonction showVideo(). Tu vas donc exécuter 5 fois les mêmes requêtes pour obtenir les mêmes résultats, c'est un gros gaspillage. Sans compter que tu auras fait 5 fois view=view+1, ce qui n'est sans doute pas ce que tu veux.
Il ne faut appeler showVideo() qu'une seule fois au début de l'affichage, et mettre le résultat dans une variable ; ensuite tu te sers de cette variable pour afficher les différents champs.
1
Merci, j'ai aussi essayer ta methode avec la variable, pour fetch la derniere donne sur le dessus des tables, c,est exelent, mais pour une boucle type while cela ne fonctionne pas.

public function videoCat()
{
require ('query.inc.php');
$video_cat = $bdd->prepare('SELECT * FROM video WHERE categori_perma="trailer"');
$video_cat->execute();
$showVideoCat = $video_cat->fetch();
return $showVideoCat;
}

$getVideoCat = new video;
$showCatVideo = $getVideoCat->videoCat();

while ($showCatVideo = $getVideoCat->videoCat())
{
echo "<div id=\"video_preview_displayer_contrainer\">
<a href=\"watch.php?section=watch&video=".$showCatVideo->perma_title."\"><h2>".$showCatVideo->titre."</h2></a>
</div>";
}

Auraient-ils des erreurs ? Merci a l'ancance.
0
OMG, sa fonctionne :) Merci beaucoup et oui je me doutais bien que la syntax étais mauvaise, mais ne sachant pas comment l'appeler en POO, c'est difficile, surtout que le tuto j'ai suivie étais usr l'envoi de donné via formulaire, alors pour afficher les résultat d'une requète je me suis débrouiller avec mes connaissance de PHP débutant. Bon merci encore pour ton aide.
0
Utilisateur anonyme
14 juil. 2012 à 01:19
mais ne sachant pas comment l'appeler en POO, c'est difficile Il suffit de lire le manuel PHP. C'est là que j'ai appris, je ne connaissais pas PDO il y a 2 mois.

Pour en revenir à ton code, oui, il y a une erreur. Une erreur de logique.
Tu recommences la même erreur qu'avant, en en rajoutant une couche

1 - $showCatVideo = $getVideoCat->videoCat();
Tu appelles ta fonction videoCat(), c'est à dire que tu exécutes ta requête et que tu récupères le premier résultat (c'est bien ce que fait ta fonction)
2 - while ($showCatVideo = $getVideoCat->videoCat())
Tu n'as pas encore utilisé le premier résultat que tu as obtenu ($showCatVideo) tu recommences le même appel à la même fonction : nouvel appel à la même requête, tu récupères encore le même résultat. Et tu récupèreras encore le même chaque fois que tu passeras par le while.
Ta fonction me semble inutile, tu appelles ta requête une fois (et une seule) et ensuite tu boucles sur le fetch pour parcourir les lignes.
0