Modifier un script PHP4 en PHP5 MYSQLI

Répondre
jackbocar
le 01/05/2007 à 19:50
jackbocar
Bonjour,

J'ai un script qui était à l'origine "Danews". Il fonctionne parfaitement bien, mais j'aimerais pouvoir le faire fonctionner en PHP5 et MYSQLI. Sauf que j'ai essayé de multiples combinaisons sans aucun résultats. Je bloque sur les SELECT count (*), ce qui rend inefficace ma pagination.

Si vous êtes dans un bon jour, peut-être ferez-vous la modif pour moi ou me diriger pour enfin y arriver.

Le code :

<?php
$nb_affichage_par_page = 4;
$sql = 'SELECT count(*) FROM news';
$resultat = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_array($resultat);

if (($nbtotal = $data[0]) == 0) {
echo '<span class="texte_normal"><b>Aucune news trouv&eacute;e.</b></span>';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;

$sql = 'SELECT id, date, titre, news FROM news ORDER BY date DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;

$resultat = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$nbdata = mysql_num_rows($resultat);

if ($nbdata == 0) {
echo '<span class="texte_normal"><b>Aucune news trouv&eacute;e.</b></span>';
}
else {
while ($data = mysql_fetch_array($resultat)) {
$date=$data['date'];
$titre=$data['titre'];
$news=$data['news'];
?>


Merci de votre aide

Jack Bocar
Keika
le 02/05/2007 à 04:41
Keika
moi y'a plusieurs choses que je ne comprends pas dans ce code...

1:
<?php
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;

$sql = 'SELECT id, date, titre, news FROM news ORDER BY date DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;

$resultat = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$nbdata = mysql_num_rows($resultat);

if ($nbdata == 0) {
echo '<span class="texte_normal"><b>Aucune news trouv&eacute;e.</b></span>';
} ?>


Cette partie n'est pas exactement la meme chose que celle juste au dessus avec le count(*), sauf qu'on cherche des valeurs specifiques ? Enfin je pense que ca peut disparaitre non ?

2:
<?php if (!isset($_GET['debut'])) $_GET['debut'] = 0;  

$sql = 'SELECT id, date, titre, news FROM news ORDER BY date DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page; ?>


Alors si je lis bien le code, on s'assure que get debut n'est pas declare (donc ca vaut 0...), puis on attribut la valeur 0 a $_GET['debut']... (pourquoi pas $debut tout simplement ?) et on finit par mettre une limit valant $_GET['debut']. Pourquoi ne pas simplement mettre 0 dans la limit puisque de toute facon ca sera 0...?
Le PHP --> C'est dur !
jackbocar
le 02/05/2007 à 05:33
jackbocar
Bonjour

J'essais d'être plus clair. La partie du script qui compte le nombre de news pour afficher que ce nombre, ne fonctionne pas. Plutôt, je ne parviens pas à modifier cette partie pour MYSQLI.

<?php
/*------------------- Mon problème est que je n'arrive pas à modifier cette partie de script : --------*/
include ('./_require/connect_db.php');
include ('./_require/fonction_pagination.php');

$nb_affichage_par_page = 4;
$sql = 'SELECT count(*) FROM news';
$result = mysqli_query($link, $query);

//$resultat = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
//$data = mysql_fetch_array($resultat);

if (($nbtotal = $data[0]) == 0) {
echo '<span class="texte_normal"><b>Aucune news trouv&eacute;e.</b></span>';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;

/*------------------------- ci dessou le script modifié MYSQLI fonctionne bien mais sans pagination ------------------------------------------------*/

$query = 'SELECT id, date, titre, url, news, type FROM news WHERE type="news" ORDER BY id ASC LIMIT 0,5 ';
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {

if ($nbenr == 0) {
echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
}
while ($data = mysqli_fetch_assoc($result)) {
$date=$data['date'];
$url=$data['url'];
$titre=$data['titre'];
$news=$data['news'];
$news = nl2br($news);

echo '<span class="titre">'($titre)' <a href="#">'($url)'</a></span>';
echo '<br /><br />';
echo '<span class="news">'($news)'</span>';
?>


Tu vois, normalement il y a en fin de ligne SELECT (21) :
$query = 'SELECT id, date, titre, url, news, type FROM news WHERE type="news" ORDER BY id ASC LIMIT .$_GET['debut'].','.$nb_affichage_par_page;

Mais je ne m'en sers pas vu que le script qui compte les news, ne fonctionne pas en PHP5 et MYSQLI.

J'espère que je me suis fais comprendre, ce n'est pas simple quelquefois de s'expliquer !!!

Jack Bocar
jackbocar
le 02/05/2007 à 06:50
jackbocar
Bonjour

Un petit éclaircissement :

1 - comme ceci, il ne trouve aucune news, alors qu'il y en a 123.


<?php
include ('./_require/connect_db.php');
include ('./_require/functions.php');

$nb_affichage_par_page = 5;
$sql = 'SELECT count(*) FROM news';
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {

if (($nbtotal = $enr[0]) == 0) {
echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$query = 'SELECT id, date, titre, url, news, type FROM news ORDER BY date ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {

if ($nbenr == 0) {
echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
}
else {
//$data = mysqli_fetch_array($result, MYSQLI_ASSOC);
while ($data = mysqli_fetch_row($result)) {
$news = nl2br($news);

echo '<br />';
printf ("%s", $date=$data['date']);
echo '<br />';
echo '<table border="0" width="98%" cellpadding="0" cellspacing="0" id="news"><tr>';
echo '<td id="titre-news"><a href="';
printf ("%s", $url=$data['url']);
echo '" class="nav" target="_blank">';
printf ("%s", $url=$data['titre']);
echo '</a></td>';
echo '</tr><tr>';
echo '<td id="texte-news" style="border-top: solid 1px #CCCCCC">';
printf ("%s", $url=$data['news']);
echo '</td>';
echo '</tr></table>';
echo '<br />';
}
}
}
}
mysqli_free_result($result);
}
mysqli_close($link);
?>



2 - Comme ceci, je n'affiche que la dernière news, il y en a 123.

<?php
include ('./_require/connect_db.php');
include ('./_require/functions.php');

$nb_affichage_par_page = 5;
$sql = 'SELECT count(*) FROM news';
$result = mysqli_query($link, $query);
//if ($result = mysqli_query($link, $query)) {

//if (($nbtotal = $enr[0]) == 0) {
//echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
//}
//else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$query = 'SELECT id, date, titre, url, news FROM news ORDER BY date ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {

//if ($nbenr == 0) {
//echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
//}
//else {
$data = mysqli_fetch_array($result, MYSQLI_ASSOC);
//while ($data = mysqli_fetch_row($result)) {
$news = nl2br($news);

echo '<br />';
printf ("%s", $date=$data['date']);
echo '<br />';
echo '<table border="0" width="98%" cellpadding="0" cellspacing="0" id="news"><tr>';
echo '<td id="titre-news"><a href="';
printf ("%s", $url=$data['url']);
echo '" class="nav" target="_blank">';
printf ("%s", $url=$data['titre']);
echo '</a></td>';
echo '</tr><tr>';
echo '<td id="texte-news" style="border-top: solid 1px #CCCCCC">';
printf ("%s", $url=$data['news']);
echo '</td>';
echo '</tr></table>';
echo '<br />';
}
//}
//}
//}
mysqli_free_result($result);
//}
mysqli_close($link);
?>


3 - Comme ceci, je n'affiche que la première, il y a 12 news enregistrée avec ce type="news"

<?php

include ('./_require/connect_db.php');
include ('./_require/functions.php');

$nb_affichage_par_page = 5;
$sql = 'SELECT count(*) FROM news';
$result = mysqli_query($link, $query);
//if ($result = mysqli_query($link, $query)) {

//if (($nbtotal = $enr[0]) == 0) {
//echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
//}
//else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$query = 'SELECT id, date, titre, url, news, type FROM news WHERE type="news" ORDER BY date ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {

//if ($nbenr == 0) {
//echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
//}
//else {
$data = mysqli_fetch_array($result, MYSQLI_ASSOC);
//while ($data = mysqli_fetch_row($result)) {
$news = nl2br($news);

echo '<br />';
printf ("%s", $date=$data['date']);
echo '<br />';
echo '<table border="0" width="98%" cellpadding="0" cellspacing="0" id="news"><tr>';
echo '<td id="titre-news"><a href="';
printf ("%s", $url=$data['url']);
echo '" class="nav" target="_blank">';
printf ("%s", $url=$data['titre']);
echo '</a></td>';
echo '</tr><tr>';
echo '<td id="texte-news" style="border-top: solid 1px #CCCCCC">';
printf ("%s", $url=$data['news']);
echo '</td>';
echo '</tr></table>';
echo '<br />';
}
//}
//}
//}
mysqli_free_result($result);
//}
mysqli_close($link);
?>


Merci de vos conseils

Jack Bocar
LA GLOBULE
le 02/05/2007 à 07:49
LA GLOBULE
Ben c'est normal que cela ne fonctionne pas.
Et c'est pas un problème de mysqli ou de php 5.
Ton code ne fonctionnerait pas en php4 / mysql classique.

Regarde, tu as écris :

<?php
$sql = 'SELECT count(*) FROM news';
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {

if (($nbtotal = $enr[0]) == 0) {
?>


Tu dis que çà te sort 0 news.
C'est normal, car $enr n'existe pas.
De plus, tu ne fetch pas le résultat.

Fais donc un :

<?php
$sql = 'SELECT count(*) FROM news';
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {

$enr = mysqli_fetch_array($result);

if (($nbtotal = $enr[0]) == 0) {
?>


Ensuite, un peu plus bas :

<?php
if ($nbenr == 0) {
echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
}
?>


La pareil, $nbenr n'existe pas, donc remplace $nbenr par $nbtotal.

etc, etc.
jackbocar
le 02/05/2007 à 08:52
jackbocar
Bonjour,

Merci de ta réponse, j'ai fais les changements, mais rien ne change, toujours une seule et la dernière des news s'affiche...


<?php

include ('./_require/connect_db.php');
include ('./_require/functions.php');

$nb_affichage_par_page = 25;
$query = 'SELECT count(*) FROM news';
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {
$enr = mysqli_fetch_array($result);

if (($nbtotal = $enr[0]) == 0) {
echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$query = 'SELECT id, date, titre, url, news, type FROM news ORDER BY date ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {
$enr = mysqli_fetch_array($result);


if ($nbtotal == 0) {
echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
}
else {
$enr = mysqli_fetch_array($result, MYSQLI_ASSOC);
//while ($enr = mysqli_fetch_row($result)) {

$news = nl2br($news);

echo '<br />';
printf ("%s %s %s %s)\n", $enr["date"], $enr["titre"], $enr["url"], $enr["news"]);
}
}
}
//}
mysqli_free_result($result);
}
mysqli_close($link);
?>


Jack Bocar
LA GLOBULE
le 02/05/2007 à 10:10
LA GLOBULE
Ben c'est normal, tu ne fais pas de boucle pour afficher toutes les news, donc une seule s'affiche.

Fais une boucle while sur ton mysqli_fetch_array.
jackbocar
le 02/05/2007 à 14:16
jackbocar
Bonjour et bravo,

Tu es génial La globule, ça fonctionne maintenant.

Seul problème, l'affichage. Je n'arrive pas à faire plus simple dans ma table entre mes printf et mes echo …

Voici le script terminé est qui est fonctionnel pour celui qui a ou aura les mêmes problèmes que j'ai rencontrés.


<?php

include ('./connect_db.php');
//include ('./functions_pagination.php');

$nb_affichage_par_page = 55;
$query = 'SELECT count(*) FROM news';
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {
$row = mysqli_fetch_array($result);

if (($nbtotal = $row[0]) == 0) {
echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$query = 'SELECT id, date, titre, url, news, type FROM news ORDER BY date ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
$result = mysqli_query($link, $query);
if ($result = mysqli_query($link, $query)) {
$row = mysqli_fetch_array($result);


if ($nbtotal == 0) {
echo '<span class="texte_normal"><b>Aucune news trouvée.</b></span>';
}
else {
while ($row = mysqli_fetch_assoc($result)) {
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0"><tr><td width="30%">';
printf ("%s", $row['date']);
echo '</td>';
echo '<td width="70%"><a href="';
printf ("%s", $row['url']);
echo '" class="Lnav">';
printf ("%s", $row['titre']); echo '</a>';
echo '</td>';
echo '</tr></table><table border="0" width="100%" cellpadding="0" cellspacing="0"><tr>';
echo '<td width="100%">';
printf ("%s", $row["news"]);
echo '</td>';
echo '</tr></table>';
echo '<br />';
}
}
}
echo '<table border="0" cellspacing="0" cellpadding="1" align="right" valign="top"><tr><td align="right" valign="top">';
$barre_nav = barre_navigation($nbtotal, $nb_affichage_par_page, $_GET['debut'], '5', 'index.php');
echo '<span class="texte_normal"><b>'.$barre_nav.'</b></span>';
echo '</td></tr></table>';
}
mysqli_free_result($result);
}
mysqli_close($link);
?>
Koboneil
le 02/05/2007 à 19:26
Koboneil
C'est voulu que la boucle créer un nouveau tableau (<table>) pour chaque news ?

pis pourquoi tu fais pas juste des echo ?
Koboneil
Répondre
LoadingChargement en cours