Appel de méthode

Eléphant du PHP | 226 Messages

21 juin 2011, 16:30

Bonjour/ bonsoir,
Je cherche à créer dynamiquement un formulaire qui sera vide ou renseigné selon une action (ajout, modification) afin d’éviter d’avoir trois versions différentes du même fichier. Pour ce faire, j’ai commencé par écrire une classe. Le souci étant qu’il n’y a pas d’appel de cette classe. Je vais tâcher de décrire le contexte.
J’ai une page web composée par des inclusions de fichiers. Les classes (donc celle pour le formulaire) sont appelées à partir de cette page
Un utilisateur cherche un produit par l’intermédiaire d’un champ texte. La validation du formulaire fait appel à une méthode :
if (isset ($_POST['search_btn'])) {
    $gestion_fiches->getProduit_fiche($_POST['search_product']);
    …
}
Cette méthode est destinée à récupérer l’ensemble des informations concernant ce produit et à les afficher dans un fichier tiers, qui contient le formulaire que je cherche à modifier dynamiquement :
public function getProduit_fiche($getProduct_fiche) {
…
select = $this->db->prepare('SELECT info…) ;
try {
                    $select->execute();
                    $nbreLine = $select->rowCount();
                    if ($nbreLine > 0) {
                        $data = $select->fetch();
                        include '… /fiche_edition.php'; // affichage du formulaire
                        $select->closeCursor();
…
}
Quelques lignes de code de fiche_edition.php' :
<form name="modifFiche" method="post" action="fichier.php" target="_blank">
<table border="0" cellpadding="5" cellspacing="1" width="600">
…
<?php $formFiche->nomFiche(Common_functions::$content); ?>// affichage dynamique d’un champ texte, mais avec une autre classe
…
A l’affichage, j’obtiens :
- Notice: Undefined variable: formFiche in …\fiche_edition.php
- Fatal error: Call to a member function nomFiche() on a non-object in …\fiche_edition.php
Pourquoi ? Je ne comprends d’autant plus que dans ce même fichier, j’ai des informations venant de la méthode ‘ function getProduit_fiche($getProduct_fiche)’ qui s’affiche correctement !:
<td colspan="2"><?php echo $data->nom; ?></td>
Merci,
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

Mammouth du PHP | 672 Messages

21 juin 2011, 16:43

Bonjour.
- Notice: Undefined variable: formFiche in …\fiche_edition.php
- Fatal error: Call to a member function nomFiche() on a non-object in …\fiche_edition.php
- Note : la variable formFiche dans fiche_edition.php n'est pas définie.
- Erreur fatale : Appel de la fonction nomFiche() sur un "non-objet" dans fiche_edition.php

En clair : quand on travaille avec un objet, la première chose à faire est de le créer :mrgreen:
RTFM...

Eléphant du PHP | 226 Messages

22 juin 2011, 09:54

Bonjour,
Il était créé ! Mais dans le même fichier que sa classe. Suite à ton message, je l'ai instancié directement dans 'fiche_edition.php' et ça va un peu mieux... Mais je ne comprends toujours pas pourquoi la liaison ne se faisait pas...
Par ailleurs, j'ai un autre souci dans le prolongement du précédent. Plus précisément au niveau de la méthode nomFiche() de l'objet $formFiche qui ne reconnait pas la variable $data de la méthode getProduit_fiche():
Notice: Undefined variable: data in ...\fonctionsFormateur.php
Notice: Trying to get property of non-object in ...\fonctionsFormateur.php on line 541
Pour rappel, cette méthode est destinée à afficher en fonction d'une certaine action des champs texte, vides ou renseignés. Pour mieux me faire comprendre, quelques lignes de code de la méthode nomFiche().
class FormFiche {

    public $form = array();

public function nomFiche($action) {
...
        $this->form['nomFiche']['edition'] = '<input name="nomFiche" type="text" 
            id="nomFiche" value="'.$data->nom_fiche.'" size="50" />';// $data->nom_fiche est une variable venant de la méthode 'getProduit_fiche'
...
}
Comment faire reconnaître à présent $data auprès de cette méthode. En la transposant en propriété dans getProduit_fiche() ?
Merci,
«Le matin, quand il t’en coûte de te réveiller, que cette pensée te soit présente: c’est pour faire œuvre d’homme que je m’éveille.»
Marc Aurèle.

Eléphant du PHP | 209 Messages

22 juin 2011, 10:02

Si $data est défini dans une fonction, elle ne peux pas être utilisée dans une autre ....

Sauf :
1/ Si tu met
global $data
mais c'est mal.

2/ Si $data est une donnée membre


class Truc {

	private $data;
	
	function f1(){
		$this->data = 42;
	}
	
	function f2(){
		echo $this->data;
	}
}

En tout cas, ton code ma l'air d'être bien emberlificoter...
--
Eric