IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fatal erreur:Call to undefined function!


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut Fatal erreur:Call to undefined function!
    Bon jour!
    c'est la premiere fois que j'utilise le fonction e PHP, et j'ai rencontré une ereur, jesper trouvé de l'aide ici!

    Voila mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <html>
    <Head>
         <title> Premiere page </title>
    </head>
    <body>
    <h1 align="center"><u> Les Graphes </u></h1>
    <br/>
    <br/>
    <?php 
        echo "<font color=\"#800080\">Aujourd'hui nous sommes le : </font>" .date('d/m/Y');
    	echo "<br><font color=\"#800080\"> Il est :</font> " .date('H \h i \m\i\n s \s\e\c ');
     
    ?>
    <center>
          <form method="post" action="Graphe.php">
    Entrez le nombre de Sommet :  <input type="text" name="som" />
    <br>
    	<input type="submit" name="ok" value="ok" />
    	</form>
    		</center>
    		<?php
     
          if(isset($_POST['ok']))
         {  $n=''; if(isset($_POST['som'])) { $n=($_POST['som'] ); }
     
     
    //diemension de la matrice
     
     $mat = array();
    //1er appel de la fonction
    //$mat = matrice
    //$n = dimension
    //0 = niveau courant
    create_recur_mat($mat, $n, 0);
     
    function create_recur_mat($current_mat, $n, $current_n) {
    	if ($n == $current_n) { //condition de sortie dimension courante = $n
    		$current_mat = 1; //il ne faut pas oublier la valeur d'initialisation
    		return; //sortie
    		}
    	for ($i = 0; $i < $n; $i++) //pour chaque dimension
    		//descendre encore d'un cran
    		create_recur_mat($current_mat[$i], $n, $current_n + 1);
    	}
     
    print_r($mat);
        }
    ?>
     
     
    </body>
    </html>
    Et voila mon erreur :
    Fatal error: Call to undefined function create_recur_mat() in D:\Foufa\EasyPHP 2.0b1\www\Graphe.php on line 34

    Merci d'avance!

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour, l'erreur vient du fait que tu appelles ta fonction avant de la déclarer. Place l'appel après la déclaration.

    @+

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Etonnant

    J'ai fais cet essai rapidos dans une page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ma_fonction();
     
    function ma_fonction() {
    	echo 'Une fonction ma_fonction()';
    }
    Aucun retour d'erreur, et ça m'affiche bien : Une fonction ma_fonction()

    Par contre, si je fais cette essai ci-dessous, c'est à dire placer la déclaration dans un autre fichier inclus après l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ma_fonction();
     
    include('fichier_contenant_ma_fonction.php');
    Cette fois j'obtiens le même message d'erreur.


    Ton code respecte t-il la réalité ?
    La fonction n'est elle pas dans une autre page inclus après appel comme vu ci-dessus ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Votre test, justement, n'inclut pas de définition conditionnelle comme c'est le cas du PO :
    Les fonctions n'ont pas besoin d'être définies avant d'être utilisées, SAUF lorsqu'une fonction est définie conditionnellement, comme montré dans les deux exemples suivants.

    Lorsqu'une fonction est définie de manière conditionnelle, comme dans les exemples ci-dessous, leur définition doit précéder leur utilisation.
    Cf la doc.

    Donc ceci est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (1) {
        function a() {
            echo __FUNCTION__;
        }
        a();
    }
    Mais pas l'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (1) {
        a();
        function a() {
            echo __FUNCTION__;
        }
    }

  5. #5
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut

    Etonnant

    J'ai fais cet essai rapidos dans une page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ma_fonction();
     
    function ma_fonction() {
    	echo 'Une fonction ma_fonction()';
    }
    Aucun retour d'erreur, et ça m'affiche bien : Une fonction ma_fonction()
    Oups apparemment j'ai dit une semi betise

    Désolé alors et merci RunCodePhp pour la correction

  6. #6
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut
    Excusez moi j'ai pas bien compris vos réponses!

    1-ma fonction n'est pas déclarer dans une autre page, j'ai une seule page et la j'ai le script que je vous ai posté toute a l'heure

    2- j'ai aucune condition dans mon programme alors ?

    3-j'ai appelé la fonction après que je la déclare et j'ai eu des erreur "donc ce n'est pas la bonne solution"

    Aidez moi SVP je connais pas les fonction en PHP c'est la première fois que je travaille avec!

  7. #7
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    Il doit manquer :
    les accolades pour le bloc du for dans la fonction
    au moins une référence dans le prototype de la fonction
    ce n'est pas cela son erreur
    d'abord précède ton appel à la fonction par sa définition comme cité plus haut
    quand tu mettra ce qui suit c plus correct mais il reste une erreur que j'ai mis en rouge


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function create_recur_mat($current_mat, $n, $current_n) {
    	if ($n == $current_n) { //condition de sortie dimension courante = $n
    		$current_mat = 1; //il ne faut pas oublier la valeur d'initialisation
    		return; //sortie
    		}
    	for ($i = 0; $i < $n; $i++) //pour chaque dimension
    		//descendre encore d'un cran
    		create_recur_mat($current_mat[$i], $n, $current_n + 1);
    	}
    create_recur_mat($mat, $n, 0);
    apparemment ton tableau $current_mat n'est pas remplis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $mat = array();
    ...
    create_recur_mat($mat, $n, 0);
    qu'est ce que tu cherche à faire avec ta fonction??

  8. #8
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut
    Oui Julp vous avez raison il me manquais un "&" Merci maintenant sa marche, Merci beaucoup !

    J'ai une autre question si vous permettez:
    cette fonction remplis la matrice avec des 1, mais moi je veux une fonction qui laisse l'utilisateur remplir la matrice avec des nombres puis je récupère ces nombre pour lui faire des calcules, Comment je fais ?!

    Merci a vous !

  9. #9
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut
    Ah Merci Nsanabi, Julp ma corrigé l'erreur il avais raison il me manqué un "&", voila le problème est réglé mais je viens de cité un autre si vous pouvez m'aider Merci a vous tous!

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2012, 18h37
  2. [XML] [XSLT] Fatal error: Call to undefined function xslt_create()
    Par fadex dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 05/07/2006, 12h34
  3. Réponses: 3
    Dernier message: 13/05/2006, 15h48
  4. Réponses: 3
    Dernier message: 21/03/2006, 14h21
  5. Réponses: 11
    Dernier message: 08/12/2005, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo