Problème undifined fonction pourtant définie

cs_gourby Messages postés 8 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 1 avril 2005 - 1 avril 2005 à 14:23
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 2 avril 2005 à 20:27
Bonjour,

j'ai un gros problème:

Fatal error: Call to undefined function: affichecaddie() in /home/arobazcr/www/2eaux-new/commande/panier.php on line 34

Pourtant la fonction existe. Celà fonctionnai très bien avant que je rajoute les frais de port, maintenant ce la ne fonctionne plus et je ne sais pas pourquoi.
De plus, aucune valeur n'est renvoyée vers mon caddie quand je veux ajouter un article.

Voila le code de ma classe.


Code:
,
----

<?
class gestionCaddie {
// Eléments de notre panier
var $items;
//var $nbrArticle;
/**
@constructor fait rien de special done la structure de donnees
*/
function gestionCaddie()
{
$this->items = array () ;
//$this->nbrArticle = 0 ;
}

/**
@param array d'article ajoute une liste d'article au panier
la clef est l'id de l'article et la valeur associée la quantite
*/
function addListeArticle($attributeArray = NULL)
{
global $db ;
if (! is_array($attributeArray) )
return NULL ;

$param = implode ( ',' , array_keys($attributeArray) ) ;

$sql_article = '
select
id ,
id as idArticle,
idCategorie ,
designation_fr,
descriptif_fr,
designation_es,
descriptif_es,
designation_pt,
descriptif_pt,
prixHT,
reference
from article
WHERE id in ' . '(' .$param . ')' ;
//debug ($db->getAssoc($sql_article, TRUE, $param) ) ;
//debug ($db->getAssoc($sql_article, FALSE , $param)[42] ) ;
//debug ( $test ) ;
$articleArray = $db->getAssoc($sql_article, TRUE, $param) or die(mysql_error());
//debug ($db->last_query, '$db->last_query' ) ;
foreach ($articleArray as $key => $value)
{
//debug ( new article ($value), 'new article ($value)' ) ;
$this->items[$key]['article'] = new article ($value) ;
$this->items[$key]['quantite'] = 1;
$this->items[$key]['port'] = 0;
}
//debug ( $this ) ;
}

function addArticle($_article, $_quantite, $_port)
{
//debug ($_article );
$idArticle = $_article->getIdArticle() ;
//debug ($_article->getIdArticle(), '$_article->getIdArticle()');
$this->items[$idArticle]['article'] = $_article;
$this->items[$idArticle]['quantite'] += $_quantite;
$this->items[$idArticle]['port'] += $_port;
//$this->nbrArticle++ ;
}

}
function afficheCaddie($tpl, $bloc, $lang = NULL )
{
$tpl->setCurrentBlock($bloc);
foreach($this->items as $key => $value)
{
// debug (&$key) ;
// debug ($value) ;
$article =& $value['article'] ;

//debug (getPrixLigneHT(&$article)) ;
//return NULL ;
//debug ($article) ;
$article->afficheArticle(&$tpl, $lang ) ;
$tpl->setVariable(array( 'prixLigneHT' => $this->getPrixLigneHT($article) ,
'port' => $this->items[$article->idArticle]['port'],
'quantite' => $this->items[$article->idArticle]['quantite'],)) ;
$tpl->parse($bloc);
}
}

function getPrixLigneHT($article)
{
return sprintf ("%.2f", ($article->prixHT + $this->items[$article->idArticle]['port'])* $this->items[$article->idArticle]['quantite']);
}

function afficheTotal($tpl,$bloc)
{
$totalHT = $this->getTotalHT();
$totalTTC = $this->getTotalTTC();
$totalTVA = $this->getTotalTVA($totalHT , $totalTTC);

$tpl->setCurrentBlock($bloc);
$tpl->setVariable(array( 'totalTVA' => sprintf ("%.2f", $totalTVA ),
'totalHT' => sprintf ("%.2f", $totalHT),
'totalTTC' => sprintf ("%.2f", $totalTTC ), )) ;
$tpl->parse($bloc);
}

function delArticle($_article)
{
// test si le parametre en object
// et recherhce son indexe
if (is_object ($_article) === TRUE )
$idArticle = $_article->getIdArticle() ;
else
$idArticle = $_article ;
// si le parametre n'est pas objet c'est son index
//debug ($this->items) ;
if (array_key_exists($idArticle, $this->items)=== TRUE)
unset ($this->items[$idArticle]) ;
}

function getArticle($idArticle)
{
return $this->items[$idArticle]['article'];
}
function getArticleQantite($idArticle)
{
return $this->items[$idArticle]['quantite'];
}
function getport($idArticle)
{
return $this->items[$idArticle]['port'];
}
function getNbrArticle()
{
return count( $this->items) ;
}

function getTotalHT()
{
$total = 0 ;
if (count($this->items) > 0)
{
foreach ($this->items as $key => $value)
{
//debug ($value['article'], '$value[article]') ;
//debug ($value['article']->prix, '$value[article]->prix') ;
//debug ($value['quantite'], '$value[quantite]') ;
$total += ($value['article']->prixHT + $value['port']) * $value['quantite'];
}
}
return (float) $total ;
}
function getTotalTTC00()
{
//return sprintf ("%.2f", $this->getTotalTTC() * 100 ) ;
$t = sprintf ("%.2f", $this->getTotalTTC() ) ;
$t = sprintf ("%u", $t * 100 ) ;
//return (float) sprintf ("%u", $this->getTotalTTC() * 100 );
return $t ;
}
function getTotalTVA($_totalHT , $_totalTTC)
{if (isset($_totalHT) TRUE && isset($_totalTTC) TRUE )
return (float) $_totalTTC - $_totalHT ;
else
return (float) getTotalTTC() - getTotalHT();
}

function getTotalTTC()
{
$total = 0 ;
if (count($this->items) > 0)
{
foreach ($this->items as $key => $value)
{
//debug ($value['article'], '$value[article]') ;
//debug ($value['article']->prix, '$value[article]->prix') ;
//debug ($value['quantite'], '$value[quantite]') ;
$total += $value['article']->prixTTC * $value['quantite'];
}
}
return (float) $total ;
}
function sauvegarde($client, $commande)
{
global $db;
if ( $client->id == '' )
return NULL ;
if ( $commande->id == '' )
return NULL ;
//delete des anciens object en cas de mise a jour$sqlDelete 'DELETE from art2cmd where idCommande ?' ;
$result = $db->query($sqlDelete, array( $commande->id ) );
//debug ( $db->last_query , '$db->last_query ' ) ;
foreach ( $this->items as $value)
{
//debug ($value) ;
$article =&$value['article'] ;
$article->sauvegarde(&$commande, $value['port'] );
$article->sauvegarde(&$commande, $value['quantite'] );

}
}
?>

GOURBY

14 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 avril 2005 à 14:46
Hello,



je jette un oeil a ta classe, mais tu peux aussi montrer la partie du script ou tu appelles cette fonction ?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 avril 2005 à 14:48
Ok c'est bon, pas la peine.



Tu appelles affichecaddie()

et c'est afficheCaddie().



avec un C majuscule...
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 avril 2005 à 18:22
Salut,



profite-en pour remplacer le <? par <?php



a+

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 avril 2005 à 19:33
faut mettre des majuscules uniquement aux constructeurs, on s'y retrouves mieux comme ça !

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0

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

Posez votre question
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 avril 2005 à 19:43
ou ne pas en mettre du tout

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 avril 2005 à 21:20
bcp de class en possèdent... autant suivre le mouvement...

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 avril 2005 à 21:28
Je poursuis ton raisonnement :



Beaucoup de sites Web sont mal codés...



(complétez la phrase) ^^




<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
cs_gourby Messages postés 8 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 1 avril 2005
1 avril 2005 à 21:41
Même chose sans la majuscule, les deux fichiers sont vérifiés et ont la même syntaxe afficheCaddie()

GOURBY
0
cs_gourby Messages postés 8 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 1 avril 2005
1 avril 2005 à 22:41
je viens de faire un debug

je m'apperçoit que [quantité] prend la valeur que devrait avoir [port]

Par contre pas de [port] dans le debug

voici le résultat du debug si quelqu'un peut y trouver quelque chose qui puisse m'aider.

$_SESSION avant le connect
Array
(
[objet] => Array
(
[caddie] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => gestioncaddie
[items] => Array
(
[94] => Array
(
[article] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => article
[idArticle] => 94
[designation_fr] => Cuve en béton vibré 3000L
[descriptif_fr] => Cuve en béton vibré
volume : 3000 L
dimensions : 235x118 cm
hauteur : 167 cm
poids : 1300 kg
Garantie : 10 ans.
[descriptif_es] =>
[designation_pt] =>
[descriptif_pt] =>
[designation_es] =>
[pPhoto] => pCBV3000.jpg
[gPhoto] => gCBV3000.jpg
[pdf] =>
[prixTTC] => 541.788
[prixHT] => 453
[TVA] => 88.788
[reference] => CBV3000
[idCategorie] => 2
[enVente] =>
)

[quantite] => 156
)

)

)

[client] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => client
[id] =>
[titre] =>
[nom] =>
[prenom] =>
[adresse] =>
[cp] =>
[ville] =>
[pays] =>
[telfixe] =>
[telportable] =>
[fax] =>
[mail] =>
[titre_liv] =>
[nom_liv] =>
[prenom_liv] =>
[cp_liv] =>
[ville_liv] =>
[adresse_liv] =>
[pays_liv] =>
[telfixe_liv] =>
[telportable_liv] =>
[fax_liv] =>
[mail_liv] =>
)

[commande] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => commande
[id] =>
[idClient] =>
[prixTotalHT] =>
[payer] => 0
[date] => 2005-04-01 22:21:26
)

[rainPlan] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => rainplan
[batiment] =>
[precipitation] =>
[ressource] =>
[besoin] =>
[totalBesoin] =>
[totalRessource] =>
[facteurDeReserve] =>
[volumeCuve] =>
[pompe] =>
[usage] =>
[prixM3TTC] =>
)

)

[lang] => fr
[intialisation] => 1
[serialized] => Array
(
[caddie] => O:13:"gestioncaddie":1:{s:5:"items";a:1:{i:94;a:2:{s:7:"article";O:7:"article":16:{s:9:"idArticle";s:2:"94";s:14:"designation_fr";s:25:"Cuve en béton vibré 3000L";s:13:"descriptif_fr";s:117:"Cuve en béton vibré
volume : 3000 L
dimensions : 235x118 cm
hauteur : 167 cm
poids : 1300 kg
Garantie : 10 ans.";s:13:"descriptif_es";s:0:"";s:14:"designation_pt";s:0:"";s:13:"descriptif_pt";s:0:"";s:14:"designation_es";s:0:"";s:6:"pPhoto";s:12:"pCBV3000.jpg";s:6:"gPhoto";s:12:"gCBV3000.jpg";s:3:"pdf";N;s:7:"prixTTC";d:541.78800000000001091393642127513885498046875;s:6:"prixHT";s:3:"453";s:3:"TVA";d:88.7879999999999967030817060731351375579833984375;s:9:"reference";s:7:"CBV3000";s:11:"idCategorie";s:1:"2";s:7:"enVente";N;}s:8:"quantite";s:3:"156";}}}
[client] => O:6:"client":23:{s:2:"id";N;s:5:"titre";N;s:3:"nom";N;s:6:"prenom";N;s:7:"adresse";N;s:2:"cp";N;s:5:"ville";N;s:4:"pays";N;s:7:"telfixe";N;s:11:"telportable";N;s:3:"fax";N;s:4:"mail";N;s:9:"titre_liv";N;s:7:"nom_liv";N;s:10:"prenom_liv";N;s:6:"cp_liv";N;s:9:"ville_liv";N;s:11:"adresse_liv";N;s:8:"pays_liv";N;s:11:"telfixe_liv";N;s:15:"telportable_liv";N;s:7:"fax_liv";N;s:8:"mail_liv";N;}
[commande] => O:8:"commande":5:{s:2:"id";N;s:8:"idClient";N;s:11:"prixTotalHT";N;s:5:"payer";i:0;s:4:"date";s:19:"2005-04-01 22:21:26";}
[rainPlan] => O:8:"rainplan":11:{s:8:"batiment";N;s:13:"precipitation";N;s:9:"ressource";N;s:6:"besoin";N;s:11:"totalBesoin";N;s:14:"totalRessource";N;s:16:"facteurDeReserve";N;s:10:"volumeCuve";N;s:5:"pompe";N;s:5:"usage";N;s:9:"prixM3TTC";N;}
)

)

$_SESSION apres le connect
Array
(
[objet] => Array
(
[caddie] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => gestioncaddie
[items] => Array
(
[94] => Array
(
[article] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => article
[idArticle] => 94
[designation_fr] => Cuve en béton vibré 3000L
[descriptif_fr] => Cuve en béton vibré
volume : 3000 L
dimensions : 235x118 cm
hauteur : 167 cm
poids : 1300 kg
Garantie : 10 ans.
[descriptif_es] =>
[designation_pt] =>
[descriptif_pt] =>
[designation_es] =>
[pPhoto] => pCBV3000.jpg
[gPhoto] => gCBV3000.jpg
[pdf] =>
[prixTTC] => 541.788
[prixHT] => 453
[TVA] => 88.788
[reference] => CBV3000
[idCategorie] => 2
[enVente] =>
)

[quantite] => 156
)

)

)

[client] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => client
[id] =>
[titre] =>
[nom] =>
[prenom] =>
[adresse] =>
[cp] =>
[ville] =>
[pays] =>
[telfixe] =>
[telportable] =>
[fax] =>
[mail] =>
[titre_liv] =>
[nom_liv] =>
[prenom_liv] =>
[cp_liv] =>
[ville_liv] =>
[adresse_liv] =>
[pays_liv] =>
[telfixe_liv] =>
[telportable_liv] =>
[fax_liv] =>
[mail_liv] =>
)

[commande] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => commande
[id] =>
[idClient] =>
[prixTotalHT] =>
[payer] => 0
[date] => 2005-04-01 22:21:26
)

[rainPlan] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => rainplan
[batiment] =>
[precipitation] =>
[ressource] =>
[besoin] =>
[totalBesoin] =>
[totalRessource] =>
[facteurDeReserve] =>
[volumeCuve] =>
[pompe] =>
[usage] =>
[prixM3TTC] =>
)

)

[lang] => fr
[intialisation] => 1
[serialized] => Array
(
[caddie] => O:13:"gestioncaddie":1:{s:5:"items";a:1:{i:94;a:2:{s:7:"article";O:7:"article":16:{s:9:"idArticle";s:2:"94";s:14:"designation_fr";s:25:"Cuve en béton vibré 3000L";s:13:"descriptif_fr";s:117:"Cuve en béton vibré
volume : 3000 L
dimensions : 235x118 cm
hauteur : 167 cm
poids : 1300 kg
Garantie : 10 ans.";s:13:"descriptif_es";s:0:"";s:14:"designation_pt";s:0:"";s:13:"descriptif_pt";s:0:"";s:14:"designation_es";s:0:"";s:6:"pPhoto";s:12:"pCBV3000.jpg";s:6:"gPhoto";s:12:"gCBV3000.jpg";s:3:"pdf";N;s:7:"prixTTC";d:541.78800000000001091393642127513885498046875;s:6:"prixHT";s:3:"453";s:3:"TVA";d:88.7879999999999967030817060731351375579833984375;s:9:"reference";s:7:"CBV3000";s:11:"idCategorie";s:1:"2";s:7:"enVente";N;}s:8:"quantite";s:3:"156";}}}
[client] => O:6:"client":23:{s:2:"id";N;s:5:"titre";N;s:3:"nom";N;s:6:"prenom";N;s:7:"adresse";N;s:2:"cp";N;s:5:"ville";N;s:4:"pays";N;s:7:"telfixe";N;s:11:"telportable";N;s:3:"fax";N;s:4:"mail";N;s:9:"titre_liv";N;s:7:"nom_liv";N;s:10:"prenom_liv";N;s:6:"cp_liv";N;s:9:"ville_liv";N;s:11:"adresse_liv";N;s:8:"pays_liv";N;s:11:"telfixe_liv";N;s:15:"telportable_liv";N;s:7:"fax_liv";N;s:8:"mail_liv";N;}
[commande] => O:8:"commande":5:{s:2:"id";N;s:8:"idClient";N;s:11:"prixTotalHT";N;s:5:"payer";i:0;s:4:"date";s:19:"2005-04-01 22:21:26";}
[rainPlan] => O:8:"rainplan":11:{s:8:"batiment";N;s:13:"precipitation";N;s:9:"ressource";N;s:6:"besoin";N;s:11:"totalBesoin";N;s:14:"totalRessource";N;s:16:"facteurDeReserve";N;s:10:"volumeCuve";N;s:5:"pompe";N;s:5:"usage";N;s:9:"prixM3TTC";N;}
)

)

GOURBY
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 avril 2005 à 16:33
je m'incruste la aussi lol...parce que je ne suis pas d'accord (pas tout a fait) pour les majuscules : Il faut surtout respecter une nomenclature, la sienne.
Perso, je prefere utiliser le style php pour les fonctions (ou classes) : des undescores entre chaque mot, et le style jave pour les variables (ex : maVariable)
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 avril 2005 à 18:40
Bah ouais, tu respectes une rigueur de codage dans tout ton code :-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 avril 2005 à 18:53
disons que tu ne rentres pas dans le mouvement...

en C++, on fait new String, en js, aussi, on fait new Array, et
ensuite, array.length; en règle générale, les programmeurs utilisent
les majuscules pour les class (et par conséquent, les constructeurs et
destructeurs...) les autres fonctions ou variables n'ont pas de
majuscules (sauf en php ou certaines variables ($_POST par exemple))
ont des majuscules...


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 avril 2005 à 19:33
En même temps c'est pas parce que tu ne suis pas le mouvement que tu codes mal, bien au contraire :-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 avril 2005 à 20:27
Ben ouais lol...
L'important c'est que ce soit lisible. Pour que ce soit lisible, il faut coller a un style, point barre. Evidemment si tes fonctioins c'est une fois MaFonction, puis maFonction, uis MAFONCTION, puis ma_fonction, puis...bon j'arrete lol.
Mais chaque language a ses habitudes...
et en php, ma foi, je prefere suivre celles de ses createurs. Pour les variables c'est moins clair puisque les leurs sont en majuscule en general (constantes, globals etc...) mais je trouve ca un peu agressif...
0
Rejoignez-nous