Aller au contenu

problème basique d'héritage de class


seif_scalp

Sujets conseillés

Bonjour,

j'ai un problème basique d'héritage de class, je viens de créer deux classes : la première qui me connect à la base de donnée et réalisé toutes les fonctions correspondantes et la seconde qui est l'extention de la première se nommant arti...

class sql_db
{

var $db_connect_id;
var $query_result;


function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
{

etc etc...

et la seconde

class arti extends sql_db {

public $db;

public function arti()
{
$this->sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true);
}

public function last_arti($num,$typ)

{

$tabarti = array();
$sql="SELECT * FROM arti WHERE typ='$typ' order by id DESC limit $num";
$result = $this->sql_query($sql) OR die(mysql_error());

while($aff = $this->sql_fetchrow($result));
{

$tabarti[$aff['id']] = array('pict' => $aff['pict'],'num' => $aff['num'],'typ' => $aff['typ']);

}

return $tabarti;

etc...

et enfin l'appel

$db = new sql_db('localhost','root','','bdd', false);

$manews = new arti();
$tab = $manews->last_arti(5,1);

foreach ($tab as $news_id=>$new)
{
echo '<b>'.$new[num].'</b>';
}

ce qui s'affiche a l'écran est : "No database selected"

ma faute est normalement au niveau de l'extension de classe, car j'ai vérifié chaque classe en autonome elles marchent toutes les deux ... je commence avec les class php et ça marche plutot bien jusque là ... l'extension de class c'est chaud ... :P

Merci d'avance pour votre aide :)

Lien vers le commentaire
Partager sur d’autres sites

Et si tu remplaçais

$db = new sql_db('localhost','root','','bdd', false);
$manews = new arti();

par

$manews = new arti('localhost','root','','bdd', false);

Et en ajoutant les différents paramètres dans le constructeur de arti.

Ca devrait être mieux.

Ton problème, c'est que tu instancies arti sans paramètre. Et accessoirement tu instancies

sql_db mais tu n'utilises plus l'objet créé après.

Je penses qu'avec un

error_reporting(E_ALL);

au début de ton script, tu aurais eu des warnings qui t'auraient mis sur la piste.

M

Lien vers le commentaire
Partager sur d’autres sites

Dans le constructeur de arti :

$sqlserver, $sqluser, $sqlpassword, $database, $persistency = true

Autant de variables qui n'existent pas, à mon avis le soucis vient de là. Comme le disait march, il faudrait que tu rajoute tout ça en paramètres au constructeur d'arti

Lien vers le commentaire
Partager sur d’autres sites

oui mais ds ce cas ca m'oblige a rédéclarer mysql en quelque sorte et c'est pas vraiment intéressant car dans ce cas l'héritage sert a rien ... ^^

j'y ai pensé aussi, mais c'est pas la solution de réécrire la déclaration de variable :P en fait j'ai surtout un problème de compréhension sur l'héritage si vous avez des tutos ou autre ^^ merci d'avance :)

Lien vers le commentaire
Partager sur d’autres sites

bon g finalement opter pour la solution que vous m'avez proposer c'est à dire initialiser dans ma class arti les valeur de sql_db mais je rencontre un nouveau problème ... il n'y a plus d'erreur mais ma boucle foreach n'affiche pas les valeurs savez vous si jme suis trompé ds le code ci-dessous :

class arti extends sql_db {

public $ids;
public $db;
public $lien;

public function arti()

{


$this->sql_db('localhost','root','','bdd', false);

}



public function last_arti()

{

$tabarti = array();
$sql="SELECT nid,id,typ,tiin,titr,tex FROM arti WHERE id='1' && typ='1' order by nid DESC";
$result = $this->sql_query($sql) OR die(mysql_error());

while($aff = $this->sql_fetchrow($result));
{

$tabarti[$aff['nid']] = array('titr' => $aff['titr'],'tex' => $aff['tex']);

}

return $tabarti;


}


};




$manews = new arti();
$manews->ids = $id;
$ta = $manews->last_arti();

foreach ($ta as $news_id=>$new)
{

echo '
<b>'.$new[titr].'</b>
<b>'.$new[tex].'</b>
';
}

si j'affiche directement $aff = $this->sql_fetchrow($result); -> echo $aff[titr]; ca m'affiche bien un élément donc aucune faute avant le while()

et donc jtrouve pas là ... :(

RESOLU : il fallait simplement enlever le ; après le while, faute bête...

Modifié par seif_scalp
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...