Php oop

Fermé
rima - 9 mars 2014 à 22:53
 rima - 10 mars 2014 à 18:25
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');
?>
A voir également:

4 réponses

Utilisateur anonyme
10 mars 2014 à 00:09
Bonjour

Tu utilises $this dans une fonction statique.
Or $this désigne l'instance courante d'une classe (un objet), et par définition une fonction statique ne se réfère à aucune instance (aucun objet).
$this n'a donc aucun sens à l'intérieur d'une méthode statique, et y est explicitement interdit :
https://www.php.net/manual/fr/language.oop5.static.php
0
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 :)
0
Utilisateur anonyme
10 mars 2014 à 17:58
D'où sors-tu ce script ? C'est l'auteur de corriger cette erreur : ce script n'a jamais pu fonctionner tel quel.
0
j'ai suivi un tutoriel de youtube :)
[https://]www.youtube.com/watch?v=bic6WBAplMk&list=PLfdtiltiRHWF5Rhuk7k4UAU1_yLAZzhWc

c'est un petit projet mais l'erreur existe seulement dans ceus deux fichies
0