> Tous les forums > Forum des Webmasters
 formulaire de newsSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
stef59280
  Posté le 28/02/2007 @ 16:14 
Aller en bas de la page 
Petit astucien

Bonjour

Je viens de créer sur mon site un script permettant d'afficher des news. J'aimerai donner la possibilitée à mes visiteurs d'ajouter leurs propres news. Par mesure de sécurité j'aimerai que leur news et stockée dans ma base de donnée mais pas validée. Pouvez vous me lancée, me donner des pistes, ou des morceaux de codes permettat de réaliser mon projet.

Merci

PS: j'avai penser de créer dans ma base de donnée un champ "validée" si il est sur 0 alors la news et afficher et si il est sur 1 la news n'est pas afficher elle attend validation.

Publicité
Malcolm
 Posté le 28/02/2007 à 16:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

avec une table SQL de ce style tu devrais pouvoir tirer qualque chose de tout à fait correct.

CREATE TABLE news (
id bigint(20) NOT NULL auto_increment,
titre VARCHAR(255) NOT NULL,
auteur VARCHAR(255) NOT NULL,
contenu LONGTEXT NOT NULL,
date INT(10) NOT NULL DEFAULT 0,

PRIMARY KEY(id)
) Type = MyISAM;

l'astuce de ta validation serait la date, justement : par défaut à zéro, elle serait remplacée par une date au format unix (nombre de secondes écoulées depuis le 1er janvier 1970) ce qui te donnerait en plus la date et l'heure de cette news (de validation, plus précisément).

Je n'y ai pas mis, mais tu peux le rajouter, d'attribut 'section' si tu en as plusieurs.

Après, un simple formulaire HTML suivi d'un traitement PHP peut faire l'affaire.

stef59280
 Posté le 28/02/2007 à 16:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci malcolm jai déjà fait une table avec la date regarde. Je ne comprend pas vraiment ton astuce avec la date car toutes mes news donne la date l'heure etc.. Donc je vois pas vraiment comment exploité ce champ. Si tu veux bien me redonner des explications que je comprendrai cette fois (en tout cas je l'espere) ca serai très bien merci. Si rtu pouvais me donner un bout du code php ca m'aiderai peut être à comprendre. Merci

PS : ce sont les conditions que tu veux utiliser ? ( ELSE IF.....)

CREATE TABLE `news` (
`id` int(11) NOT NULL auto_increment,
`titre` varchar(255) collate latin1_general_ci NOT NULL,
`pseudo` varchar(255) collate latin1_general_ci NOT NULL,
`contenu` text collate latin1_general_ci NOT NULL,
`timestamp` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=10 ;



Modifié par stef59280 le 28/02/2007 16:50
stef59280
 Posté le 28/02/2007 à 20:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Pouvez vous m'aider car j'ai essayé pleins de chose mais à chaque fois sans que je valide la news s'affiche.

Voici les codes que j'ai créé

La page du formulaire

<?php

mysql_connect("", "", "");
mysql_select_db("news_visiteur");

$titre = '';
$pseudo = '';
$contenu = '';
$valider = 1;

?>

<form id="form1" name="form1" method="post" action="ajouter_news_visiteurs_1.php">
Titre de votre news :
<label>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="titre" type="text" id="titre" size="70" />
</label>
<p>
<label>
Votre pseudo :
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="pseudo" type="text" id="pseudo" size="30" />
</label>
</p>
<p>Le contenu de votre news&nbsp;
<label>
<textarea name="contenu" cols="70" rows="10" id="contenu"></textarea>
<input type="hidden" name="valider" value="<?php echo $valider; ?>" />
</label>
</p>
<p>
<label>
<input type="submit" name="Submit" value="Envoyer" />
</label>
</p>
</form>
</body>
</html>

La page qui vérifie le formulaire :

<?php
$url_site ="mon site.fr";

mysql_connect("", "", "");
mysql_select_db("news_visiteur");


if( empty($titre) || empty($pseudo) || empty($contenu))
{
$reponse = 'Un ou plusieurs champs ne sont pas remplis, <a href="javascript:history.back(1)">Retour au formulaire</a>';
}

else //Si tout est bon on entre les données dans la BDD et on envoye le mail
{


mysql_query("INSERT INTO news_visiteur VALUES('', '" . $titre . "', '".$pseudo."', '" . $contenu . "', '" . time() . "', '".$valider."')");
$reponse = 'Votre news intitulée <strong>'.$titre.'</strong> vient d\'être ajoutée. Après vérification elle sera affichée sur le site. <br><a href="' .$url_site. '">Retour à l\'Accueil</a>';
}

mysql_close(); //On se deconnecte




?>

<html>
<body>
<? echo $reponse; ?> <!-- On affiche la reponse de tout le code du dessus -->
</body>
</html>

enfin la page permettant d'afficher les news ( c'est sur cette page qu'il y a un problème je pense )

<?php

mysql_connect("", "", "");
mysql_select_db("news_visiteur");

if ($_POST['valider'] == 1)
{
$retour = mysql_query('SELECT * FROM news_visiteur ORDER BY id DESC LIMIT 0, 5');
while ($donnees = mysql_fetch_array($retour))
{
?>

<div><p><strong>
Par <?php echo $donnees['pseudo'];?> Le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?> <br /><?php echo $donnees['titre']; ?>.</strong><br /><br /></p>
<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
echo '<h3></h3>';
} // Fin de la boucle des news

}
else
{
echo ('');
}
?>

Voila je vous remercie d'avance pour votre aide.

Malcolm
 Posté le 28/02/2007 à 20:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

alors pour ce qui est du contenu, j'ai hésité entre TEXT et LONGTEXT, j'ai préféré t'indiquer le second parce que je ne sais pas comment tu enregistres tes données. Si tu fais des htmlentities, la limite des 65 535 caractères du TEXT peut être vite atteinte (alors que les 4 milliards du LONGTEXT nous laissent un peu de temps ^^)

Concernant le timestamp, il fait 10 chiffres, pourquoi un bigint(20) ?

Ma "date" que j'aurais du appeler date_news d'ailleurs (pour ne pas confondre avec la propriété "date" de mysql) peut prendre 2 valeurs. Puisqu'il s'agit d'un entier, ça ne pose aucun problème s'il vaut 0. Alors je considérais dans mon exemple que toute news ajoutée avait pour date initiale "0". Et à titre de couche d'abstraction, j'associe le 0 de cette "date_news" à une date non validée. Lorsque ton administrateur valide, alors date devient 1126644789 par exemple et ainsi tu peux lister toutes tes news (validées) avec un WHERE date_news != 0.

un bout de code php ? Pour quoi faire ?

s'il s'agit d'insérer :

$req_insertnews = sprintf("INSERT INTO news VALUES ('','%s','%s','%s',0);",$titre, $auteur, $contenu);

mysql_query($req_insertnews) or die($req_insertnews."<br>".mysql_error());

S'il s'agit de valider :

if ((isset($_GET['act'])) && ($_GET['act'] == 'valider'))

{

$id = $_GET['id'];

$valday = date("d");

$valmonth = date("m");

$valyear = date("Y");

$valhour = date("H");

$valmin = date("i");

$valsec = date("s");

$date = mktime($valhour, $valmin, $valsec, $valmonth, $valday, $valyear);

$req_validernews = sprintf("UPDATE news SET date_news='%d' WHERE id='%d';",$date,$id);

mysql_query($req_validernews) or die($req_validernews."<br>".mysql_error());

}

s'il s'agit de lister les news (suggestion de présentation) :

- validées

$req_news = "SELECT auteur, titre, contenu, date_news FROM news WHERE date_news != '0' ORDER BY date_news DESC;";

$news = mysql_query($req_news) or die($req_news."<br>".mysql_error());

while ($affichenews = mysql_fetch_array($news))

{

echo "<h3>".$affichenews['titre']." <em>posté par ".$affichenews['auteur']."</em> le ".date("d/m/Y H:i:s",$affichenews['date_news'])."</h3>";

echo "<p>".$affichenews['contenu']."</p>";

echo "<hr>";

}

- à valider

$req_news = "SELECT auteur, titre, contenu, date_news FROM news WHERE date_news = '0';";

$news = mysql_query($req_news) or die($req_news."<br>".mysql_error());

while ($affichenews = mysql_fetch_array($news))

{

echo "<h3>".$affichenews['titre']." <em>posté par ".$affichenews['auteur']."</em> le ".date("d/m/Y H:i:s",$affichenews['date_news'])."</h3>";

echo "<p>".$affichenews['contenu']."</p>";

echo "<p><a href=\"?act=valider&amp;id=".$affichenews['id']."\">Valider cette newq</a></p>";

echo "<hr>";

}

Malcolm
 Posté le 28/02/2007 à 20:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

tu as répondu le temps que j'écrive, nos messages se sont croisés...
stef59280
 Posté le 28/02/2007 à 22:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

En tout cas un grand merci malcolm je vais voir ce que je peux faire

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
69,99 €Casque sans fil Sony WH-CH700NL Bluetooth avec réduction de bruit active à 69,99 €
Valable jusqu'au 11 Mai

Cdiscount fait une belle promotion sur le casque sans fil Sony WH-CH700NL Bluetooth qui passe à 69,99 € livré gratuitement alors qu'on le trouve ailleurs à plus de 120 €. Ce casque sans fil rechargeable (via micro USB) offre jusqu'à 35h d'autonomie. L'AINC (Artificial Intelligence Noise Cancelling) s'adapte à votre environnement, ce qui vous permet d'éliminer les bruits indésirables lors de vos voyages ou si vous êtes avec d'autres personnes dans une même pièce. Une très bonne affaire.


> Voir l'offre
299,99 €Ecran 27 pouces LG Ultragear 27GN800-B (QHD, IPS, 1 ms, 144 Hz) à 299,99 €
Valable jusqu'au 11 Mai

Amazon fait une promotion sur l'écran LG Ultragear 27GN800-B qui passe à 299,99 € livré gratuitement au lieu de 379 € ailleurs. Cet écran possède une dalle 27 pouces QHD (2560x1440) IPS à 144 Hz, un temps de réponse de 1 ms. Il est compatible FreeSync et GSync


> Voir l'offre
94,90 €Alimentation modulaire Seasonic Focus Plus Gold 650W (garantie 10 ans) à 94,90 €
Valable jusqu'au 11 Mai

Amazon fait une promotion sur l'alimentation Seasonic Focus Plus Gold 650W qui passe à 94,90 € livrée gratuitement alors qu'on la trouve ailleurs à partir de 126 €. Le niveau frise la perfection avec une magnifique certification 80+ OR et un câblage full modulaire, le tout dans un silence de cathédrale. L'alimentation est garantie 10 ans.


> Voir l'offre

Sujets relatifs
Site de mariage - Formulaire d'inscription
Formulaire qui ne fonctionne pas avec Joomla
Formulaire d'envoi de message
Actualisation d'un sous formulaire
Installation Capcha Cryptographp sur formulaire
JS formulaire dynamique sous forme de tableau
formulaire php incomplet envoyé vers bdd
Envoi de formulaire sur Email: comment faire SVP?
Problème pour recevoir infos formulaire
Pas de mail recu avec formulaire html et php
Plus de sujets relatifs à formulaire de news
 > Tous les forums > Forum Forum des Webmasters