8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'aurai besoins de vos conseils, car je ne trouve pas la solution à mon (mes) erreurs:
Je souhaitais que mon code php me permette de récupérer les 6 derniers articles ajoutés à ma base de données du plus récent au plus ancien.

voici mon code :


<?php 

// Déclaration des paramètres de connexion
$host = "******b";
$user = "*******";
$passwd  = "********";

try
{
$bdd = new PDO("mysql:host=$host; dbname=********", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
$query = "SELECT * FROM `liste-articles` ORDER BY `liste-articles`.`id` DESC LIMIT 6";
$tab = $req->fetchAll(PDO::FETCH_ASSOC);
$tab = array_reverse($tab);
?>

<div class="article">
<article class="article article--thumb category">
<div class="media__img--rev grid__item five-twelfths palm-one-whole"> <a href="" class="image-wrap" style="padding-top: 76.417910447761%"> <img src="<?php echo .$tab[$cle]['thumbs']. ?>" alt="<?php echo .$tab[$cle]['alt_images']. ?>"> </a></div>
<div class="media">
<div class="article__title  article--thumb__title"> <a href="<?php echo .$tab[$cle]['url']. ?>">
<h3 class="hN"><?php echo .$tab[$cle]['titre'].?></h3></a></div>
<div class="article--grid__body">
<div class="article__content"><p><?php echo .$tab[$cle]['abstract']. ?></p></div>
</div></div> </article>
<hr class="separator  separator--subsection">
</div>
<?php
  foreach($tab as $cle => $arr)   echo 'ID'; }?>

</div>


Auriez-vous une solution à mon code ?
Salut

Quel est le problème avec ton code actuel ? Pour ton SQL à moins que tu ai simplifié la requête pour le sujet tu n'as pas besoin de faire `liste-articles`.`id` juste id suffit. D'ailleurs tu peux pas trier par date ?

Pourquoi faire un array_reverse ?
Modifié par John Wayne (28 Aug 2015 - 12:11)
salut

d'abord
fait un var_dump($tab); tu verra si tu récupères bien les donnée de ta base (je ne connais pas la structure donc un point à valider)

ensuite:
pourquoi ?
$tab = array_reverse($tab);

de toute façon tu filtre dans ta requete

Là encore je ne sais pas ce que tu fais !
<?php echo .$tab[$cle]['thumbs']. ?>

pourquoi tu mets des "." avant et après ta variable ?
John Wayne a écrit :
Salut

Quel est le problème avec ton code actuel ? Pour ton SQL à moins que tu ai simplifié la requête pour le sujet tu n'as pas besoin de faire `liste-articles`.`id` juste id suffit. D'ailleurs tu peux pas trier par date ?

Pourquoi faire un array_reverse ?


Bonjour et merci de ta réponse.
Voici ce que j'obtiens en écrivant ce code sur ma page web upload/40410-Sanstitre.JPG

N'ayant jamais eu de formation php, c'est en faisant des recherches sur des forums que j'ai trouvé la requete array_reverse. Le but était d'obtenir comme le principe d'un post, le dernier article publier apparaît en premier.
cid5420 a écrit :
salut

d'abord
fait un var_dump($tab); tu verra si tu récupères bien les donnée de ta base (je ne connais pas la structure donc un point à valider)


Bonjour cid5420

Je ne sais pas utiliser la variable var_dump($tab) dans mon code où dois-je la mettre et que dois-je enlever pour tester ma table ?

cid5420 a écrit :

pourquoi ?
$tab = array_reverse($tab);

de toute façon tu filtre dans ta requete

Comme je l'expliquai dans le message précédent, je cherchais à requeter dans ma table des articles et qu'ils s'affichent en ordre décroissant d'ajout à ma table

cid5420 a écrit :

Là encore je ne sais pas ce que tu fais !
&lt;?php echo .$tab[$cle]['thumbs']. ?&gt;

pourquoi tu mets des "." avant et après ta variable ?

Débutant en php, je m'aide de forum pour tenter de faire mes pages en php. Là encore je n'avais pas vu l'erreur du "."

Voilà par quoi je vais remplacer mon code echo :
<?php echo $tab[$cle]['thumbs']; ?>
essaie de placer le var_dump juste après ta requete
$query = "SELECT * FROM `liste-articles` ORDER BY `liste-articles`.`id` DESC LIMIT 6";
$tab = $req->fetchAll(PDO::FETCH_ASSOC);
$tab = array_reverse($tab);
var_dump($tab); die;


Sinon pour le trie, tu le fais déjà dans la requête donc ça sert à rien !
 ORDER BY `liste-articles`.`id` DESC LIMIT 6
Bonsoir Cid5420

J'ai placé la requete var_dump comme indiqué dans ton exemple, mais j'obtiens toujours une erreur :

Parse error: syntax error, unexpected '{' in /home/*********/www/v2/index.php on line 344

Cette ligne 344 correspond à :
{
$bdd = new PDO("mysql:host=$host; dbname=*********", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
Salut,
Ton erreur vient du fait que ton test try{} n'est pas suivi d'un catch(){} : le Try/Catch

Il faudrait donc que tu ajoutes juste après ton accolade fermante du try un bloc catch :
catch (Exception $e) // On va attraper les exceptions "Exception" s'il y en a une qui est levée
{
  echo 'Une exception a été lancée. Message d\'erreur : ', $e->getMessage();
}

Cf : https://openclassrooms.com/courses/programmez-en-oriente-objet-en-php/les-exceptions-10
Modifié par MatthieuR (30 Aug 2015 - 21:40)
MatthieuR a écrit :
Salut,
Ton erreur vient du fait que ton test try{} n'est pas suivi d'un catch(){} : le Try/Catch

Il faudrait donc que tu ajoutes juste après ton accolade fermante du try un bloc catch :
catch (Exception $e) // On va attraper les exceptions "Exception" s'il y en a une qui est levée
{
  echo 'Une exception a été lancée. Message d\'erreur : ', $e-&gt;getMessage();
}




Merci de ta réponse Matthieu, mais ma page m'affiche toujours cette erreur "syntax error, unexpected"

Voici le code que j'ai essayé de remodifié au fil des réponses et des recherches, mais sans résultat satisfaisant

<?php 

// Déclaration des paramètres de connexion
try
{
$bdd = new PDO("mysql:host=$host; dbname=vroummoto", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
}
catch (Exception $e) // On va attraper les exceptions "Exception" s'il y en a une qui est levée
{
  echo 'Une exception a été lancée. Message d\'erreur : ', $e->getMessage();
}
$req = $bdd->query("SELECT * FROM `liste-articles` ORDER BY `id` DESC LIMIT 6");
$tab = $req->fetchAll(PDO::FETCH_ASSOC);
$tab = array_reverse($tab);
foreach($tab as $cle => $arr)   echo 'ID :'; 
{
?>
<div class="masonry__item">
<article class="article article--thumb media category">
<div class="media__img--rev grid__item"> <img src="<?php echo $tab[$cle]['thumbs']; ?>"></div>
<div class="media__body grid__item seven-twelfths palm-one-whole">
<div class="article__title  article--thumb__title"> <h3 class="hN"><?php echo $tab[$cle]['titre']; ?></h3></div>
<div class="article--grid__body">
<div class="article__content"><p><?php echo $tab[$cle]['abstract']; ?></p></div>
</div></div> </article>
</div>
<?php
}
    $req->closeCursor() ; // Termine le traitement de la requête
?>
Quelles sont les lignes avant la 344 car si tu as cette erreur c'est qu'il manque un ";" ou "}" avant la 344.
Modifié par MatthieuR (30 Aug 2015 - 21:29)
MatthieuR a écrit :
Quelles sont les lignes avant la 344 car si tu as cette erreur c'est qu'il manque un ";" ou "}" avant la 344.


Bonjour Matthieu, non je ne vois pas de ; manquant et avant le try il y a juste les paramètres de connexion.

<?php 

// Déclaration des paramètres de connexion
$host = "********.mysql.db";
$user = "********";
$passwd  = "******";

try


avant le code php c'est le l'HTML
Pour lever un doute, peux-tu créer un fichier nommé infos.php à la racine de ton site contenant le code suivant (uniquement) :
<?php
  phpinfo();

Ensuite tu vas visiter ta page http://www.tonsite.com/infos.php
Enfin tu copies ton écran (Impécr de ton clavier) et tu colles l'image ici.

Si tu as une erreur de syntaxe, ça vient peut-être d'une version de PHP. Tu testes ton site en local ou en ligne ?

Sinon, tu peux tenter la connexion hors du try/catch :
<?php 

// Déclaration des paramètres de connexion
$host = "********.mysql.db";
$user = "********";
$passwd  = "******";

$bdd = new PDO("mysql:host=$host; dbname=vroummoto", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
$req = $bdd->query("SELECT * FROM `liste-articles` ORDER BY `id` DESC LIMIT 6");
$tab = $req->fetchAll(PDO::FETCH_ASSOC);
var_dump($tab); //on teste les données récupérées

Si tu as encore une erreur genre "Unknown PDO object..." c'est qu'il faut que tu mettes à jour PHP !

Par ailleurs, si tu veux trier tes articles du plus récent au plus ancien, il faudrait quand même que tu aies un champ 'date' dans ta table 'liste-articles' afin de pouvoir trier par date et non plus par id (qui ne sera pas toujours dans un ordre chronologique.
Modifié par MatthieuR (31 Aug 2015 - 09:57)
MatthieuR a écrit :
Pour lever un doute, peux-tu créer un fichier nommé infos.php à la racine de ton site contenant le code suivant (uniquement) :
&lt;?php
  phpinfo();

Ensuite tu vas visiter ta page http://www.tonsite.com/infos.php
Enfin tu copies ton écran (Impécr de ton clavier) et tu colles l'image ici.
[/code]


Bonjour Matthieu, j'ai un retour de ma page infos.php
Je me permet de te faire parvenir l'url en message prive car l'imprim écran serait trop long à réaliser du fait de la longueur!
MatthieuR a écrit :

Par ailleurs, si tu veux trier tes articles du plus récent au plus ancien, il faudrait quand même que tu aies un champ 'date' dans ta table 'liste-articles' afin de pouvoir trier par date et non plus par id (qui ne sera pas toujours dans un ordre chronologique.


J'ai déjà un champ date, mais il s'agit de la date de création de l'article qui peut être différent de la date de publication sur le site. Je souhaiterai faire apparaître les articles non pas par date de création, mais par ordre décroissant d'ajout (du plus récent au plus ancien) et limiter l'affichage au 6 derniers articles, voilà pourquoi je pensais utiliser l'ID comme moyen de classement. Dernier rentré, premier affiché.
Aucun souci, je viens de recevoir ton lien et je me doutais que c'était ça : PHP v4.4.9 Smiley lol , c'est une version qui a plus de 7 ans et n'est plus maintenu depuis fin 2007...

Pour tout le monde :
upload/56501-infos-php.png

Ni le try/catch, ni et surtout PDO ne fonctionne avec une version de PHP < 5.1.

Chez qui est-tu hébergé ? Si c'est OVH, il faut que tu modifies une variable d'environnement. Le procédé est différent suivant le type d'hébergement (2014 ou pas). Il faut donc soit créer/modifier ton .htaccess ou créer/modifier le .ovhconfig.
Si tu es chez un autre hébergeur, contacte-les rapidement pour passer à une version de PHP au moins > 5.3.
MatthieuR a écrit :


Si tu as une erreur de syntaxe, ça vient peut-être d'une version de PHP. Tu testes ton site en local ou en ligne ?

Sinon, tu peux tenter la connexion hors du try/catch :
&lt;?php 

// Déclaration des paramètres de connexion
$host = "********.mysql.db";
$user = "********";
$passwd  = "******";

$bdd = new PDO("mysql:host=$host; dbname=vroummoto", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND =&gt; 'SET NAMES UTF8'));
$req = $bdd-&gt;query("SELECT * FROM `liste-articles` ORDER BY `id` DESC LIMIT 6");
$tab = $req-&gt;fetchAll(PDO::FETCH_ASSOC);
var_dump($tab); //on teste les données récupérées



Je test mon site en ligne directement.

J'ai essayé en enlevant le try/catch et j'ai un autre message d'erreur qui apparaît
Parse error: syntax error, unexpected T_DOUBLE_ARROW, expecting '(' in /home/dieteticw/www/v2/index1.php on line 343


Il s'agit toujours de ma ligne :
$bdd = new PDO("mysql:host=$host; dbname=vroummoto", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND =&gt; 'SET NAMES UTF8'));
Nos posts se sont croisés, lis ma réponse précédente.

Sinon, pour ton tri, tu fais comme tu veux, seulement ton array_reverse est inutile, voire contre-productif puisqu'il va remettre ton tableau dans l'ordre croissant...

Pour ce qui est du développement de ton site directement en ligne, c'est pas super pratique... il faudrait que tu installes un serveur local comme WAMPSERVER par exemple si tu es sur Windows et ensuite, quand tout fonctionne, tu déploies en ligne. Et en plus tu auras PHP 5.5 !
Modifié par MatthieuR (31 Aug 2015 - 17:44)
MatthieuR a écrit :

Pour tout le monde :
upload/56501-infos-php.png

Ni le try/catch, ni et surtout PDO ne fonctionne avec une version de PHP &lt; 5.1.



Bravo Matthieu, c'est bien une question que je ne m'étais pas posé.
Mon site affiche bien des données à présent.

Pour donner l'information aux autres, je suis hébergé chez ovh. J'ai du créer un fichier .ovhconfig avec comme contenu
app.engine=php
app.engine.version=5.5
http.firewall=none
environment=production


Pour la suite de mon code je me débrouillerai.

Merci à tous d'avoir mis vos connaissances à mon service.