Création d'un livre d'or en PHP : problème de débutant...

Création d'un livre d'or en PHP : problème de débutant... - PHP - Programmation

Marsh Posté le 25-10-2011 à 20:41:02    

Bonjour à tous :
Voilà, ne sachant plus que faire, j'ai 2 soucis qui commencent un peu à m'ennuyer menu:
 
1) Premièrement :
Pour une raison que je n'explique pas du tout, lorsque je crée un message sur mon livre d'or, une fois celui ci posté, lorsque je rafraichi ma page, eh bien il se trouve que ce dernier est dupliqué, puis si je rafraichi encore, c'est à nouveau le cas, etc.....
Quel diable possède ma page?? !!! Je ne comprends rien, que se passe t-il? J'ai essayé de recréer une nouvelle table sur phpmyadmin, mais le problème reste intact
 
2) Deuxièmement :
Je me suis fortement inspiré du script de M@teo pour mon livre d'or (j'ai tout appris ici pour développer mon site orienté photo, donc ne m'en voulez pas si je n'ai pas vraiment inové)...
Et il se trouve qu'en essayant de rajouter simplement la date aux posts de mes visiteurs, je n'arrive pas à me dépatouiller : en effet, l'ordi m'affiche inexorablement 01/01/1970 (date de création du php si j'en crois les cours de M@teo21..)
Voilà ce que j'ai rajouté dans le script :
 
PS : j'ai donc crée ma table "livreor" : iD/Pseudo/Message/Date
<?php mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')" );
 
Et pour l'affichage de la date :
<?php echo '<font color="orange">'.date("d/m/Y",$val['date_post']).'</font>';
 
 
Je me rend compte que c'est au niveau de l'enregistrement que cela pêche, car dans phpmyadmin, il y a toujours écrit 00/00/00 dans la colonne date...donc c'est que rien n'est finalement enregistré concernant la date...
 
 
SVP de l'aide car ce problème me stresse HELP !!!
Je ne sais pas trop si ça se fait ici, mais voici mon code extrait en entier (je vous passe le début) :
 
 
Code : PHP - Sélectionner
 
 
<form method="post" action="livreor.php">
        <p>Mon site vous plaît ? Laissez-moi un message !</p>
        <p>
            Pseudo : <input name="pseudo" /><br />
            Message :<br />
            <textarea name="message" rows="8" cols="35"></textarea><br />
            <input type="submit" value="Envoyer" />
        </p>
    </form>
 
    <p class="pages">
 
<?php
mysql_connect("....", ".......", "......" );
mysql_select_db("......." );
 
// --------------- Étape 1 -----------------
// Si un message est envoyé, on l'enregistre
// -----------------------------------------
 
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
    $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
    $message = mysql_real_escape_string(htmlspecialchars($_POST['message'])); // De même pour le message
    $message = nl2br($message); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />
 
    // On peut enfin enregistrer :o)
    mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')" );
}
 
// --------------- Étape 2 -----------------
// On écrit les liens vers chacune des pages
// -----------------------------------------
 
// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 20; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
}
?>
 
</p>
 
<?php
 
 
// --------------- Étape 3 ---------------
// Maintenant, on va afficher les messages
// ---------------------------------------
 
if (isset($_GET['page']))
{
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $page = 1; // On se met sur la page 1 (par défaut)
}
 
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
 
$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
 
while ($donnees = mysql_fetch_array($reponse))
{
        echo '<p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p>';
}
 
mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)
?>
 
</body>
</html>
 


Message édité par Mike666 le 28-10-2011 à 22:51:51
Reply

Marsh Posté le 25-10-2011 à 20:41:02   

Reply

Marsh Posté le 28-10-2011 à 07:22:13    

Pour ton problème de doublons lors du rafraichissement, il suffit juste après ton insert de vider POST ($_POST = array(); ), et faire une redirection via header.
 
Si tu veux afficher ta date au format français, utilise la fonction DATE_FORMAT de mysql.


Message édité par boutlatent le 28-10-2011 à 07:22:56

---------------
La connerie est la décontraction de l'intelligence.
Reply

Marsh Posté le 30-10-2011 à 13:39:19    

Pour ta requête d'insertion, tu peux par exemple utiliser la fonction "NOW()" de MySQL qui retourne la date au moment précis de l'insertion. Tu peux aussi passer par CURDATE() ou CURTIME().

 

Dans le code que tu donne, tu utilise une variable $date. Mais elle n'est jamais initialisée.

 

En utilisant NOW() :

Code :
  1. mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "', NOW()" );
 

En utilisant ta variable $date :

Code :
  1. $date = date("Y-m-d" );
  2. mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')" );
 

Après il faut bien vérifier si ton champ date dans ta BDD est du type DATE, DATETIME...


Message édité par guicara le 30-10-2011 à 13:39:33
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed