Fatal error OOP

Petit nouveau ! | 2 Messages

10 mars 2014, 00:01

bonsoir a tous :)
à chaque fois j'ai reçu cette erreur et j'arrive pas à détecté ou il exsiste le problème
l'erreur est :
" Fatal error: Using $this when not in object context in C:\wamp\www\php OOP\ooplr\classes\Fonction.php on line 22"

le code :
Fonction.php
<?php

class Fonction {
    
    private $_db;
      public function __construct() {
      $this->_db = DB::getInstance();
      }
     public function create($fields = array()) {

        if (!$this->_db->insert('fonction', $fields)) {

            throw new Exception('There was a problem creating an account!');
        }
    }
 public function getLibelle(){
//lire libelle
$this->_db->action('select libelle', 'fonction', $array());
}
public static function getId($libelle){
//lire identificateur
        $lib = $this->getLibelle();
        while ($res= mysql_fetch_array($lib)){
            if($res === $libelle){
  $res = $this->_db->action('select id', 'fonction', $array());
            }

            }
          
            }


}
?>

register_inter.php
<?php
require_once('libraries/Page.php');
$page = new Page;
$page->setTitle('Contact');
$page->startBody();
?>

<?php
require_once 'core/init.php';

require_once 'classes/Intevenant.php';
if (Input::exists()) {
    if (Token::check(Input::get('token'))) {

        $validate = new Validate();
        $validation = $validate->check($_POST, array(
            'username' => array(
                'required' => TRUE,
                'min' => 2,
                'max' => 50,
                'unique' => 'intervenants'
            ),
            'password' => array(
                'required' => TRUE,
                'min' => 6
            ),
            'password_again' => array(
                'required' => TRUE,
                'matches' => 'password'
            ),
            'nom' => array(
                'required' => TRUE,
                'min' => 2,
                'max' => 30
            ),
            'prenom' => array(
                'required' => TRUE,
                'min' => 2,
                'max' => 30
            ),
            'email' => array(
                'required' => TRUE,
                'min' => 2,
                'max' => 50
            ),
            'numero_telephone' => array(
                'required' => TRUE,
                'min' => 2,
                'max' => 16
            ),
            'adresse' => array(
                'required' => TRUE,
                'min' => 2,
                'max' => 50
            ),
            'fonction_id' => array(
                'required' => TRUE,
                'min' => 2,
                'max' => 50
            )
                ));
        if ($validation->passed()) {
            $intervenant = new Intervenant();


            $salt = Hash::salt(32);


            try {

                $intervenant->create(array(
                    'username' => Input::get('username'),
                    'password' => Hash::make(Input::get('password', $salt)),
                    'salt' => $salt,
                    'nom' => Input::get('nom'),
                    'prenom' => Input::get('prenom'),
                    'email' => Input::get('email'),
                    'numero_telephone' => Input::get('numero_telephone'),
                    'adresse' => Input::get('adresse'),
                    'joined' => date('Y-m-d H:i:s'),
                    'group' => 1,
                    'fonction_id' => Fonction::getId(Input::get('fonction_id'))
                ));


                Session::flash('home', 'You have been registred and you can now log in!');
                Redirect::to('index.php');
            } catch (Exception $e) {
                die($e->getMessage());
            }

            Session::flash('success', 'You registered successfully!');
        } else {

            foreach ($validation->errors() as $error) {

                echo $error, '<br>';
            }
        }
    }
}
?>



<form action="" method="post">
    <div class="field">
        <label for="nom">Nom</label>
        <input type="text" name="nom" value="<?php echo escape(Input::get('nom')); ?>" id="nom">
    </div>
    <div class="field">
        <label for="prenom">Prenom</label>
        <input type="text" name="prenom" value="<?php echo escape(Input::get('prenom')); ?>" id="prenom">
    </div>
    <div class="field">
        <label for="numero_telephone">Numéro de telephone</label>
        <input type="text" name="numero_telephone" value="<?php echo escape(Input::get('numero_telephone')); ?>" id="numero_telephone">
    </div>
    <div class="field">
        <label for="email">Email</label>
        <input type="text" name="email" value="<?php echo escape(Input::get('email')); ?>" id="email">
    </div>
    <div class="field">
        <label for="adresse">Adresse</label>
        <input type="text" name="adresse" value="<?php echo escape(Input::get('adresse')); ?>" id="adresse">
    </div>

    <div class="field">
        <label for="fonction_id">Fonction</label>
        <select name="fonction_id">
            <option value="mon">Votre fonction</option>
            <?php
            require("DB.php" );
            $req = "select libelle FROM fonction";
            $res = mysql_query($req);
            while ($fonction = mysql_fetch_array($res)) {
                echo "<option value=" . $libelle . ">" . $fonction["libelle"] . "</option>";
            }
            ?>

        </select>
    </div>
    <div class="field">
        <label for="username">Username</label>
        <input type="text" name="username" id="username" value="<?php echo escape(Input::get('username')); ?>" autocomplete="off">
    </div>

    <div class="field">
        <label for="password">Password</label>
        <input type="password" name="password" id="password">
    </div>

    <div class="field">
        <label for="password_again">Enter your Password again</label>
        <input type="password" name="password_again" id="password_again">
    </div>


    <input type="hidden"  name="token" value="<?php echo Token::generate(); ?>">
    <input type="submit" value="Register">
</form>
<?php
$page->endBody();
echo $page->render('inc/template.php');
?>
Modifié en dernier par moogli le 10 mars 2014, 16:44, modifié 1 fois.
Raison : BBCODE PHP

Mammouth du PHP | 1511 Messages

10 mars 2014, 08:03

$this ne doit pas être utilisé dans une méthode qui est appelée en statique, ton erreur se situe sur ce point.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 mars 2014, 16:44

Modération :
Afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Il en faut peu pour être heureux ......

Petit nouveau ! | 2 Messages

10 mars 2014, 18:52

merci bcp pour votre réponse :)
mais comment je peux corriger cette faux :/ parceque j'suis débutante en php oop et merci d'avance :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 mars 2014, 19:49

enlève $this->
peux être devrait tu revoir la syntaxe poo et la portée des variable http://fr2.php.net/manual/fr/language.oop5.php et surtout http://fr2.php.net/manual/fr/language.o ... bility.php

@+
Il en faut peu pour être heureux ......