HELP !!! code php pas tout à fait ok

emetrem Messages postés 2 Date d'inscription mardi 8 décembre 2009 Statut Membre Dernière intervention 8 décembre 2009 - 8 déc. 2009 à 12:50
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 8 déc. 2009 à 15:36
Bonjour à tous /toutes,

Je débute complètement en php et même en html. il y a 6 mois je ne savais pas comment envoyer un site sur la toile !!! c'est vous dire que j'arrive de loin.

je réalise pendant mon temps libre une page perso pour mon voyage à l'étranger. La date du départ approche et mon code révèle des erreurs : je réalise un formulaire pour que mes amis réagissent à chaque post que j'éditerais en fonction de mes aventures.

mes problèmes :
- quand qq1 tape un commentaire et qu'il passe à la ligne dans son texte, se passage à la ligne n'apparait pas sur la page.
le texte est sur une seule ligne.
- il y a des anti-slach devant mes guillemets et mes apostrophes.
- l'heure de l'envoie du poste apparait sous forme de "0" : "Le 00/00/0000 à 00:00 ..." (sur ma table, dans type, j'ai sélectionné "datetime")

voici mon code :


<?php

if (isset($_POST['nom']) AND isset($_POST['commentaire']))
{
if($_POST['nom']!= NULL AND $_POST['commentaire']!= NULL)
{
mysql_connect("localhost","page_perso","mot_de_passe");
mysql_select_db("base_de_donnees");

$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$commentaire = mysql_real_escape_string(htmlspecialchars($_POST['commentaire']));
$commentaire = nl2br($commentaire);
$temps = date('d/m/Y', time());

mysql_query("INSERT INTO table VALUES('','$nom','$commentaire','$temps')");

mysql_close();
}
}
?>

<?php
mysql_connect("localhost", "page_perso", "mot_de_passe");
mysql_select_db("base_de_donnees");

// Combien de commentaires ?
$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM 10jan01");
$donnees = mysql_fetch_array($retour);

mysql_close();
?>



<?php echo $donnees['nbre_entrees']; ?> commentaires



<?php
//ici, j'ecris sur ma page

mysql_connect("localhost","page_perso","mot_de_passe");
mysql_select_db("base_de_donnees");

$reponse = mysql_query("SELECT*FROM 10jan01 ORDER BY id ");

mysql_close();

while($donnees = mysql_fetch_array($reponse))
{

?>

<?php sscanf($donnees['temps'], "%4s-%2s-%2s %2s:%2s", $annee, $mois, $jour, $heure, $minute); ?>

Le <?php echo $jour.'/'.$mois.'/'.$annee.' à '.$heure.':'.$minute; ?>, <?php echo $donnees['nom'];?> à écrit :



<?php echo $donnees ['commentaire'];?>



<?php
}
?>






Laissez vos commentaires

<form method ="post" action="blog-01.php">


<label for="nom">Nom (obligatoire)</label>


<label for="commentaire">votre commentaire</label>

<textarea name="commentaire" id="commentaire" rows="10" cols="50" tabindex="30"></textarea>







</form>

3 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 déc. 2009 à 13:05
Salut,

C'est assez courageux de se lancer dans une telle aventure... Tu aurais tout aussi bien pu utiliser un blog comme Wordpress, tu y aurais gagné en temps... Mais tu aurais beaucoup moins appris ;)

Pour les retours à la ligne : dans un champ de formulaire textarea, les retours à la lignes sont matérialisés par un caractère retour chariot : \n ou \n\r
Pour les afficher, il faut utiliser la fonction nl2br() de PHP qui convertit ces caractères (non-imprimables) en balise HTML


Pour les antislash : où apparaissent-ils exactement ? Sur la page quand tu affiches un commentaire qui vient de la base de données ? Il faut utiliser la fonction PHP stripslashes() qui supprimera ces caractères.

Enfin pour la date que tu enregistres, tu ne passes pas le bon format. Jette un oeil à la doc MySQL.
Le type DATETIME est prévu lorsque vous souhaitez stocker une date et une heure. MySQL affiche les valeurs de type DATETIME au format ‘AAAA-MM-JJ HH:MM:SS’. L'intervalle de validité va de ‘1000-01-01 00:00:00’ à ‘9999-12-31 23:59:59’. (``validité'' signifie que même si d'autres valeurs plus anciennes peuvent être manipulées, il n'est pas garantit qu'elles le seront).


Tu as aussi la possibilité de laisser MySQL définir la date et l'heure lors de l'insertion d'un nouveau commentaire, en définissant la valeur par défaut à
ON UPDATE CURRENT_TIMESTAMP (cf la doc)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
emetrem Messages postés 2 Date d'inscription mardi 8 décembre 2009 Statut Membre Dernière intervention 8 décembre 2009
8 déc. 2009 à 14:30
merci d'avoir répondu si rapidement !

En effet, si je me suis embarqué dans une telle entreprise, c'est que j'ai trouvé ça très intéressant. ça permet de voir autre chose que son propre job

revenons à nos moutons !

- pour les antislash : ton code fonctionne ! je n'ai plus de pb à ce niveau.
- pour le passage à la ligne : j'avais déjà écris nl2br() dans mon code et ça ne marchait pas, je ne sais pas ce que j'ai bidouillé mais maintenant à la place du passage à la ligne il y a des "m". Même dans ma base de données : avant le texte passait à la ligne et maintenant, il y a ce fameux "m" sans passer à la ligne.
- pour la date : il y a toujours des "0" partout et je ne vois pas quelle est mon erreur, même après avoir lu dans le doc .
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 déc. 2009 à 15:36
Re,

Pour le "m", je pense que tu as fait quelque chose quelque part qui le rajoute... PHP ne fait pas ça tout seul sans qu'on lui demande.

Pour le passage à la ligne, je ne sais pas où tu le fais : je pense qu'il est préférable de l'exécuter avant l'insertion dans la base de données sur le texte du message.

Pour la date, c'est cette ligne là qui ne va pas :
$temps = date('d/m/Y', time()); 

Ca ne produit pas une valeur du bon format. Il faut que la date que tu génères à cette ligne soit dans le format : AAAA-MM-JJ HH:MM:SS
Donc je pense plutôt quelque chose comme ça :
$temps = date('Y-m-d G:i:s');


Personnellement, d'une manière générale, j'utilise de préférence un timestamp unix (stocké dans un champ de type INT UNSIGNED dans la base de données), valeur retournée par time(). C'est cette valeur que je stocke, et j'affiche la date dans le format que je veux avec date() ou gmdate(), ou encore mieux, avec un objet DateTime(). Ainsi, je sais que dans ma base de données j'ai TOUJOURS le nombre de secondes écoulées depuis le 1er janvier 1970 (un timestamp unix quoi). C'est une des valeurs les plus faciles à manipuler (les types de colonnes de date et heure de MySQL sont assez pénibles à utiliser parce qu'ils sont formatés d'une certaine manière qui oblige à les convertir ensuite).

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
Rejoignez-nous