Système d'articles
- Accueil
- Forum
- Programmation
- PHP
- Système d'articles
M69-74 Le 6 avril 2016 à 19:35 (Édité le 25 janvier 2019 à 17:50)
Alors en fait, je voudrais faire un système d'article. En gros, sur ma page admin_articles.php, je voudrais que l'administrateur puisse poster un article (avec une image, titre, contenu etc...), mais le problème c'est que j'ai aucune idée de comment faire la vérification, notamment pour enregistrer l'image dans ma bdd... Je voudrais ensuite afficher tout les articles sur une autre page articles.php sur laquelle il y aura les titres d'articles avec leur image et quand on clique sur le titre ou sur l'image, ca nous redirige vers articles.php?id=iddelarticle.
Voici le code du formulaire pour poster l'article (admin_articles.php) :
<form method="POST" style="display:block; margin-left:25px;">
<input type="text" placeholder="Titre de l'article" name="title_articles" style="margin-right:15px; width:315px;"><input type="text" name="name_articles" placeholder="Auteur" value="<?= $_SESSION['pseudo'] ?>">
<br /><br />
<textarea placeholder="Contenu de l'article" name="content_articles" style="width:500px;"></textarea>
<br /><br />
<input type="file" name="image"><br /><br />
<input type="submit" value="Poster" name="post_articles">
</form>
Et voici ma table dans laquelle je voudrais enregistrer les articles (table nommée ''billets'') :
id(INT 11) Index primary, A.I
titre(varchar 255)
contenu(text)
date_creation(datetime)
image(varchar 255)
J’espère que je suis clair, sinon, redemandez-moi ! 😉
En vous remerciant par avance,
Cordialement,
Marius
julienb Le 6 avril 2016 à 20:50 (Édité le 1 janvier 1970 à 01:00)
il faut que tu enregistres le chemin vers ton image dans la base de données. Je te conseille de récupérer le nom de ton image à l'upload et de le modifier de façon à ce que chaque nom d'image soit unique. Tu peux pour ça générer une chaine de caractères ne contenant que des minuscules/majuscules/chiffres par exemple.
Pour la table dans ta base de données il te faudrait un ID_image auto incrémenté, un ID_article qui correspond à ton article (clé étrangère) et le chemin vers ton image au minimum.
Ensuite, ça ne concerne pas ta question mais par rapport à ton souhait d'afficher de cette façon :
articles.php?id=iddelarticleIl faut savoir qu'une url de ce genre là sera mal référencée. Il faut mieux une url comme les articles de PrimFX c'est à dire:
article/nom-article-idEn gros tu as besoin d'un routeur php ou d'une bidouille avec un .htaccess
M69-74 Le 7 avril 2016 à 17:34 (Édité le 7 avril 2016 à 17:37)
Je me suis finalement dis, avant de mettre une image, je vais mettre le contenu. Mais le truc c'est qu'avec le code si-dessous, ca m’affiche bien "L'article à bien été posté", mais je n'ai rien dans ma bdd. Que est le problème ?
<?php
if(isset($_POST['post'])){
$title = htmlspecialchars($_POST['title']);
$auteur = htmlspecialchars($_SESSION['pseudo']);
$content = htmlspecialchars($_POST['content']);
if(isset($title) AND !empty($title) AND isset($auteur) AND !empty($auteur) AND isset($content) AND !empty($content)){
$insertart = $bdd->prepare('INSERT INTO billets(titre, contenu, auteur) VALUES(?, ?, ?)');
$insertart->execute(array($title, $content, $auteur));
$error = "L'article à bien été posté !";
} else {
$error = "Veuillez remplir tout les champs !";
}
}
}
?>
<form method="POST" action="">
<input type="text" placeholder="Titre de l'article" name="title"><input type="text" placeholder="Pseudo" value="<?= $_SESSION['pseudo'] ?>" name="name" style="margin-left:15px;" ><br /><br />
<textarea placeholder="Contenu de l'article" name="content" style="width:355px;"></textarea><br /><br />
<input type="submit" value="Poster" name="post">
<div class="error" style="color:red;">
<?php
if(isset($error)){
echo $error;
}
?>
</div>
</form>
Merci par avance ! Clouder Le 7 avril 2016 à 20:05 (Édité le 1 janvier 1970 à 01:00)
Si oui alors mais un 'echo $auteur'; pour savoir si tu récupère bien quelque chose sinon rajoute la connexion à ta base de données 😀
M69-74 Le 7 avril 2016 à 20:25 (Édité le 7 avril 2016 à 20:28)