Jump to content
Sign in to follow this  
seif_scalp

problème basique d'héritage de class

Rate this topic

Recommended Posts

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 :)

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other 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...

Edited by seif_scalp

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...