Bonjour,
J'aimerais que l'on éclair ma lanterne car j'ai quelques soucis et quelques incompréhension par ci par la

.
j'ai une page PDO.php avec connection a la base de données :
<?php
class Connection
{
/* Attributs */
protected $bdd;
private $host;
private $login;
private $pwd;
private $db;
/* Constructeur */
public function __construct()
{
$this->host = "";
$this->login = "";
$this->pwd = "";
$this->db = "";
}
/* Méthodes de connection*/
public function Connect($host,$db,$user,$pwd)
{
try
{
$this->bdd = new PDO("mysql:host=$host;dbname=$db", $user, $pwd);
}
catch (PDOException $e)
{
die( "Erreur : " . $e->getMessage() . "<br/>");
}
}
}
?>
ensuite une page sql.php avec mes requete sql préparé :
<?php
require_once "PDO.php";
class Sql extends Connection
{
/* Requete preparé News*/
public function recupNews()
{
$select = $this->bdd->prepare("SELECT * FROM news ORDER BY dateNews DESC LIMIT ".$first.",".$nombre." ");
$select->execute();
return $select->fetch(PDO::FETCH_ASSOC);
}
public function compteNews()
{
try
{
$count = $this->bdd->prepare("SELECT COUNT(id) AS nombreNews FROM news");
$count->execute();
return $data['nombreNews'] = $count->fetch(PDO::FETCH_ASSOC);
}
catch(Exception $e)
{
die($e->getMessage().'<pre>'.$e->getTrace().'</pre>');
}
}
/* Requete preparé Comment */
public function addCom()
{
if(!empty($_POST))
{
extract($_POST);
$comm = $this->bdd->prepare("INSERT INTO comment (pseudo, url, mail, contenu, news_id) VALUES ('$pseudo', '$url', '$mail', '$contenu', '$news_id') ");
$comm->execute();
return $data = $count->fetch(PDO::FETCH_ASSOC);
}
}
/* Requete preparé Admin */
public function createNews()
{
extract($_POST);
$create = $this->bdd->prepare("INSERT INTO news (titre, contenu) VALUES ('$titre' , '$contenu') ");
$create->execute();
}
public function editNews()
{
if(!empty($_POST))
{
extract($_POST);
$edit = $this->bdd->prepare("UPDATE news SET titre='$titre', contenu='$contenu' WHERE id=$id");
$edit->execute();
echo "New Modifiée";
$_GET["id"]=$id;
}
$sql= "SELECT * FROM news WHERE id={$_GET['id']}";
$result = $this->bdd->query($sql);
return $result->fetch(PDO::FETCH_ASSOC);
}
public function deleteNews()
{
$sql= "DELETE FROM news WHERE id={$_GET['id']}";
$result = $this->bdd->query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error() );
}
}
?>
une autre page NewsList.php qui stock puis affiche les news :
<?php
require_once "Sql.php";
class NewsList extends Sql
{
/* Attributs */
private $newsList = array();
private $nombreNewsParPage;
/* Contructeur */
public function __construct()
{
$this->newsList = "";
$this->nombreNewsParPage = 4;
}
/* GETTER */
public function getNombreNewsParPage()
{
return $this->nombreNewsParPage;
}
/* SETTER */
public function setNewsList($news)
{
$this->newsList[] = $news;
}
public function setNombreNewsParPage($nombreNewsParPage)
{
$this->nombreNewsParPage = $nombreNewsParPage;
}
/* Méthodes */
public function stockNews($first, $nombre)
{
try
{
while($data = $this->recupNews->select)
{
$news = new News();
$news->setIdNews($data['idNews']);
$news->setTitreNews($data['titreNews']);
$news->setContenuNews($data['contenuNews']);
$news->setDateNews($data['dateNews']);
$this->setNewsList($news);
}
}
catch(Exception $e)
{
die($e->getMessage().'<pre>'.$e->getTrace().'</pre>');
}
}
public function afficherNewsList()
{
$nombreNews = $this->compteNews();
$nombrePage = ceil($nombreNews/$this->getNombreNewsParPage());
$page = isset($_GET['p']) ? $_GET['p'] : 1;
$firstNews = ($page-1)*$this->getNombreNewsParPage();
$this->stockNews($firstNews,$this->getNombreNewsParPage());
foreach($this->newsList as $news)
{
echo $news->getTitreNews();
echo $news->getDateNews();
echo $news->getContenuNews();
}
for($i=1;$i<=$nombrePage;$i++)
{
echo "< a href='index.php?page=".$i."'>".$i."< /a> ";
}
}
}
?>
une autre encore ^^ News.php qui utilise les fonction magic pour le stockage des mes news :
<?php
class News
{
/* Attributs */
private $idNews;
private $titreNews;
private $contenuNews;
private $dateNews;
/* Constructeurs */
public function __construct()
{
$idNews = 0;
$titreNews = "";
$contenuNews = "";
$dateNews = "";
}
/* GETTER */
public function getIdNews()
{
return $this->idNews;
}
public function getTitreNews()
{
return $this->titreNews;
}
public function getContenuNews()
{
return $this->contenuNews;
}
public function getDateNews()
{
return $this->dateNews;
}
/* SETTER */
public function setIdNews($id)
{
$this->idNews = $id;
}
public function setSitreNews($titre)
{
$this->titreNews = $titre;
}
public function setContenuNews($contenu)
{
$this->contenuNews = $contenu;
}
public function setDateNews($date)
{
$this->dateNews = $date;
}
}
?>
et enfin un index.php qui affiche le tout :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test d'affichage de news en php POO</title>
</head>
<body>
<h1>News</h1>
<?php
require_once 'NewsList.php';
$app = new Connection();
$app->Connect(localhost,news,root,'');
$newsList = new NewsList();
$newsList->afficherNewsList();
?>
</body>
</html>
Voila je débute dans la POO PHP donc je voudrais savoir :
- si mon héritage est correcte ?
- si mes requête préparé sont bien utilisé ?
- Pourquoi dans ma function compteNews, il me dit que "Call to a member function prepare() on a non-object in C:\xampp\htdocs\NewsCommentPage\sql.php on line 19"
- Comment mieux sécuriser mes requêtes avec petit exemple si possible ^^ car j'ai regardé pas mal de tuto mais j'ai pas bien compris ou mal appréhendé.
- Comment mieux optimiser mon code ?
Merci...