Problème undifined fonction pourtant définie

Signaler
Messages postés
8
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
1 avril 2005
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
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

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,



je jette un oeil a ta classe, mais tu peux aussi montrer la partie du script ou tu appelles cette fonction ?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ok c'est bon, pas la peine.



Tu appelles affichecaddie()

et c'est afficheCaddie().



avec un C majuscule...
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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>
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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>
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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>
Messages postés
8
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
1 avril 2005

Même chose sans la majuscule, les deux fichiers sont vérifiés et ont la même syntaxe afficheCaddie()

GOURBY
Messages postés
8
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
1 avril 2005

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
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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>
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
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
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
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>
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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...