JeuWeb - Crée ton jeu par navigateur
Problème avec un timestamp - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème avec un timestamp (/showthread.php?tid=451)



Problème avec un timestamp - Jalahin - 18-11-2006

Bonjour à vous; je viens pour vous demander de l'aide sur un code basique, mais là je vois pas où est mon erreur.
J'ai un tchat tout ce qu'il y a de plus basique, qui fonctionne(ait). Seulement, j'ai voulu ajouter la date et l'heure de chaque message. Et là, PAF, ça merde. J'ai d'abord eu un premier code, qui remplaçait mon message par le Timestamp (pas la date et l'heure, vraiment le timestamp brut): pas terrible quand même ^^. Et puis je l'ai modifié, pour arriver à ça:

Code PHP :
<?php
if (isset($_POST['pseudo']) AND isset($_POST['message'])) // Si les variables existent
{
if (
$_POST['pseudo'] != NULL AND $_POST['message'] != NULL) // Si on a quelque chose à enregistrer
{
// D'abord, on se connecte à MySQL
mysql_connect("localhost", "******", "******");
mysql_select_db("******");

// On utilise la fonction PHP htmlentities pour éviter d'enregistrer du code HTML dans la table
$message = htmlentities ($_POST['message']);
$pseudo = htmlentities ($_POST['pseudo']);
$time = time();

// Ensuite on enregistre le message
mysql_query("INSERT INTO minichat VALUES('', '" . $pseudo . "', '" . $message . "', '" . $time . "')");

// On se déconnecte de MySQL
mysql_close();
}
}


// Que l'on ait enregistré des données ou pas...
// On affiche le formulaire puis les 10 derniers messages

// Tout d'abord le formulaire :
?>



<form action="minichat.php" method="post">

<p align="center">
<label>Pseudo :<br /><input type="text" name="pseudo" value="<?php echo $_POST['pseudo']?>" /></label><br /><br />
<label>Message :<br /><textarea name="message" rows="5" cols="35"></textarea></label><br /><br /><br />

<input type="submit" value="Envoyer" />
</p>

</form>


<?php

// Maintenant on doit récupérer les 10 dernières entrées de la table
// On se connecte d'abord à MySQL :
mysql_connect("localhost", "******", "******");
mysql_select_db("******");

// On utilise la requête suivante pour récupérer les 10 derniers messages :
$reponse = mysql_query("SELECT * FROM ****** ORDER BY ID DESC LIMIT 0,10");

// On se déconnecte de MySQL
mysql_close();

// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($reponse) )
{
$time = date('d/m/y à H:i', $donnees['time']);
?>


<p><?php echo $donnees['pseudo']; ?> à <?php echo $time; ?>
{
?>


<p><?php echo $donnees['pseudo']; ?> à <?php echo $donnees['time']; ?>

<br />
<?php echo $donnees['message']; ?></p>



<?php
}
?>


Voila le code (désolé, je ne sais toujours pas comment le faire apparaitre en couleurs (si quelqu'un pouvait me le dire, ce serait sympa Wink)). Quand j'essaye d'accéder à la page, ça me dit qu'il y a une erreur. L'erreur se trouve à la ligne 4 de ce code:
Code :
if ($_POST['pseudo'] != NULL AND $_POST['message'] != NULL) // Si on a quelque chose à enregistrer

Je vous demande donc de l'aide pour ce script, là je sèche :S
Merci d'avance Smile


Edit: Merci Archange Big Grin


RE: Problème avec un timestamp - Archange - 18-11-2006

Pour faire apparaitre en couleur utilise les balise php /php ( ajoute des [] )


RE: Problème avec un timestamp - Klemmth - 18-11-2006

Juste est-ce que tu pourrais copier-coller l'erreur qui s'affiche stp ?


RE: Problème avec un timestamp - Globe - 18-11-2006

1. A ta place j'ouvrirais et je fermerais ma connexion mysql une seule fois...

Code PHP :
<?php
if (isset($_POST['pseudo']) AND isset($_POST['message'])) // Si les variables existent

2. Dites moi si je me trompe mais dans les confitions c'est pas plutot :
Code PHP :
<?php
if (isset($_POST['pseudo']) && isset($_POST['message'])) // Si les variables existent

Sinon il faudrais que tu nous montre l'erreur...
En éspèrant t'avoir aidé,
Globe.


RE: Problème avec un timestamp - Loetheri - 18-11-2006

Comme l'a dit Globe, n'ouvre qu'une fois ta connexion. Regroupe tout le PHP ensemble et avant d'écrire de l'HTML ou (xHTML). Cela sera plus clair (à mes yeux) et si quelque chose foire, tu pourras toujours rediriger car le header n'est pas envoyé.

Ceci dit, tu peux faire :
Code PHP :
<?php 
if (isset($_POST['message'],$_POST['nom'])) { [...]}
De plus ta deuxième condition, je crois mais je me trompe peut-être, est inutile.

Utilise plutot mysql_real_escape_string pour protéger ta base de données. Et évite mysql_htmlentities avant de mettre dans ta base de données. Tu perds de la place et cette fonction n'est pas prévue à cet effet. Tu l'utilses quand tu veux afficher (tout comme nl2br est à utiliser lorsqu'on affiche jamais avant).

Evite les SELECT * [...]. Spécifie toujours les champs que tu veux récupérer.

Vers la fin tu écris "} ?>" alors que la balise PHP n'est pas ouverte.

&& et AND sont équivalents ;-)

Sinon malheureusement, je ne vois pas l'erreur. Si tu sais dire ce que PHP te met comme erreurn, cela aiderait :p


RE: Problème avec un timestamp - Jalahin - 18-11-2006

Oula, je vous avoue que je ne suis pas assez calé en PHP pour comprendre ce que vous me dites.
Sinon l'erreur est la suivante:

Parse error: syntax error, unexpected '[' in /mnt/139/sda/f/7/bdaparadox/minichat.php on line 4


RE: Problème avec un timestamp - Maxime - 19-11-2006

Je ne vois pas trop où est le problème, surtout si ta ligne 4 c'est la ligne 4 du code que tu nous as mis là, mais je peux te faciliter les choses.
Au début de ton script tu utilises deux conditions pour vérifier que tes variables existent et qu'elles ne soient pas vide, alors qu'avec une seule condition c'est très faisable, regardes:
Code PHP :
<?php
if (!empty($_POST['pseudo']) AND !empty($_POST['message'])) // Si les variables existent et sont renseignées
{
    // D'abord, on se connecte à MySQL
    mysql_connect("localhost", "******", "******");
    mysql_select_db("******");

    // On utilise la fonction PHP htmlentities pour éviter d'enregistrer du code HTML dans la table
    $message = htmlentities ($_POST['message']);
    $pseudo = htmlentities ($_POST['pseudo']);
    $time = time();

    // Ensuite on enregistre le message
    mysql_query("INSERT INTO minichat VALUES('', '" . $pseudo . "', '" . $message . "', '" . $time . "')");

    // On se déconnecte de MySQL
    mysql_close();
}
?>

Bon je précise que les balises d'ouverture et de fermeture php ne sont là que pour aider à la coloration du code.
En fait la fonction empty() vérifie l'existence de la variable ET le fait qu'elle ne soit pas vide, donc en faisant !empty($la_variable) on vérifie que $la_variable existe et qu'elle ne soit pas vide.

Sinon pour ton erreur je ne vois pas où ça cloche, mais à mon avis ça doit pas être bien dur(de toute manière quand on trouve pas les 3/4 du temps c'est super con comme erreur).


RE: Problème avec un timestamp - tyrus - 19-11-2006

Salut
Je pense avoir une idée d'ou vient ton erreur donc voila une partie de ton code
Code PHP :
<?php 
// Ensuite on enregistre le message
mysql_query("INSERT INTO minichat VALUES('', '" . $pseudo . "', '" . $message . "', '" . $time . "')");

// On se déconnecte de MySQL
mysql_close();
}
}
Je pense qui manque un point virgule ici
Code PHP :
<?php 
// Ensuite on enregistre le message
mysql_query("INSERT INTO minichat VALUES('', '" . $pseudo . "', '" . $message . "', '" . $time . "')");

// On se déconnecte de MySQL
mysql_close();
};
}

Bon je suis pas sur et la solution de Maxime me semble plus efficase :good:


RE: Problème avec un timestamp - Loetheri - 19-11-2006

Il ne faut pas de ; après la }.


RE: Problème avec un timestamp - Jalahin - 20-11-2006

Merci Maxime, ça a marché ce code. En revanche, j'ai un problème avec l'affichage du timestamp. Il m'a mis le timestamp à la place de mon message, j'ai modifié quelques paramètres... Là, il m'affiche la date et l'heure du premier timestamp:
Citation :Pim le 01/01/1970 à 01h00
Pim
Et puis le truc con, il m'a enlevé mon formulaire, et là je vois vraiment pas pourquoi o_O

En tout cas merci Big Grin