[php] nom d'une class dans une boucle

Résolu/Fermé
diice - 3 janv. 2012 à 04:04
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 - 3 févr. 2012 à 14:34
Bonjour,

Je vois que ce message n'est pas terminé et j'ai le meme probleme !
je précise, que je viens tout juste de me mettre aux class php...

j'ai une class par exemple :
class Amis {
   public $prenom;
   public $nom;
   etc....

    public __construct() {
       $this->prenom=$prenom;
       $this->nom=$nom;
    }
}


et j'ai mes Amis dans une BDD, table 'amis' avec id, prenom et nom...

comment j'affiche mes resultats via une requete sql et avec la classe ???

// include connexion sql
$sql_amis = "SELECT * FROM amis order by nom asc";
$req_amis = $mysqli->query($sql_amis) or die('Erreur SQL amis !<br />'.$sql_amis.'<br />'.mysqli_error());
if (!$req_amis->num_rows) {
	echo '<p class="alerte">il n\'y a pas d\'amis</p>';
} else {
	$row_amis = $req_amis->fetch_assoc();

        while ($row_amis = $req_amis->fetch_assoc()) {

             $amis= new Amis();
             echo $amis->nom.' '.$amis->prenom.'<br />;

        }
}


du coup le $amis ne va pas s'incrémenter a chaque amis de la requete ???
comment ca se passe a ce niveau ?

je trouve pas ce que je veux sur google (a part ce forum). a chaque fois c des class de connexion, ou des exemples de pizza ou de voiture mais sans base de données.

merci d'avance pour l'aide :)


3 réponses

diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
3 févr. 2012 à 14:34
bonjour,
oui j'ai trouvé une solution.
je me suis basé sur la solution de Anoen.
j'ai pas trouvé de class database qui me soit facilement compréhensible alors j'ai fait comme ça :

donc un fichier include j'ai ca : (connexion.php)
######### CONNEXION A LA BDD
define('SERVEUR','######');
define('USER','######);
define('PASSSQL','######');
define('BASE','######');

$mysqli = new mysqli(SERVEUR, USER, PASS, BASE);
if ($mysqli->connect_error) 
{
	die('Erreur de connexion (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}



ensuite je crée ma class, par exemple une classe de news : (news.class.php)
class News
{
	var $id;
	var $titre;
	var $contenu;
	var $image;
	var $url;
	
	function News($id,$titre,$contenu,$image,$url) {
		$this->id = $id;
		$this->titre = $titre;
		$this->contenu = $contenu;
		$this->image = $image;
		$this->url = $url;
	}
	
	function Afficher_News() {
		$affiche='<li>';
		$affiche.='';
		if (!empty($this->image)) {

			$width=RetailleImg("photos/".$this->image,'height',195);
			$affiche.='<img src="/photos/'.$this->image.'" width="'.$width.'" height="195" '.altitle(stripslashes($this->titre),0).' />';
		}
		$affiche.='<h2>'.stripslashes($this->titre).icone('photo','/photos/upload.php?type=news&id='.$this->id).icone('supprimer','news.php?id='.$this->id.'&file=del').icone('modifier','news.php?id='.$this->id.'&file=mod').'</h2>'."\n";
		$affiche.=AffTxt($this->contenu);
		
		if (!empty($this->url)) {
			$affiche.='<br /><br /><p><a href="'.$this->url.'"';
			if (mb_eregi('http://',$this->url)) { $affiche.=' target="_blank"'; }
			$affiche.='>[+ d\'infos]</a></p>';
		}
		$affiche.='</li>'."\n";
		
		return $affiche;
	}
}


et ensuite dans ma page d'affichage de news (news.php)
include("inc/Class/news.class.php");

$sql_news = "select * from TABLENEWS where .......";
$req_news = $mysqli->query($sql_news) or die('Erreur SQL news !<br />'.$sql_news.'<br />'.$mysqli->error);
if ($req_news->num_rows)
{
	
	while ($news = $req_news->fetch_assoc()) {
		$actu = new News($news['id_news'],$news['titre'],$news['contenu'],$news['image'],$news['url']);
		echo $actu->Afficher_News();
	} // fin boucle
	
} // fin si resultat ok 
$req_news->free();


bon, je ne sais pas si c'est totalement optimiser, mais ca marche bien :)
bon courage !

et encore merci a tous pour l'aide, et désolé pour la réponse et solution tardive !
2
Anoen Messages postés 196 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 11 septembre 2013 25
3 janv. 2012 à 12:49
Bonjour,

Ah enfin des questions intéressantes ^^
Alors ce que je fais moi c'est une classe qui possède toutes mes fonctions sql de base.
Par exemple (j'utilise que PDO) :
class myDatabase{

private $_id;
private $_dbname;
private ... etc
....

//Fonction de select *
public function fetchAll($nomtable){
    $result = mysql_query("SELECT * FROM ".$nomtable);
   
    if(mysql_num_rows($result) != 0){
        while($row=mysql_fetch_array($result)){
          foreach($row as $key=>$value){
             $returnValue[$key]=$value;
          }
         }
   }else{
     $returnValues = "";
   }
   return $returnValues; //Retourne un tableau ou vide
}
}


Ensuite comme toi je fais une classe "objet" et je l'extend à ma classe myDatabase.

class Amis extends myDatabase{
   public $prenom;
   public $nom;
   etc....

    public __construct() {
       $this->prenom=$prenom;
       $this->nom=$nom;
    }
}


Ainsi dans mon fichier "principal" j'ai plus qu'à faire :

    $amis = new Amis();
    $listeAmis = $amis->fetchAll($nomtable);

    // Et l'affichage : 
    if(!empty($listeAmis){
    foreach($listeAmis as $amis){

         echo $amis['nom'];
         echo $amis['prenom'];
         ....
         etc
    }else{
       echo "Pas d'amis";
   }


Voilà j'espère que ça t'aidera. N'hésite pas à demander si des choses te paraissent floues, à force de travailler en objet je ne connais plus que ça. Le principe est toujours d'en faire le plus possible dans les classes "métier" (comme myDatabase ici) pour en avoir le moins à écrire dans les fichiers où on récupère et affiche le résultat final.
1
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
4 janv. 2012 à 10:02
<citation>Ah enfin des questions intéressantes ^^ </citation>
merci :) je me trouvai pourtant assez bete de poser ce genre de question ! :)

et en tout cas merci beaucoup !
ta proposition m'aide beaucoup en terme de compréhension du sujet, et en terme pédagogique. c tres clair !

je vasi essayer de me trouver ou de faire une petite class DataBase, et appliquerai ton exemple pour le reste .
je pense que je tiens le bon bout !

je reviendrai ici pour y mettre ma solution, ca peut toujours servir puisque je ne la trouve nulle part ailleurs !

merci encore !
0
AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
2 févr. 2012 à 15:12
Bonjour,
Avez-vous trouvé la solution ?
0