CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

PHP : update d'article ne fonctionne pas

Cisla57
Cisla57
Niveau 10
05 mars 2015 à 15:49:57

Bonjour.

J'ai 2 formulaires sur la même page. L'un est activé par défaut s'il n'y a aucun paramètre dans l'URL. C'est mon formulaire pour poster un nouvel article.

Le deuxième est caché par défaut sauf s'il y a des paramètres dans l'URL. Ce formulaire contient dans les "value" des champs le contenu de l'article associé à l'id.
(exemple si je vais sur la page avec dans l'URL "?id=4" et bien j'arrive sur la page du formulaire avec les champs remplis par les données de l'article dont l'id est égal à 4.

Ce deuxième formulaire me sert à modifier un article déjà existant.
Soucis : mon code ne fonctionne absolument pas. Et c'est un mystère.

Le voici :

<?php 
// s'il y a une action et un ID, on affiche uniquement le contenu de l'article désiré directement dans le formulaire
if(isset($_GET['action']) && $_GET['action'] == 'modifier' && isset($_GET['id'])) {
    $getId = intval($_GET['id']);
    $requete = $bdd->prepare("SELECT * FROM articles WHERE id = :id");
    $requete->execute(array(
        ':id' => $getId,
    ));
     
    $data = $requete->fetch();
     
   
// s'il a fait une des modifs, on update l'article dans la base
if(isset($_POST['titre-article-modif']) || isset($_POST['contenu-article-modif']) || isset($_POST['resume-article-modif']) || isset($_FILES['img-une-modif'])) {
    $titre_modif = $_POST['titre-article-modif'];
    $contenu_modif = $_POST['contenu-article-modif'];
    $resume_modif = $_POST['resume-article-modif'];
     
    //on uploade l'image dans le bon dossier et on récupère le nom du fichier et le dossier
    $upload_modif = upload('img-une-modif','../images/',array('jpeg', 'jpg', 'bmp', 'png', 'gif'),10485760, array(500,500));
    $img_url_modif =  "images/".$_FILES['img-une-modif']['name'];
     
 
    $requete = $bdd->prepare("UPDATE articles SET titre = :titre, contenu = :contenu, resume = :resume, up_img = :img_url, date = NOW(), WHERE id = :id");
    $requete->execute(array(
        ':titre' => $titre_modif,
        ':contenu' => $contenu_modif,
        ':resume' => $resume_modif,
        ':img_url' => $img_url_modif,
        ':id' => $getId,
    ));
 
}
?>
 
 
                <!-- on affiche le nouveau formulaire de modification -->
                <form method="post" action="index.php" id="poster-article" enctype="multipart/form-data">
                    <p>Titre de l'article</p>
                    <input type="text" name="titre-article-modif" value="<?php echo $data['titre']; ?>" />
                    <p>Contenu de l'article</p>
                    <textarea name="contenu-article-modif" ><?php echo $data['contenu']; ?></textarea>
                    <p>Résumé de l'article</p>
                    <textarea name="resume-article-modif" id="resume-article" ><?php echo $data['resume']; ?></textarea>
                    <p>Image à la une</p>
                    <input type="file" name="img-une-modif" />
                    <input type="submit" name="Modifier l'article" />
                </form>  
<?php } // fin de la vérif si id existe et si action existe
?>  

Le code est commenté donc je vous laisse regarder.

Ca ne fonctionne pas parce que j'ai 2 formulaires sur la même page?

NPlay
NPlay
Niveau 12
08 mars 2015 à 02:46:36

Salut,

Les paramètres action et id ne sont pas présents dans le formulaire, donc PHP ne peut pas deviner quel article tu essaies de modifier. Essaie de rajouter un <input type="hidden" /> ($_POST) ou de modifier ton <form action="xxx"> ($_GET).

Quelques remarques annexes :

  • Ligne 14 : Tu utilises || comme opérateur, alors qu'il serait plus pertinent d'utiliser &&. Note également que isset($a) && isset($b) est strictement équivalent à isset($a, $b).
  • Ligne 20 : fais attention à ce que la fonction upload() vérifie bien que le fichier soit bien une image, afin de s'assurer que personne ne pourra uploader n'importe quoi (ce serait dramatique). Dans ton extrait de code il est difficile de t'en assurer, puisque la déclaration de la fonction est absente.

Voilà. :)

tzrgus2
tzrgus2
Niveau 12
08 mars 2015 à 20:23:46

$img_url_modif = "images/".$_FILES['img-une-modif']['name'];
Sur cette ligne il faut "images/" . $_FILES, un espace de chaque coté du point pour que la concaténation se fasse bien, sinne pas d'erreur mais rien d'envoyer.
Pour les deux formulaire dans une page sa pose pas de souci, mais la aucune methode get dans ton formulaire n'est envoyer, c'est en POST.
fait tes verifs avec isset et !empty, car si je met juste un espace par exemple il sera isset.

NPlay
NPlay
Niveau 12
08 mars 2015 à 23:37:16

Sur cette ligne il faut "images/" . $_FILES, un espace de chaque coté du point pour que la concaténation se fasse bien, sinne pas d'erreur mais rien d'envoyer.

N'importe quoi. :doute:

fait tes verifs avec isset et !empty, car si je met juste un espace par exemple il sera isset.

Quel rapport ici ?

tzrgus2
tzrgus2
Niveau 12
08 mars 2015 à 23:42:30

ok pense ce que tu veux.
Bonne soirée.

Cisla57
Cisla57
Niveau 10
10 mars 2015 à 21:09:59

En fait mon problème est résolu. J'avais juste un manque de logique dans l'execution du script. J'ai inversé 2 parties et tada ça a marché.

Cela dit je note tes remarques NPlay. Toute remarque de pro est bonne à prendre. :cool:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment