Fonction include sql dans un objet

Messages postés
17
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
4 janvier 2006
- - Dernière réponse : achovovich
Messages postés
17
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
4 janvier 2006
- 4 janv. 2006 à 22:03
Bonjour,

Je debute avec les objet en PHP et la je bloc sur une fonction qui fait un insert sql
Alors le select marche tres bien, mais l'insert ne veu pas sachant qu'il fonctionne bien si le code est mis en dehors de l'objet.

voila le code
Merci d'avance

function load($anim_id) { $value_query db_query("select * from " . TABLE_ANIMATEUR . " where anim_id '" . $anim_id . "'");
$value = db_fetch_array($value_query);
$this->id = $value['anim_id'];
$this->prenom = $value['anim_prenom'];
$this->nom = $value['anim_nom'];
$this->email_address = $value['anim_email'];
$this->date_created = $value['anim_date'];
}


function insert(){
$sql = "insert into " . TABLE_ANIMATEUR . " set ";
$sql .= "anim_prenom='" . ($this->prenom) . "',";
$sql .= "anim_nom='" . ($this->nom) . "',";
$sql .= "anim_email='" . ($this->email_address) . "';";
$sql .= "anim_date=now();";
mysql_query($sql);
if (db_query($sql))
{ return true; }
else
{ return false; }
}
Afficher la suite 

19 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
0
Merci
Quand on fais des demandes de query à une DB, on récupère aussi les erreurs que la DB peut générer. Dans ton cas, un mysql_error() va te dire tout de suite ce qui ne va pas.
Car la, mis à part le fait que :
"mysql_query($sql);
if (db_query($sql))
{ return true; }
else
{ return false; }
}"
ne sert à rien, je ne vois pas trop :o

Code trop court et incomplet pour débbuggage.
Commenter la réponse de FhX
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Hello,

bizarre ce code... $value_query db_query("select * from " . TABLE_ANIMATEUR . " where anim_id '" . $anim_id . "'");
$value = db_fetch_array($value_query);

c'est dans un objet...?
db_query est une fonction externe, et pas une méthode de ton objet...??
Après on a bien des $this ->...Mais pas sur db_query().

Puis : mysql_query suivi de db_query...? Tu effectues deux fois ta requête...?

Bref, comprends rien non plus.
Commenter la réponse de malalam
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
0
Merci
"c'est dans un objet...?" Pas forcément, ce ne sont pas des méthodes de classes, mais peut-être bien des fonctions hors classes.

Et c'est tout à fait possible ! :)
Mais je suis comme toi, je ne comprend rien à son code !
Commenter la réponse de FhX
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Je sais que c'est possible, mais c'est crade...lol.
Et puis ujne classe db devrait quand même intégrer une méthode db_query ()...pas faire appel à une fonction db_query.
M'enfin...
On verra s'il se manifeste :-)
Commenter la réponse de malalam
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
0
Merci
Bah je crois que c'est pas une classe de base de donnée qu'il essaye de faire :)
Commenter la réponse de FhX
Messages postés
17
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
4 janvier 2006
0
Merci
alors deja oui, la c'est une erreur de copier coller pour mysql_query et le db_query a la suite.
Sinon, oui, ce sont bien des fonctions de la class, mais peu etre ca ne se fai pas?

ma fonction load de la classe fonctionne tres bien

merci une fois de plus
Commenter la réponse de achovovich
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
0
Merci
"Sinon, oui, ce sont bien des fonctions de la class, mais peu etre ca ne se fai pas?" Qu'est ce qui est méthode de classe ... db_query() ? Si c'est ca, il faut utiliser $this->db_query() ou alors self::db_query().

Je ne suis pas sur que tu ais tout compris de l'approche objet, parce que c'est un peu confu quand même !
Commenter la réponse de FhX
Messages postés
17
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
4 janvier 2006
0
Merci
je veu dire que ces fonctions sont bien dans ma class.
Je veu pouvoir appeler depuis l'exterieur $MonObjet->insert(); apres avoir renseigner les differentes var

le db_query est donc dans la methode insert de ma class

Vu que ma methode de class load fonction et pas la insert, je me demande si on peu faire une requete insert a l'interieur d'une methode de class ou faut-il se servir de la class juste pour recuperer les info de la bdd.

en gros, je voudrai faire:

$MonObjet->nom = 'toto';
$MonObjet->prenom = 'machin';
$MonObjet->insert();
Commenter la réponse de achovovich
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Je ne comprends toujours pas, pour ma part...

Dans ton exemple, imaginons un objet très simple avec juste ces infos (php 4) :

class MonObjet {
var $nom = '';
var $prenom = '';

function insert () {
$sQuery = '
INSERT INTO
matable
(nom, prenom)
VALUES
($this -> nom, $this -> prenom);
// appel de la méthode db_query () : $this -> db_query ($sQuery);

';
}

}
Commenter la réponse de malalam
Messages postés
17
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
4 janvier 2006
0
Merci
la methode db_query est-elle une methode presente par defaut dans toute les class? car moi db_query est une fonction creer dans un fichier de fonction DB.
C'est peu etre ca qui amene la confusion?
Commenter la réponse de achovovich
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Et ta classe a accès à cette fonction ?

Dans ce cas, ça ne doit pas poser de problème.
J'ai vraiment du mal lol. Qu'est ce qui ne marche pas ?
Si tes variables $nom, $prenom sont déclarées dans ta classen, tu peux créer ta requête avec ces variables.
Le truc c'est que tu utilises $this. Ces variables sont elles bien dans une mathode de l'objet en cours ?
Commenter la réponse de malalam
Messages postés
17
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
4 janvier 2006
0
Merci
merci de ta perseverance

voila ma declaration de var:
class animateur {
var $id = '';
var $prenom = '';
var $nom = '';
var $email_address = '';
var $date_created = '';

et voila mes 2 methodes

function load($anim_id) { $value_query db_query("select * from " . TABLE_ANIMATEUR . " where anim_id '" . $anim_id . "'");
$value = db_fetch_array($value_query);
$this->id = $value['anim_id'];
$this->prenom = $value['anim_prenom'];
$this->nom = $value['anim_nom'];
$this->email_address = $value['anim_email'];
$this->date_created = $value['anim_date'];
}


function insert(){
$sql = "insert into " . TABLE_ANIMATEUR . " set ";
$sql .= "anim_prenom='" . ($this->prenom) . "',";
$sql .= "anim_nom='" . ($this->nom) . "',";
$sql .= "anim_email='" . ($this->email_address) . "';";
$sql .= "anim_date=now();";
if (db_query($sql))
{ return true; }
else
{ return false; }
}

la fonction db_query est bien accessible car ma fonction load l'utilise et celle-ci fonctionne bien.
Commenter la réponse de achovovich
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
0
Merci
Ah, donc c'est bon, moi c'était le double query qui me génait un peu :p

" function insert(){
$sql = "insert into " . TABLE_ANIMATEUR . " set ";
$sql .= "anim_prenom='" . ($this->prenom) . "',";
$sql .= "anim_nom='" . ($this->nom) . "',";
$sql .= "anim_email='" . ($this->email_address) . "';";
$sql .= "anim_date=now();";
if (db_query($sql))
{ return true; }
else
{ return false; }
}"

Pourquoi tu entoures tes arguments de classe par des parenthèses ?

function insert() {
$sql = "INSERT INTO ". TABLE_ANIMATEUR ." SET ";
$sql .= "anim_prenom='" . $this->prenom . "',";

$sql .= "anim_nom='" . $this->nom . "',";

$sql .= "anim_email='" . $this->email_address . "';";

$sql .= "anim_date= NOW();";

return ( db_query($sql) ) ? TRUE : FALSE;

}

Juste ca :)
Commenter la réponse de FhX
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Bon ben qu'est-ce qui ne marche pas alors, lol ??
Commenter la réponse de malalam
Messages postés
17
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
4 janvier 2006
0
Merci
ba ce qui ne marche pas, c'est que ca fai pas d'insert dans la DB.
pourtant si on execute le code en dehors, les inserts passe bien.
Commenter la réponse de achovovich
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Et si tu sors les erreurs, sur l'insert, que se passe t il ? Quelles erreurs as tu ? (mysql_errno() et mysql_error() )
Commenter la réponse de malalam
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
0
Merci
Tss jviens de relire sa requète :

$sql = "insert into " . TABLE_ANIMATEUR . " set ";
$sql .= "anim_prenom='" . ($this->prenom) . "',";
$sql .= "anim_nom='" . ($this->nom) . "',";
$sql .= "anim_email='" . ($this->email_address) . "';";
$sql .= "anim_date=now();";

Y'a des points virugle partout !!! Ca m'étonne pas que ca marche pas !!!! Et en plus, SET xx = 'xx' c'est pour un UPDATE ! Pas un INSERT !!!

$sql = "INSERT INTO ".TABLE_ANIMATEUR." (anim_prenom, anim_nom, anim_email, anim_date) VALUES ('".$this->prenom."', '".$this->nom."' , '".$this->email_address."', NOW() )";
mysql_query($sql) or die (mysql_error());
Commenter la réponse de FhX
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Rhoo, on a été lent, sur ce coup... ;-)
Commenter la réponse de malalam
Messages postés
17
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
4 janvier 2006
0
Merci
lol

je m'en vais tester ca de suite.
Merci de votre patience ;)
Commenter la réponse de achovovich