[RESOLU] Erreurs liées à la gestion de fichiers

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Erreurs liées à la gestion de fichiers

Re: Erreurs liées à la gestion de fichiers

par caema » 08 janv. 2013, 20:04

Mais c'est bien sûr! J'avais COMPLETEMENT oublié l'utilisation des alias!
Tout est fonctionnel.

Quelques améliorations à apporter pour rendre le tout plus agréable et surtout plus complet, notamment au niveau de la limitation en taille et en type pour l'envoi des fichiers, mais c'est nickel.

Un tout grand merci à vous pour votre aide, qui m'a été précieuse.

Re: Erreurs liées à la gestion de fichiers

par xTG » 08 janv. 2013, 19:46

Tu peux utiliser des alias dans une requête :
SELECT articles.id, articles.titre, articles.texte, articles.date, articles.media, rubriques.titre AS rubriqueTitre
FROM articles, rubriques
WHERE articles.rubrique = rubriques.id
Ainsi :
<td><?php echo $tiroir->rubriqueTitre; ?></td>

Re: Erreurs liées à la gestion de fichiers

par caema » 08 janv. 2013, 17:03

Absolument pas! Cette requête était foireuse au possible... lol je l'avais modifiée pourtant, mais apparemment il y a eu un soucis. Je vais donc remplacer par cette requête:
SELECT articles.id, articles.titre, articles.texte, articles.date, articles.media, rubriques.titre
FROM articles, rubriques
WHERE articles.rubrique = rubriques.id


Je l'ai testée dans phpMyAdmin, elle fonctionne et me donne les résultats que je souhaite.

Je l'ai donc inclue dans mon fichier php, pour voir ce que cela donne.
Cela semble fonctionner, sauf pour le titre de la table articles: c'est en effet le titre de la table rubriques qui s'affiche (ça porte à confusion puisque j'ai un champ titre dans la table articles, et un champ titre également dans la table rubriques)

Il me faut sans doute modifier ma boucle, mais je ne sais pas comment. Voici la boucle:
<?php // début de région à répéter
                            while ($tiroir = mysql_fetch_object($resultat)) { ?>
                                <tr>
                                    <td><?php echo $tiroir->titre; ?></td>
                                    <td><?php echo $tiroir->texte; ?></td>
                                    <td><?php echo $tiroir->date; ?></td>
                                    <td><?php echo $tiroir->media; ?></td>
                                    <td><?php echo $tiroir->titre; ?></td>
                                    <td><a href="<?php echo $_SERVER["PHP_SELF"];?>?show=<?php echo $tiroir->id; ?>">Modifier</a> - 
                                        <a href="<?php echo $_SERVER["PHP_SELF"];?>?del=<?php echo $tiroir->id; ?>" onclick="return confirmation();">Supprimer</a>
                                    </td>
                                </tr>
                            <?php } // fin de région à répéter ?>


---> je me répète, mais... merci ;-)

Re: Erreurs liées à la gestion de fichiers

par xTG » 08 janv. 2013, 14:45

On va aller au plus simple.
$sql = "SELECT *
                        FROM articles,rubriques
                        WHERE articles.rubrique = rubriques.id;";
Cette requête, exécutée dans phpmyadmin, te donne-t-elle les résultats attendus ?

Re: Erreurs liées à la gestion de fichiers

par caema » 08 janv. 2013, 12:57

J'ai essayé de suivre vos conseils.
Voici mon bloc PHP contenant fonctions et variables:
<?php

    require_once("connexion.php");
    include("fonctions.php");
    
    // LES VARIABLES:
        $laTable = "articles";
   
    // LES FONCTIONS:
        function montrer($id){
            global $laTable;

            $sql = "SELECT *
                    FROM $laTable
                    WHERE id = $id ;";
            
            $resultat = mysql_query($sql);
            $tiroir = mysql_fetch_object($resultat);
        }
        
        function ajouter(){
            global $laTable;
            $titre = addslashes($_POST["titreArticle"]);
            $texte = addslashes($_POST["texteArticle"]);
            $fichier = $_FILES["mediaArticle"]["name"];
            $date = $_POST["dateRub"];
            $rubrique = addslashes($_POST["rubriqueLiee"]);
            $sql = "INSERT INTO $laTable (titre,texte,date,media,rubrique)
                    VALUES ('$titre','$texte',NOW(),'$fichier','$rubrique');";
            mysql_query($sql);
        }
        
        function supprimer() {
            global $laTable,$tiroir;
            $id = $_GET["del"];
            
            montrer($id);
            $lefichier = $tiroir->media;
            
            if($lefichier !="" && file_exists("uploads/$lefichier")){
                unlink("uploads/$lefichier");  
            }

            $sql = "DELETE FROM $laTable
                    WHERE id = $id;";
            mysql_query($sql);
        } 

        function modifier(){
            global $laTable;
            $titre = addslashes($_POST["titreArticle"]);
            $texte = addslashes($_POST["texteArticle"]);
            $rubrique = addslashes($_POST["rubriqueLiee"]);
            $fichier = $_FILES["mediaArticle"]["name"];
            $id = $_POST["id"];

            if ($_FILES["mediaArticle"]["name"]!="") {
                    $fichier = $_FILES["mediaArticle"]["name"];
                    $sql = "UPDATE $laTable
                            SET titre = '$titre',
                                texte =' $texte',
                                date = NOW(),
                                media = '$media',
                                rubriqueLiee = '$rubrique'
                            WHERE id = $id;";
            }
            
            else {
                $sql = "UPDATE $laTable
                        SET titre = '$titre',
                            texte ='$texte',
                            date =NOW(),
                            rubrique = '$rubrique'
                        WHERE id = $id;";
            }

            mysql_query($sql);
        }

        // TESTS ET ROUTAGE ----------------------------------------------
        
// INSERT si il existe un POST id et qu'il est nul
         if (isset($_POST["id"]) && $_POST["id"]==0) {
             ajouter();
             uploadArticle();
         }
         
// DELETE si il existe un GET del
         if (isset($_GET["del"])) {
            supprimer();
         } 
         
// SHOW  si il existe un GET show
         if (isset($_GET["show"])) {
            $id = $_GET["show"];
            montrer($id);
         }          
// UPDATE si il existe un POST id et qu'il est différent de 0
         if (isset($_POST["id"]) && $_POST["id"]>0) {
             modifier();
             uploadArticle();
          }
// ---------------------------------------------------------------

// Je formule ma requête et je stocke la recherche dans une armoire $resultat
          
                $sql = "SELECT *
	                FROM articles,rubriques
                        WHERE articles.rubrique = rubriques.id;";
                
                $resultat = mysql_query($sql);
                
?>
Au niveau de ma DB, j'ai vérifié avec ce que j'ai pu voir dans phpMyAdmin.
Les données qui apparaissent dans le tableau de ma page HTML ne correspondent pas aux données que je peux voir dans phpMyAdmin. En réalité, les données qui apparaissent dans mon tableau sont celles qui apparaissent dans mon autre table: la tables rubriques

Il y a donc un soucis avec ma boucle while, comme vous me l'aviez signifier.
Le soucis, c'est que le stress, et être sur ce code depuis 3 jours sans trouver de solution me font perdre mes moyens je crois.
Voici ma boucle "réarrangée":
<?php // début de région à répéter
                            while ($tiroirArticle = mysql_fetch_object($resultat)) { ?>
                                <tr>
                                    <td><?php echo $tiroirArticle->titre; ?></td>
                                    <td><?php echo $tiroirArticle->texte; ?></td>
                                    <td><?php echo $tiroirArticle->date; ?></td>
                                    <td><?php echo $tiroirArticle->media; ?></td>
                                    <td><?php echo $tiroirArticle->rubrique; ?></td> <!-- LIGNE A MODIFIER POUR VOIR LE TITRE DE LA RUBRIQUE -->
                                    <td><a href="<?php echo $_SERVER["PHP_SELF"];?>?show=<?php echo $tiroirArticle->id; ?>">Modifier</a> - 
                                        <a href="<?php echo $_SERVER["PHP_SELF"];?>?del=<?php echo $tiroirArticle->id; ?>" onclick="return confirmation();">Supprimer</a>
                                    </td>
                                </tr>
                            <?php } // fin de région à répéter ?>

Petite précision: il s'agit de la 2° boucle, celle que l'on trouve dans le tableau

Re: Erreurs liées à la gestion de fichiers

par xTG » 08 janv. 2013, 12:34

Quand tu veux utiliser une variable il faut qu'elle existe, donc oui il faut que tu ais ta variable $tiroir avant de l'utiliser. ;)
Attention aussi, car il semble que tu utilises le même nom de variable pour deux choses différentes :
while ($tiroir = mysql_fetch_object($resultat))
Vu que tu utilises des fonctions avec variable global c'est un cas à tout envoyer en l'air...

Pour le var_dump il ne sera pas utile vu que ta requête comporte bien ce que tu postes.
Essaies de vérifier les données insérées avec une console mysql ou bien un logiciel tel que phpmyadmin.

Re: Erreurs liées à la gestion de fichiers

par caema » 08 janv. 2013, 12:17

Tout d'abord, merci de porter attention à mon problème. C'est très aimable de votre part, surtout que c'est super important pour moi!

Bon alors, pour ce qui est de la variable $tiroir, je la crée en effet après l'appel de la fonction... C'est une erreur, je dois la créer avant, non?
Par exemple, pour la fonction montrer, je devrais faire qqchose comme ceci:
    // LES VARIABLES:
        $laTable = "articles";
        $tiroir = mysql_fetch_object($resultat);
   
    // LES FONCTIONS:
        
        function montrer($id){
            global $laTable,$tiroir;

            $sql = "SELECT *
                    FROM $laTable
                    WHERE id = $id ;";
            
            $resultat = mysql_query($sql);
            $tiroir = mysql_fetch_object($resultat);
        }
Mais je ne suis pas certaine de pouvoir déclarer la variable de cette façon, étant donné que j'ai un mysql_fetch_object ...
Qu'en pensez vous?

Pour ce qui est du
echo $sql;
, quand je le place après ma fonction ajouter, et que j'ajoute une entrée, j'ai ceci: INSERT INTO articles (titre,texte,date,media,rubrique) VALUES ('mon super titre','
texte de test
',NOW(),'lapin-cretin-de-noel.jpg','4');


J'ai donc bien les bonnes valeurs dans ma requête, cela dit... Cela ne s'affiche pas comme tel dans mon tableau.

Quand au
var_dump($_POST);
, je ne sais pas où je dois le placer. Même endroit que l'echo de ma requête?

Re: Erreurs liées à la gestion de fichiers

par xTG » 08 janv. 2013, 11:02

Quand est-ce que tu créés la variable $tiroir ?
A priori après l'appel de tes fonctions si j'en juge d'après les messages d'erreur. ;)

Pour ton insert tu peux faire un echo $sql; pour vérifier que tu as les valeurs souhaitées ainsi qu'un var_dump($_POST); pour vérifier que tu reçois bien ce que tu as rentré dans ton formulaire.

Erreurs liées à la gestion de fichiers

par caema » 08 janv. 2013, 10:15

Bonjour à toutes et tous, et au passage... bonne année 2013 :D

Je viens à vous aujourd'hui car je suis en train de terminer mon TFE. Tout est fonctionnel, hormis une page de mon site d'administration qui me cause du soucis depuis plusieurs jours maintenant (en plus je suis à la bourre lol).
Cette page doit gérer l'ajout, la modification et la suppression d'articles, et est donc lièe à une table "articles".
D'ailleurs, au sujet de la DB, je voulais vous montrer à quoi elle ressemble mais... pas moyen d'ajouter le fichier image: j'ai le fameux message " This message was flagged as spam and has been denied. "

Mais en gros, pour ce qui nous concerne, j'ai 2 tables:
  • une table rubrique, avec un id, un titre, un texte, une date, et un média.
  • une table articles, avec un id, un titre, un texte, une date, un média, et une liaison vers l'id rubrique (pour dire que tel article est lié à telle rubrique en fait)
Le fonctionnement général de ma page, c'est un formulaire, pour ajouter du contenu et le modifier.
En dessous de ce formulaire, j'ai crée un tableau qui reprend le contenu déjà existant dans la DB.

Si je tente de supprimer une entrée, j'ai l'erreur suivante: rying to get property of non-object in C:\wamp\www\MAILLON\ADMIN\index2.php on line 70

Si j'essaye de modifier une entrée, à côté de chaque champ du formulaire, j'ai aussi une erreur: Trying to get property of non-object in C:\wamp\www\MAILLON\ADMIN\index2.php on line 169 Call Stack #TimeMemoryFunctionLocation 10.0010743088{main}( )..\index2.php:0 "/> [le numéro de la ligne varie pour chaque champ]

Et si je tente d'ajouter une entrée, je n'ai pas d'erreur... Par contre, ce qui s'ajoute ne correspond pas aux valeurs réellement entrées: le titre que j'ai entré (par exemple "titre 5") sera remplacé par le titre de la rubrique (par exemple "accueil").

Je suis assez désemparée, parce que je suis à la bourre lol, et aussi parce que hormis cette page, tout fonctionne.

Voici mon code source:
<?php

    require_once("connexion.php");
    include("fonctions.php");
    
    // LES VARIABLES:
        $laTable = "articles";
   
    // LES FONCTIONS:
        
        function montrer($id){
            global $laTable,$tiroir;

            $sql = "SELECT *
                    FROM $laTable
                    WHERE id = $id ;";
            
            $resultat = mysql_query($sql);
            $tiroir = mysql_fetch_object($resultat);
        }
        
        function modifier(){
            global $laTable;
            $titre = addslashes($_POST["titreArticle"]);
            $texte = addslashes($_POST["texteArticle"]);
            $date = $_POST["dateRub"];
            $rubrique = addslashes($_POST["rubriqueLiee"]);
            $fichier = $_FILES["mediaArticle"]["name"];
            $id = $_POST["id"];

            if ($_FILES["mediaArticle"]["name"]!="") {
                    $fichier = $_FILES["mediaArticle"]["name"];
                    $sql = "UPDATE $laTable
                            SET titre = '$titre',
                                texte =' $texte',
                                date = NOW(),
                                media = '$media',
                                rubriqueLiee = '$rubrique'
                            WHERE id = $id;";
            }
            else {
                $sql = "UPDATE $laTable
                        SET titre = '$titre',
                            texte ='$texte',
                            date =NOW(),
                            rubrique = '$rubrique'
                        WHERE id = $id;";
            }

            mysql_query($sql);
        }
        
        function ajouter(){
            global $laTable;
            $titre = addslashes($_POST["titreArticle"]);
            $texte = addslashes($_POST["texteArticle"]);
            $fichier = $_FILES["mediaArticle"]["name"];
            $rubrique = addslashes($_POST["rubriqueLiee"]);
            $sql = "INSERT INTO $laTable (titre,texte,date,media,rubrique)
                    VALUES ('$titre','$texte',NOW(),'$fichier','$rubrique');";
            mysql_query($sql);
        }
        
        function supprimer() {
            global $laTable,$tiroir;
            $id = $_GET["del"];
            
            montrer($id);
            $lefichier = $tiroir->media;
            
            if($lefichier !="" && file_exists("uploads/$lefichier")){
                unlink("uploads/$lefichier");  
            }

            $sql = "DELETE FROM $laTable
                    WHERE id = $id;";
            mysql_query($sql);
        }
        
        // TESTS ET ROUTAGE ----------------------------------------------
        
// INSERT si il existe un POST id et qu'il est nul
         if (isset($_POST["id"]) && $_POST["id"]==0) {
             ajouter();
             uploadArticle();
         }
         
// DELETE si il existe un GET del
         if (isset($_GET["del"])) {
            supprimer();
         } 
         
// SHOW  si il existe un GET show
         if (isset($_GET["show"])) {
            $id = $_GET["show"];
            montrer($id);
         }          
// UPDATE si il existe un POST id et qu'il est différent de 0
         if (isset($_POST["id"]) && $_POST["id"]>0) {
             modifier();
             uploadArticle();
          }
// ---------------------------------------------------------------

// Je formule ma requête et je stocke la recherche dans une armoire $resultat
          
                $sql = "SELECT *
	                FROM articles,rubriques
                        WHERE articles.rubrique = rubriques.id;";
                
                $resultat = mysql_query($sql);
                
?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>ASBL Le Maillon - Site d'administration.</title>
        <link rel="stylesheet" href="styles.css"/>
        
        <script type="text/javascript" src="tiny_mce/tiny_mce.js"></script>
        <script type="text/javascript">     <!-- POUR LE WYSIWYG tinyMCE --> 
        !--
        tinyMCE.init({
        mode : "textareas",
        theme: "advanced",
        language: "fr",
        theme_advanced_buttons1 : "bold,italic,underline,|,justifyleft,justifycenter,justifyright,|,bullist,numlist",
        theme_advanced_buttons2: "undo,redo,|,link",
        theme_advanced_buttons3: "fontsizeselect,fontselect,formatselect",
        theme_advanced_toolbar_location: "top",
        theme_advanced_statusbar_location: "bottom",
        content_css: "../templates/TinyMCE.css",
        });
        //-->
        </script>
        
        <script>
            function confirmation(){
                message = "Etes vous sur de vouloir supprimer cet article et son contenu ?"
                reponse = confirm(message);
                if (reponse==true){
                    return true;
                }
                else {
                    return false;
                }
            }
        </script>
    </head>
    <body>
        <div id="main">
            <header>
                <?php include("header.php"); ?>
            </header>
            
            <nav>
                <?php include("menu.php"); ?>
            </nav>
            
            <section>
                <article>
                    <h2>Gestion des <?php echo $laTable; ?>:</h2>
                    
                    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>" id="form_articles" enctype="multipart/form-data">
                        <fieldset>
                            <p><label for="titreArticle">Titre:</label><input type="text" name="titreArticle" id="titreArticle" value="<?php if(isset($_GET["show"])) {echo $tiroir->titre;} ?>"/></p>
                            <p><label for="texteArticle">Texte:</label>
                                <TEXTAREA name="texteArticle" id="texteArticle" value="<?php if(isset($_GET["show"])) {echo $tiroir->texte;} ?>"></TEXTAREA>
                            </p>
                            <p><label for="dateArticle">Date:</label><input type="date" name="dateArticle" id="dateArticle" value="<?php if(isset($_GET["show"])) {echo $tiroir->date;} ?>"/></p>
                            <p><label for="mediaArticle">Médias:</label><input type="file" name="mediaArticle" id="mediaArticle" /></p>
                            <p><label for="rubriqueLiee">Rubrique liée:</label>
                                <select name="rubriqueLiee" id="rubriqueLiee">
                                    <?php
                                        $sql = "SELECT *
                                                FROM rubriques;";

                                        $resultat_rubriques = mysql_query($sql);
                                            // début de région à répéter
                                                while ($tiroir_rubrique = mysql_fetch_object($resultat_rubriques)) { ?>
                                                            <option value="<?php echo $tiroir_rubrique->id; ?>" <?php if (isset($_GET["show"]) && $tiroir->rubrique==$tiroir_rubrique->id) {echo "selected='selected'";} ?>>
                                                                <?php echo $tiroir_rubrique->titre; ?>
                                                            </option>
                                                        <?php } // fin de région à répéter 
                                    ?>
                                </select>
                            </p>
                            <input type="hidden" name="id" value="<?php if(isset($_GET["show"])) {echo $tiroir->id;} else {echo "0";} ?>" />
                            <input type="submit" name="submit" value="AJOUTER" class="bouton"/>
                        </fieldset>
                    </form>
                    
                    <table>
                        <caption>Tableau récapitulatif du contenu des articles</caption>
                        <thead> <!-- En-tête du tableau -->
                            <tr>
                                <th>Titre</th>
                                <th>Texte</th>
                                <th>Date de publication</th>
                                <th>Média</th>
                                <th>Rubrique liées</th>
                                <th>Action</th>
                            </tr>
                        </thead> 

                        <tbody> <!-- Corps du tableau -->
                            
                            <?php // début de région à répéter
                            while ($tiroir = mysql_fetch_object($resultat)) { ?>
                                <tr>
                                    <td><?php echo $tiroir->titre; ?></td>
                                    <td><?php echo $tiroir->texte; ?></td>
                                    <td><?php echo $tiroir->date; ?></td>
                                    <td><?php echo $tiroir->media; ?></td>
                                    <td><?php echo $tiroir->rubrique; ?></td> <!-- LIGNE A MODIFIER POUR VOIR LE TITRE DE LA RUBRIQUE -->
                                    <td><a href="<?php echo $_SERVER["PHP_SELF"];?>?show=<?php echo $tiroir->id; ?>">Modifier</a> - 
                                        <a href="<?php echo $_SERVER["PHP_SELF"];?>?del=<?php echo $tiroir->id; ?>" onclick="return confirmation();">Supprimer</a>
                                    </td>
                                </tr>
                            <?php } // fin de région à répéter ?>
                                
                        </tbody>
                    </table>
                </article>
            </section>
            
            <footer>
                <?php include("footer.php"); ?>
            </footer>
        </div>
    </body>
</html>
Voilà, si quelqu'un avait la gentillesse de m'aider, car autant de soucis sur une seule page... Je suis complètement paumée et ne sais par où commencer.

D'avance, un tout grand merci à vous!