Pb de gestion de classe !! help me !!!!!!!

Résolu/Fermé
frederic92 Messages postés 23 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 3 avril 2006 - 21 nov. 2005 à 11:16
 groolot - 29 avril 2007 à 13:01
Bonjour,
je me lance dans la programmation objet en php mais je suis pas encore tout a fais au point c pour cela je vous poste ce message.

( j'utilise php 4 )

Voila mon pb j'ai une 2 classe et un formulaire

la première classe es mysql :

<?php

class mysql
{
var $sql_serveur;
var $sql_utlisateur;
var $sql_password;
var $sql_bd;
var $connection_sql;
var $select_bd;
var $resultat;
var $sql_debug;
var $connection_verif;
var $nb_requete;
var $erreur;
var $message_erreur;

//constructeur
function mysql($serveur, $utlisateur, $password, $bd, $debug, $erreur)
{
$this->sql_serveur = $serveur;
$this->sql_utilisateur = $utlisateur;
$this->sql_password = $password;
$this->sql_bd = $bd;
$this->sql_debug = $debug;
$this->message_erreur = $erreur;
$this->resultat = array();
$this->connection_verif = 0;
$this->connection();
}

//fonction de connecti+on a mysql
function connection()
{
if($this->connection_verif == "0")
{
$this->connection_sql = @mysql_connect($this->sql_serveur, $this->sql_utilisateur, $this->sql_password);
if(!$this->connection_sql)
{
$this->mysql_erreur();
}
else
{
$this->selection_bd();
}
}
}

//fonction de selection de la base de donnée
function selection_bd()
{
$this->select_bd = @mysql_select_db($this->sql_bd, $this->connection_sql);
if(!$this->select_bd)
{
$this->mysql_erreur();
}
else
{
$this->connection_verif = 1;
}
}

//fonction de déconnexion de la base de donnée
function deconnexion()
{
mysql_close($this->connection_sql);
}

//fonction d'execution de requête
function requete($requete, $p)
{
$this->resultat[$p] = mysql_query($requete);
$this->nb_requete++;
if(!$this->resultat[$p])
{
$this->mysql_erreur();
}
}

//fontion qui retourne les donnée dans un tableau grace a fetch array
function resultat($p)
{
return @mysql_fetch_array($this->resultat[$p]);
}
//fontion qui retourne une ligne de résultat MySQL sous la forme d'un objet
function resultat_object($p)
{
return @mysql_fetch_object($this->resultat[$p]);
}

//fontion qui retourne une ligne de résultat MySQL sous la forme d'un tableau associatif
function resultat_assoc($p)
{
return @mysql_fetch_assoc($this->resultat[$p]);
}
//fonction permettant de compter le nombre de resultat trouvé
function nb_resultat($p)
{
return @mysql_num_rows($this->resultat[$p]);
}
//function d'affichage des erreur mysql
function mysql_erreur()
{
if($this->sql_debug == 0)
{
echo $this->message_erreur;
}
elseif($this->sql_debug == 1)
{
$this->erreur = @mysql_error($this->connection_sql);
$message = "une erreur mysql est survenue : <br /> <form name='mysql'><textarea rows='15' cols='60'>".$this->erreur."</textarea></form>";
echo $message;
}
}
}


/*
--__Information sur la classe__--

connection : automatique

deconnection : $sql->deconnexion()

requete : $sql->requete($requete,$p)

fetch_array : $sql->resultat($p)
$p es numero de la requette

nb_resultat : sql->nbresultat($p)

nb de requete :$sql->nb_requete
*/

?>

La seconde es pays :

<?php

include("../classes/mysql.class.php");

class pays
{
//listage de tout les pays present en base
var $id;
var $nom_pays
function pays($id)
{
// recuperation des variables

}
function list_all()
{
$this->$db = new mysql;
$this->$result=$db->requete("SELECT nom_pays FROM pays ORDER BY nom_pays ASC",0);
return $result;

}
}
?>


Le code php de la liste déroulante de mon formulaire :


Et voici le champ de formulaire sur quoi joue ces 2 classes, je veut alimenter grâce a ce script une liste déroulante avec des nom de pays pressent en base de données

<tr>
<td>
<div class="attributename">Pays</div></td>
<td class="attributeinput">

<select name="pays">
<?
include("../classes/pays.class.php");
$pays= new pays();
print_r($pays->list_all());


if( $result = result(0) )
{
echo "<option>".$val["nom_pays"]."</option>\n";
}

?>
</select>
</tr>

Je vous remercie par avance de votre aide !!

Frederic

20 réponses

Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
21 nov. 2005 à 12:07
salut =)

et quel est le problème ?
ça ne marche pas ? un message d'erreur peut-être ?
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
21 nov. 2005 à 12:08

( j'utilise php


Ca n'est pas Php 5 qui inclus la notion de classe ? ! ! !


Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
21 nov. 2005 à 12:14
non, c'est bien la version 4, par contre la version 5 apporte des choses comme le constructeur, les variables privées, etc...
0
frederic92 Messages postés 23 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 3 avril 2006 6
21 nov. 2005 à 12:14
php 4 gere egalement les classe,

le pb que j'ai es que ma liste deroulante ne s'allimente pas, alors qu'elle le devrais avec le resultat de la requette.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
21 nov. 2005 à 12:23
Pour moi le soucis vient p'tet du fait que dans ta classe pays au sein de la fonction list_all tu fais $this->$db = new mysql;

le soucis est que tu fais appel a une fonction qui n'est pas définie dans ta classe (en + tu mets un $this ) alors que l'attribut $db ne fais pas partit de ta classe 'pays'.
je pense que tu devrais donc voir un peu du coté de l'héritage, ce qui te permettrai d'avoir accès aux fonction de ta classe mysql au sein de ta classe pays..

au fait aussi tu mets // constructeur dans ta classe mysql mais c'est un abbus de langage car dans le cas présent ça n'en est pas un vrai étant donné qu'il ne s'éxécute pas lors de l'instantiationde ta classe...

Voilà pour moi ;P

Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
21 nov. 2005 à 12:29
et pour moi, la liste html ne fonctionne pas comme tu l'as fait :
<SELECT>
<OPTION value='opopop'>OPOPOP
<OPTION value='opopop2'>OpOpOp 2
</SELECT>

on a pas besoin de refermer la balise.
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
21 nov. 2005 à 14:15
on a pas besoin de refermer la balise.

t'es sur pour la select ? ! ? !

Moi à la rigueur pour etre puritain j'aurai mis :

<SELECT name="menu">
<OPTION value='opopop'/>OPOPOP
<OPTION value='opopop2'/>OpOpOp 2
</SELECT>


Mais je pense que le soucis vient pas mal aussi de ce que j'ai signalé + haut . ..

Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
0
frederic92 Messages postés 23 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 3 avril 2006 6
21 nov. 2005 à 14:42
<select name="pays">
<?
include("../classes/pays.class.php");
$pays=new pays();
$test = $pays->result;
print_r($test);


if( $result = result(0) )
{
echo "<option value =".$val["nom_pays"]."/>".$val["nom_pays"]."\n";
}
?>

</select>



ce serais plus ca selon vous alors ?
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
21 nov. 2005 à 14:47
print_r($test);

Ca t'affiches quelque chose ça ?!?!

Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
0
frederic92 Messages postés 23 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 3 avril 2006 6
21 nov. 2005 à 15:02
toujours rien ! sniffffffffff la liste ne remplis pas !!
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
21 nov. 2005 à 15:21
Yes c'est bien ce que je pensais donc pour le moment le code du menu déroulant en html n'a rien a voir ... je te conseillerai de relire mon message n° 5 car je pense que je n'y ai pas dit que des conneries :D
t'es partis sur la piste du html qui ne servait a rien . . . :P

dis ce que t'en penses de mon message. . .


Zep3k!GnO
-->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi."
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
21 nov. 2005 à 15:27
Alors, pour ce qui est des balises, il faut bien fermer la </SELECT> mais pas les <OPTION>.
mais comme tu dis, rien à voir avec le souci du moment...

je suis d'accord avec toi, $db ne fais pas parti de la classe pays,donc ça ne peux pas marcher. D'ailleurs il dervait s'afficher un message d'erreur.

mais je ne ferais pas d'héritage, du point de vue objet ça n'aurait pas de sens.

et pour le constructeur, je m'étais trompé, il y en avait aussi en php4, je viens d'aller voir sur le net (http://www.portix.be/wiki/index.php/La_programmation_Orient%C3%A9e_Objet_en_PHP4#Le_constructeur.2C_l.27instanciation)
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
21 nov. 2005 à 15:33
tu fais ça également :
 $this->$result=$db->requete(...
mais tu remarqueras que ta fonction requete() ne renvoie rien...
donc tu ne peux pas récupérer tes pays.
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
21 nov. 2005 à 16:31
Affirmatif mon colonel :P


juste "je ne ferais pas d'héritage, du point de vue objet ça n'aurait pas de sens"--> pourquoi ?! ?!

Zep3k!GnO
-->kurtis jackson:"On est des rangers mec, des rangers."
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
21 nov. 2005 à 16:47
ben il faut traduire des diagrammes en français :
- "le pays hérite de la base de données" :-/
- "le pays utilise la base de données" :-D c'est mieux !

en fait s'il y aurait héritage, ce serait par exemple qu'il y aurait une classe continent, et là la classe pays pourrait hériter de continent.

Mais dans ce cas-là, il n'y aucune raison de faire un héritage.

Enfin du moins, c'est ce que je ferais ;-)
0
frederic92 Messages postés 23 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 3 avril 2006 6
21 nov. 2005 à 17:09
C claire qu'au point de vue logique de l'héritage tu as entièrement raison Luffy !! Après, c vrais que s'il un aévais héritage ça simplifierais un peut le code
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
21 nov. 2005 à 17:10
Okay c'est une question de philosophie de l'héritage , c'est bien vrai ce que tu dis la ... Zy avait pô penser ^^ hi hi hi

Mais ça peut se faire non ?! meme si c'est pas super top moumouthe ...

Zep3k!GnO
-->kurtis jackson:"On est des rangers mec, des rangers."
0
frederic92 Messages postés 23 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 3 avril 2006 6
21 nov. 2005 à 17:14
lol oui je crois c la façon la plus simple même si ça va pas plaire Luffy !!

L’application va fonctionner ! Mais c après si je veut réutiliser les classe dans une autre appli ça n'auras plus trop de sens !!
0
Luffy =) Messages postés 365 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 mai 2006 109
21 nov. 2005 à 17:34
lol oui je crois c la façon la plus simple même si ça va pas plaire Luffy !!
ha ha, bon ça va, je ne vais pas être trop vexé, t'inquiètes pas !

Pour des petites applis web comme ça, c'est pas trop grave ! mais quand c'est un gros projet, il vaut mieux faire une bonne étude des classes avant de se lancer dans le code !

Mais pour en revenir à ton problème ça avance ?
0
class pays 
{ 
//listage de tout les pays present en base 
var $id; 

var $nom_pays;
function pays($id) 
{ 
// recuperation des variables 

}	
function list_all() 
{ 
$this->$db = new mysql; 
$this->$result=$db->requete("SELECT nom_pays FROM pays ORDER BY nom_pays ASC",0); 
return $result; 

} 
} 



Il ne manquait pas un ";" dans le code de la classe pays ?
var $nom_pays;
0
Houla ! mais j'avais pas vu la date de publication ... je suis vachement à la bourre moi. en même temps j'ai eu le temps d'y réfléchir au problème.

bon ben acte manqué et tout le reste ...
0