Fonction include sql dans un objet

achovovich Messages postés 17 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 4 janvier 2006 - 28 déc. 2005 à 23:32
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; }
}

19 réponses

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 déc. 2005 à 01:18
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.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 déc. 2005 à 12:34
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.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 déc. 2005 à 14:39
"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 !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 déc. 2005 à 14:46
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 :-)
0

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

Posez votre question
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 déc. 2005 à 15:31
Bah je crois que c'est pas une classe de base de donnée qu'il essaye de faire :)
0
achovovich Messages postés 17 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 4 janvier 2006
29 déc. 2005 à 21:55
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
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
30 déc. 2005 à 13:19
"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 !
0
achovovich Messages postés 17 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 4 janvier 2006
30 déc. 2005 à 15:16
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();
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 janv. 2006 à 09:26
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);

';
}

}
0
achovovich Messages postés 17 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 4 janvier 2006
2 janv. 2006 à 10:33
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?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 janv. 2006 à 11:55
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 ?
0
achovovich Messages postés 17 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 4 janvier 2006
2 janv. 2006 à 23:44
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.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
3 janv. 2006 à 01:08
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 :)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 janv. 2006 à 09:17
Bon ben qu'est-ce qui ne marche pas alors, lol ??
0
achovovich Messages postés 17 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 4 janvier 2006
4 janv. 2006 à 09:15
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.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
4 janv. 2006 à 09:23
Et si tu sors les erreurs, sur l'insert, que se passe t il ? Quelles erreurs as tu ? (mysql_errno() et mysql_error() )
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
4 janv. 2006 à 15:20
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());
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
4 janv. 2006 à 15:37
Rhoo, on a été lent, sur ce coup... ;-)
0
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
lol

je m'en vais tester ca de suite.
Merci de votre patience ;)
0
Rejoignez-nous