Echec de fonction préparé

Eléphanteau du PHP | 24 Messages

19 mai 2011, 13:14

Bonjour,

J'ai une erreur concernant un simple envoi de données en db.
J'uilise cette même base et cette même table pour d'autres test et ça fonctionne très bien.
Là, je ne comprends pas vraiment d'où peut provenir l'erreur, si vous avez un idée...

Fatal error: Call to undefined method BaseNews::bdd() in blah blah blah\lib\BaseNews.class.php on line 20

Page news_manager.php
<?php
session_start();
function chargClass($class) { require 'lib/'.$class.'.class.php'; } spl_autoload_register('chargClass');
?>
<! DOCTYPE html>
<!-- le blah blah html -->
<div div="infoAddForm">
            <?php
			try {
				$bdd = BDD::OPENBDD();
				$bdd = ('SET NAMES utf8');
				$news = new BaseNews($bdd);
				if(isset($_POST['newsPreview']) || isset($_POST['newsSave'])) {
					if(isset($_POST['newsPreview'])) { $subState = 1; }
					if(isset($_POST['newsSave'])) { $subState = 2; }
					$check = new Check();
					$check->checkInputText($_POST['title'], 3, 50, 'titre');
					$title = $check->getInputText();
					if($title != '0') {
						$check->checkInputContent($_POST['content'], 10, 2000, 'contenu');
						$content = $check->getInputContent();
						if($content != '0') {
							$check->checkFilePicture($_FILES['picture'], Check::SIZE_MIDDLE, '../newsImage/', 'une illustration');
							$picture = $check->getFilePicture();
							if($picture != '0') {
								if($subState == 1) {
									$news->viewNews($title, $content, $picture);
								}
								else {
									$news->addNews($title, $content, $picture); // C'EST LÀ QUE J'APPEL LA CLASSE QUI POSE PROBLÈME
								}
							}
						}
					}
				}
			}
			catch(Exception $e) { die('blah blah blah.'.$e->getMessage()); }
			?>
        </div>
Ma classe BaseNews.class.php dans le dossier lib/
<?php
    class BaseNews
	{
		protected $bdd;
		public function __construct($bdd) {
			$this->bdd = $bdd;
		}
		public function addNews($title, $content, $picture) {
                        // LA LIGNE EN RAPPORT AVEC L'ERREUR
			$newsPrepare = $this->bdd->prepare('INSERT INTO actu (title, picture, content, nbr_comment, act_date) VALUES (:title, :picture, :content, :nbr_comment, NOW())');
			$newsArray = $newsPrepare->execute(array(
			':title' => $title,
			':content' => $content,
			':picture' => $picture,
			':nbr_comment' => 0
			));
			echo '<span class="correct">L\'actualité a bien été ajouté au site.</span>';
		}
Ma classe BDD.class.php dans le dossier lib/
<?php
    class BDD
	{
		public static function OPENBDD() {
			$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
			$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			return $bdd;
		}
	}
Merci par avance

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

19 mai 2011, 13:22

salut,

tu peux mettre le code complet parce que la y a pas de ligne 20 ;)

sinon tu demande une méthode qui n'existe pas, ce qui est vrai puisse que $bb n'est pas une méthode mais une variable membre ;)


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

Eléphanteau du PHP | 24 Messages

19 mai 2011, 13:24

Salut,

La ligne 20 était indiqué en fait, c'est celle-ci :
$newsPrepare = $this->bdd->prepare('INSERT INTO actu (title, picture, content, nbr_comment, act_date) VALUES (:title, :picture, :content, :nbr_comment, NOW())');
Désolé si ce n'était pas clair.
Modifié en dernier par mauvais le 19 mai 2011, 13:32, modifié 2 fois.

Eléphanteau du PHP | 24 Messages

19 mai 2011, 13:30

Oups, en fait j'ai trouvé mon erreur d'inatention...
J'ai indiqué $db = ('SET NAMES utf8'); au lieu de $db->exec('SET NAMES utf8);

Bon bas désolé pour le dérangement hein :?
... tout ça pour ça.

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

19 mai 2011, 14:02

Salut,

La ligne 20 était indiqué en fait, c'est celle-ci :
$newsPrepare = $this->bdd->prepare('INSERT INTO actu (title, picture, content, nbr_comment, act_date) VALUES (:title, :picture, :content, :nbr_comment, NOW())');
Désolé si ce n'était pas clair.

mwé dans ce que tu a mis sur le forum c'est la ligne 10 ....

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