Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 26-11-2007 07:10:18

azaime
Membre
Date d'inscription: 26-11-2007
Messages: 9

Aide pour script de news

Bonjour, j'essai de mettre une rubrique news sur mon site, pour l'instant je test juste le script qui contient 3 pages en local avec easyphp,
j'ai bien crée la base de donnée et la table, mais voila impossible d'ajouter une news, et dans le champ titre il y a "<?php echo $titre; ?>", dans le champ contenu il y a "<?php echo $contenu; ?>".
Voila le script de la page index:

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
// On récupère les 5 dernières news
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5');
while ($donnees = mysql_fetch_array($retour))
{
?>
<div class="news">
    <h3>
        <?php echo $donnees['titre']; ?>
        <em>le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></em>
    </h3>
   
    <p>
    <?php
    // On enlève les éventuels antislash PUIS on crée les entrées en HTML (<br />)
    $contenu = nl2br(stripslashes($donnees['contenu']));
    echo $contenu;
    ?>
    </p>
</div>
<?php
} // Fin de la boucle des news
?>

celui de la page liste_news.php :

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut poster une news ?
//-----------------------------------------------------
if (isset($_POST['titre']) AND isset($_POST['contenu']))
{
    $titre = addslashes($_POST['titre']);
    $contenu = addslashes($_POST['contenu']);
    // On vérifie si c'est une modification de news ou pas
    if ($_POST['id_news'] == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "')");
    }
    else
    {
        // On protège la variable "id_news" pour éviter une faille SQL
        $_POST['id_news'] = addslashes($_POST['id_news']);
        // C'est une modification, on met juste à jour le titre et le contenu
        mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_news'] . "'");
    }
}

//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer une news ?
//--------------------------------------------------------
if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news
{
    // Alors on supprime la news correspondante
    // On protège la variable "id_news" pour éviter une faille SQL
    $_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
    mysql_query('DELETE FROM news WHERE id=\'' . $_GET['supprimer_news'] . '\'');
}
?>
<table><tr>
<th>Modifier</th>
<th>Supprimer</th>
<th>Titre</th>
<th>Date</th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr>
<td><?php echo '<a href="rediger_news.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
</tr>
<?php
} // Fin de la boucle qui liste les news
?>

et enfin celui de rediger_news.php :

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
if (isset($_GET['modifier_news'])) // Si on demande de modifier une news
{
    // On protège la variable "modifier_news" pour éviter une faille SQL
    $_GET['modifier_news'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_news']));
    // On récupère les infos de la correspondante
    $retour = mysql_query('SELECT * FROM news WHERE id=\'' . $_GET['modifier_news'] . '\'');
    $donnees = mysql_fetch_array($retour);
   
    // On place le titre et le contenu dans des variables simples
    $titre = stripslashes($donnees['titre']);
    $contenu = stripslashes($donnees['contenu']);
    $id_news = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
}
else // C'est qu'on rédige une nouvelle news
{
    // Les variables $titre et $contenu sont vides, puisque c'est une nouvelle news
    $titre = '';
    $contenu = '';
    $id_news = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
}
?>
<form action="liste_news.php" method="post">
<p>Titre : <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" /></p>
<p>
    Contenu :<br />
    <textarea name="contenu" cols="50" rows="10">
    <?php echo $contenu; ?>
    </textarea><br />
   
    <input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />
    <input type="submit" value="Envoyer" />
</p>
</form>

Merci de m'aider.

Hors ligne

 

#2 26-11-2007 07:39:35

lolo3129
Membre
Lieu: Paris
Date d'inscription: 10-05-2005
Messages: 506
Site web

Re: Aide pour script de news

erreur sql à priori.

tu peux faire

Code:

mysql_query("ma requete") or die(mysql_error())

pour afficher l'erreur.
A mon avis, il faut que tu précises les colonnes que tu veux insérer et ne pas mettre de valeur vide pour la colonne en auto-incrément.

++

Hors ligne

 

#3 26-11-2007 10:48:05

azaime
Membre
Date d'inscription: 26-11-2007
Messages: 9

Re: Aide pour script de news

Euh je connais pas grand chose en php, tu pourrais m'écrire en php ce que tu viens de dire, merci.

Hors ligne

 

#4 26-11-2007 12:36:31

lolo3129
Membre
Lieu: Paris
Date d'inscription: 10-05-2005
Messages: 506
Site web

Re: Aide pour script de news

désolé, je n'ai pas le nom de tes colonnes.

Hors ligne

 

#5 26-11-2007 12:40:16

azaime
Membre
Date d'inscription: 26-11-2007
Messages: 9

Re: Aide pour script de news

Ok j'ai rien changé et maintenant ça fonctionne ?!! Merci qd mm.

Hors ligne

 

#6 29-11-2007 07:00:35

azaime
Membre
Date d'inscription: 26-11-2007
Messages: 9

Re: Aide pour script de news

Bonjour, je reprends cette discution, bon pour tout ceux qui cherche un script de news pour leur site je poste ce lien http://www.phpdebutant.org/article84.php c'est très bien expliqué.

Alors moi je me suis aidé de ce script et comme je trouvais que le tableau en html était par terrible, j'ai changé deux, trois trucs avec des div. Tout marche nickel excepté les nombres de pages de news en bas et les bouton suivant précédent.
Je m'explique:
- Pour l'instant j'ai deux pages de news, j'essai donc de mettre dans ma page de news les nombres de pages (1,2) en bas dans un conteneur div, il y a bien 1 et 2 mais séparé par au moins 780px, impossible de les raprocher ni de changer leur taille couleur etc.

- Ensuite pareil pour les bouton précédent et suivant qui marchent très bien mais impossible de les déplacer.

Je poste le script si quelqu'un a une idée merci.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Bienvenue sur mon site</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <link rel="stylesheet" media="screen" type="text/css" title="Design" href="style.css" />
       <style type="text/css">
        h1, h3
        {
            text-align:center;
        }
        h3
        {
            background-image:url(images/fond_news.jpg);
            color:white;
            font-size:0.9em;
            margin-bottom:0px;
            text-align:left;
            font-family:Arial, Helvetica, sans-serif;
            padding-left:5px;
        }
        .news p
        {
            background-color:#CCCCCC;
            margin-top:0px;
        }
        .news
        {
            width:785px;
            margin-left:auto;
            margin-right:auto;
        }
       
        a{
text-decoration:none;
color:#000000;
font-size:16px;

font-weight:bold;
margin-left:680px;
}

        </style>
    </head>
   
    <body>
<div class="banniere">
</div>

<div class="menu">

</div>

<?
function affichePages($nb,$page,$total) {
        $nbpages=ceil($total/$nb);
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
       
        while($numeroPages <= $nbpages) {
       
        echo '<a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a>';
        $limite = $limite + $nb;
        $numeroPages = $numeroPages + 1;
        $compteurPages = $compteurPages + 1;
            if($compteurPages == 10) {
            $compteurPages = 1;
            }
        }
       
}


function displayNextPreviousButtons($limite,$total,$nb,$page) {
$limiteSuivante = $limite + $nb;
$limitePrecedente = $limite - $nb;

if($limite != 0) {
       
        echo  '<form action="'.$page.'" method="post">'."\n";
        echo  '<input type="submit" value="précédents">'."\n";
        echo  '<input type="hidden" value="'.$limitePrecedente.'" name="limite">'."\n";
        echo  '</form>'."\n";
       
}

if($limiteSuivante < $total) {
       
        echo  '<form action="'.$page.'" method="post">'."\n";
        echo  '<input type="submit" value="suivants">'."\n";
        echo  '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
        echo  '</form>'."\n";
     
           
}

}

function verifLimite($limite,$total,$nombre) {
    // je verifie si limite est un nombre.
    if(is_numeric($limite)) {
       
// si $limite est entre 0 et $total, $limite est ok
        // sinon $limite n'est pas valide.
        if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
            // j'assigne 1 à $valide si $limite est entre 0 et $max
            $valide = 1;
        }   
        else {
            // sinon j'assigne 0 à $valide
            $valide = 0;
        }
    }
    else {
            // si $limite n'est pas numérique j'assigne 0 à $valide
            $valide = 0;
    }
// je renvois $valide
return $valide;
}


$nombre = 5;  // on va afficher 5 résultats par page.
if (!isset($limite)) $limite = 0; // si on arrive sur la page pour la première fois
               // on met limite à 0.
   
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];


$link = mysql_connect("localhost", "root", "") or die ("impossible de se connecter au serveur");
mysql_select_db("news");

// requête SQL qui compte le nombre total
// d'enregistrements dans la table.
//=========================================
$select = 'SELECT count(id) FROM news';
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];

//=========================================
// vérifier la validité de notre variable
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite)  {
    $limite = 0;
}


// requête SQL qui ne prend que le nombre d'enregistrements nécessaire à l'affichage.
$select = 'select id, titre, contenu, timestamp FROM news ORDER BY timestamp DESC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );

// si on a récupéré un résultat on l'affiche.
if($total) {
while($row = mysql_fetch_array($result)) {
?>
<div class="espace"></div>
<div class="conteneur">

    <h3>
        <?php echo $row['titre']; ?>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?php echo date('d/m/Y'); ?>
    </h3>
   
    <div class="conteneur_petit">
    <p>
    <div class="news">
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <?php
    // On enlève les éventuels antislash PUIS on crée les entrées en HTML (<br />)
    $contenu = nl2br(stripslashes($row['contenu']));
    echo $contenu;
    }}
    ?>
    </div>
    </p>
</div>
</div>
<div class="conteneur_pages">
<?
 
// on libère le résultat
mysql_free_result($result);



//=========================================   
// si le nombre d'enregistrement à afficher
// est plus grand que $nombre
//=========================================

if($total > $nombre) {
    // affichage des liens vers les pages
    affichePages($nombre,$page,$total);
    // affichage des boutons
    displayNextPreviousButtons($limite,$total,$nombre,$page);
}

?>
</div>
</body>
</html>

Hors ligne

 

#7 29-11-2007 07:44:12

azaime
Membre
Date d'inscription: 26-11-2007
Messages: 9

Re: Aide pour script de news

Waou ça bouge sur ce forum !!
Bon y un écart entre les numeros de pages à cause de mon css de a{ j'avais mis margin-left:680px; (tu sors :p )
pareil pour la couleur...

Hors ligne