Requete correcte mais ne fonctionne pas !

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 : Requete correcte mais ne fonctionne pas !

par Cyrano » 09 sept. 2005, 11:21

:shock: surprenant et j'avoue que je n'aurais pas pensé à ça. Chapeau de l'avoir trouvé, et un [Résolu] de plus :)

par psaikopat » 09 sept. 2005, 10:55

ALIBALIBALIBALIBAAAAA CARAMBAAAAAA !!!!


Je suis désolé de t'apprendre cyrano que mon erreur était vraiment une erreur de merde (désolé pour le voca) mais c'est honteux de ma part de pas avoir fais plus attention ...

Donc voila mon erreur :
$sql = "UPDATE `document` SET  `Nomdoc`='". $file_name ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'"; 
et voila la correction :
$sql = "UPDATE document SET  `Nomdoc`='". $file_name ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'"; 
En tout cas MERCI et DéSOLé de t'avoir fait perdre ton temps ...

par psaikopat » 09 sept. 2005, 08:56

Bonjour cyrano, et les autres...

Alors je viens de lire ton post et OUI J'ai bien mis un attribut enctype dans la balise <form> ! :D

Je vais refaire le code et je viendrai te tenir au courant de l'erreur que j'avais faite !

par Cyrano » 08 sept. 2005, 20:20

La condition de ton premier if() est bizarre, je te l'ai fait remarqué mais tu ne sembles pas avoir remarqué la bizarrerie: tu testes si le poinds du fichier envoyé est bien nul ; Pourquoi ne testes-tu pas tout simplement l'existence du fichier comme sur la ligne qui initialise la variable $filename ?

Ensuite, l'utilisation de mysql_free_result() est complètement inutile:
Il est important de noter que la fonction mysql_query() retourne uniquement une ressource pour les requêtes SELECT, SHOW, EXPLAIN et DESCRIBE.
Enfin, je commence à soupçonner autre chose: dans ton formulaire, as-tu mis un attribut enctype dans la balise <form> ?

Petites modifications suggérées :
<?php
require_once('../Connections/imprime.php');
if (isset($test))
{
    mysql_free_result($test);
}
if (isset($result2))
{
    mysql_free_result($result2);
}
$file_name = isset($_FILES['file_name']['name']) ? $_FILES['file_name']['name'] : "none";
echo $file_name;

echo("<pre>");
var_dump($_FILES);
echo("</pre>");

if ($file_name == "none")
{

    $Id         = $_GET['id'];
    $titre      = $_POST['titre'];
    $descriptif = $_POST['descriptif'];
    echo $Id . "<br>\n" . $titre . "<br>\n" . $descriptif ;

    mysql_select_db($database_imprime, $imprime);
    $sql = "UPDATE `document` SET  `Nomdoc`='". $file_name ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'";
    $sql.= " WHERE `Iddoc`='". $Id ."'";
    $test  = mysql_query($sql);

    echo("Partie if() : ". $sql);
}
// ELSE DU PREMIER TEST
else
{
    //Récupération du chemin pour la copie du fichier et des données pour l'enregistrement dans la base de donnée
    $chemin=" ";
    $query2       = "SELECT Valeur FROM imprime.param WHERE Donnee='chemin'";
    $result2      = mysql_query($query2);
    $resultchemin = mysql_fetch_array($result2);
    $chemin       = $resultchemin[0];
    $Id         = $_GET['id'];
    $titre      = $_POST['titre'];
    $descriptif = $_POST['descriptif'];

    echo $Id . "<br>\n" . $titre . "<br>\n" . $descriptif ;

    $file_terminaison = substr($file_name,strlen($file_name)-3);

    if ($file_terminaison=="txt" or $file_terminaison=="pdf" or $file_terminaison=="doc")
    {
        /* indiquer $dest_file qui correspond au répertoire de destination */
        $dest_file = $chemin . $file_name;
        /* enlève un ""  */
        $source_file=$_FILES['file_name']['tmp_name'];
        /* copie du fichier */
        $res_copy=copy($source_file , $dest_file);
    }
    else
    {
        print "Sélectionner un fichier au format texte.";
    }

    //Enregistrement dans la base
    if (isset ($_POST['Nomdoc']) && isset ($_POST['titre']) && isset ($_POST['descriptif']))
    {

        $nomdoc =  $_FILES['file_name']['name'];
        $sql = "UPDATE `document` SET  `Nomdoc`='". $nomdoc ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'";
        $sql.= " WHERE `Iddoc`='". $Id ."'";
        $test  = mysql_query($sql);

        echo("Partie else() : ". $sql);

        echo("<pre>");
        var_dump($_FILES);
        echo("</pre>");
        /* Ici le mysql_result se justifie mais pour la requête SELECT, pas pour UPDATE */
        mysql_free_result($result2);
    }
}
?>
<html>
<head>
<title></title>
<!--<META HTTP-EQUIV="Refresh" CONTENT="2; URL= ../maj_lien.php"> -->
</head>
<body background="../Images/PINELUMB.JPG">
<h2 align="center" style="color:#009900">Votre document a été modifié</h2>
</body>
</html>

par psaikopat » 08 sept. 2005, 15:25

](*,) ARF c'est horrible !!!

Bon voila ce que j'ai au dernière modification :
<?php 
require_once('../Connections/imprime.php'); 
if (isset($test)) 
{ 
    mysql_free_result($test); 
} 
if (isset($result2)) 
{ 
    mysql_free_result($result2); 
} 
$file_name = isset($_FILES['file_name']['name'])?$_FILES['file_name']['name']:"none"; 
echo $file_name;


if ($_FILES['file_name']['size']==0) 
{ 
    echo("<pre>"); 
	var_dump($_FILES); 
	echo("</pre>"); 
    
	$Id=$_GET['id']; 
    $titre=$_POST['titre']; 
    $descriptif=$_POST['descriptif']; 
	echo $Id . "<br>" . $titre . "<br>" . $descriptif ;
	    
	mysql_select_db($database_imprime, $imprime); 
	$sql = "UPDATE `document` SET  `Nomdoc`='". $file_name ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'"; 
    $sql.= " WHERE `Iddoc`='". $Id ."'"; 
    $test  = mysql_query($sql); 
    @mysql_free_result($test); 
	
	echo("Partie if() : ". $sql); 
} 
// ELSE DU PREMIER TEST 
else 
{ 
    //Récupération du chemin pour la copie du fichier et des données pour l'enregistrement dans la base de donnée 
    $chemin=" "; 
    $query2 = "SELECT Valeur FROM imprime.param WHERE Donnee='chemin'"; 
    $result2 = mysql_query($query2); 
    $resultchemin = mysql_fetch_array($result2); 
    $chemin = $resultchemin[0]; 
    $Id = $_GET['id']; 
    $titre = $_POST['titre']; 
    $descriptif = $_POST['descriptif']; 
	
	echo $Id . "<br>" . $titre . "<br>" . $descriptif ;
	
	$file_terminaison = substr($_FILES['file_name']['name'],strlen($_FILES['file_name']['name'])-3); 

    if ($file_terminaison=="txt" or $file_terminaison=="pdf" or $file_terminaison=="doc") 
    { 
        /* indiquer $dest_file qui correspond au répertoire de destination */ 
        $dest_file = $chemin . $file_name; 
        /* enlève un "\"  */ 
        $source_file=$_FILES['file_name']['tmp_name']; 
        /* copie du fichier */ 

        $res_copy=copy($source_file , $dest_file); 
    } 
    else 
    { 
        print "Sélectionner un fichier au format texte."; 
    } 

    //Enregistrement dans la base 
    if (isset ($_POST['Nomdoc']) && isset ($_POST['titre']) && isset ($_POST['descriptif'])) 
    { 
    
        $nomdoc =  $_FILES['file_name']['name']; 
        $sql = "UPDATE `document` SET  `Nomdoc`='". $nomdoc ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'"; 
    	$sql.= " WHERE `Iddoc`='". $Id ."'";  
        $test  = mysql_query($sql); 
        mysql_free_result($test); 

		echo("Partie else() : ". $sql); 

		echo("<pre>"); 
		var_dump($_FILES); 
		echo("</pre>"); 

    } 
} 
?> 
<html> 
<head> 
<title></title> 
<!--<META HTTP-EQUIV="Refresh" CONTENT="2; URL= ../maj_lien.php"> -->
</head> 
<body background="../Images/PINELUMB.JPG"> 
<h2 align="center" style="color:#009900">Votre document a été modifié</h2> 
</body> 
</html>
J'ai ajouté manuellement dans ma table document un enregistrement, lorsque j'éxécute ma page php, il m'efface bien le document !
Et voici ce que m'affiche les différents echo :
array(1) {
["file_name"]=>
array(5) {
["name"]=>
string(0) ""
["type"]=>
string(0) ""
["tmp_name"]=>
string(0) ""
["error"]=>
int(4)
["size"]=>
int(0)
}
}

30
dlziaugd
igoiudgzo_ughdPartie if() : UPDATE `document` SET `Nomdoc`='', `Titredoc`='dlziaugd', `Descriptifdoc`='igoiudgzo_ughd' WHERE `Iddoc`='30'
Voila si cela peut vous aider ...

Merci beaucoup ...

par psaikopat » 08 sept. 2005, 13:53

Table document :

Iddoc int(4) auto_increment
Nomdoc varchar(100)
Titredoc varchar(100)
Descriptifdoc varchar(200)


Requete tester manuellement pour un UPDATE :
UPDATE document SET `Nomdoc` = "sssssssss.txt", `Titredoc` = "sebsebsebsebseb", `Descriptifdoc` = "Test manuel" WHERE `Iddoc` = "33"
Voila, si cela peut t'aider ...

En tout cas, mon chef ne voit pas pourquoi cela ne fonctionne pas donc tu es mon dernier espoir cyrano !

par Cyrano » 08 sept. 2005, 13:02

Fais voir la structure de la table et un exemple de requête générée copier/coller selon l'affichage obtenu.

par psaikopat » 08 sept. 2005, 11:11

:shock: /!\ INCROYABLE /!\ :shock:

Mes requetes sont justes ! Mon code est juste mais il les UPDATE pas ! :shock: ! Je comprend vraiment plus rien !

par psaikopat » 08 sept. 2005, 10:58

Tout a fait ! :D
Je teste ma requete dans PhpMyAdmin pour voir si elle est correcte c'est bien ça ?
Je teste donc toute mes requetes ...

Let's go !!

par Cyrano » 08 sept. 2005, 10:54

Pour l'instant, on cherche pas les erreurs d'exécution de requête, on veut savoir si la requête générée est correcte à l'affichage pour éventuellement pouvoir la tester directement dans phpMyAdmin.

Si ça fonctionne, alors le problème est après, sinon, il est avant : saisis-tu le raisonnement suivi pour identifier le bug ?

par psaikopat » 08 sept. 2005, 10:39

Oui je sais mais j'en ai mis un autre après la requete...

Bon voici le dernier code que j'ai tester :
<?php 
require_once('../Connections/imprime.php'); 
if (isset($test)) 
{ 
    mysql_free_result($test); 
} 
if (isset($result2)) 
{ 
    mysql_free_result($result2); 
} 
$file_name = isset($_FILES['file_name']['name'])?$_FILES['file_name']['name']:"none"; 
if ($_FILES['file_name']['size']==0) 
{ 
    echo("<pre>"); 
	var_dump($_FILES); 
	echo("</pre>"); 
    
	$Id=$_GET['id']; 
    $titre=$_POST['titre']; 
    $descriptif=$_POST['descriptif']; 
	    
	mysql_select_db($database_imprime, $imprime); 
    $sql = "UPDATE `imprime.document` SET  `Nomdoc`='". $file_name ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'"; 
    $sql.= " WHERE `Iddoc`=". $Id ; 
    $test  = mysql_query($sql); 
    mysql_free_result($test); 
	
	echo("Partie if() : ". $sql); 
} 
// ELSE DU PREMIER TEST 
else 
{ 
    //Récupération du chemin pour la copie du fichier et des données pour l'enregistrement dans la base de donnée 
    $chemin=" "; 
    $query2 = "SELECT Valeur FROM imprime.param WHERE Donnee='". $chemin ."'"; 
    $result2 = mysql_query($query2); 
    $resultchemin = mysql_fetch_array($result2); 
    $chemin = $resultchemin[0]; 
    $Id = $_GET['id']; 
    $titre = $_POST['titre']; 
    $descriptif = $_POST['descriptif']; 
    $file_terminaison = substr($_FILES['file_name']['name'],strlen($_FILES['file_name']['name'])-3); 

    if ($file_terminaison=="txt" or $file_terminaison=="pdf" or $file_terminaison=="doc") 
    { 
        /* indiquer $dest_file qui correspond au répertoire de destination */ 
        $dest_file = $chemin . $file_name; 
        /* enlève un "\"  */ 
        $source_file=$_FILES['file_name']['tmp_name']; 
        /* copie du fichier */ 

        $res_copy=copy($source_file , $dest_file); 
    } 
    else 
    { 
        print "Sélectionner un fichier au format texte."; 
    } 

    //Enregistrement dans la base 
    if (isset ($_POST['Nomdoc']) && isset ($_POST['Titredoc']) && isset ($_POST['Descriptifdoc'])) 
    { 
        $titre = $_POST['Titredoc']; $descriptif = $_POST['Descriptifdoc']; 

        $nomdoc =  $_FILES['file_name']['name']; 
        $sql = "UPDATE `imprime.document` SET  `Nomdoc`='". $nomdoc ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'" ; 
        $sql.= " WHERE `Iddoc`=". $Id ; 
        $test  = mysql_query($sql); 
        mysql_free_result($test); 

		echo("Partie else() : ". $sql); 

		echo("<pre>"); 
		var_dump($_FILES); 
		echo("</pre>"); 

    } 
} 
?> 
<html> 
<head> 
<title></title> 
<!--<META HTTP-EQUIV="Refresh" CONTENT="2; URL= ../maj_lien.php"> -->
</head> 
<body background="../Images/PINELUMB.JPG"> 
<h2 align="center" style="color:#009900">Votre document a été modifié</h2> 
</body> 
</html> 
Mais aucune erreur... :?: :!: :?:

par Cyrano » 08 sept. 2005, 10:32

Gros malin va : tu mets le echo AVANT de définir la variable $sql, c'était sûr et certains que ça ne pouvait que louper ;)
Décale donc le echo APRÈS la définition de la requête ;)

par psaikopat » 08 sept. 2005, 10:24

Voila simplement ce que j'ai fait, J'ai juste rajouter des echo...
Il m'a pété un message d'erreur de ce style :
Notice: Undefined variable: sql in c:\program files\easyphp1-8\www\intranet\imprime\update_doc.php on line 39
Partie else() :
Faite pas attention a la ligne car c'est pas la bonne ligne mais c'est dans mon premier echo du Else !

Voila donc j'ai pas réussi a encercler l'ennemi !! J'ai aussi essayer d'afficher $_FILES mais pareil, il ne m'affiche rien et ne me pète pas d'erreur !!

I DON'T UNDERSTAND !!!
<?php 
require_once('../Connections/imprime.php'); 
if (isset($test)) 
{ 
    mysql_free_result($test); 
} 
if (isset($result2)) 
{ 
    mysql_free_result($result2); 
} 
$file_name = isset($_FILES['file_name']['name'])?$_FILES['file_name']['name']:"none"; 
if ($_FILES['file_name']['size']==0) 
{ 
    $Id=$_GET['id']; 
    $titre=$_POST['titre']; 
    $descriptif=$_POST['descriptif']; 


echo("Partie if() : ". $sql); 


    mysql_select_db($database_imprime, $imprime); 
    $sql = "UPDATE `imprime.document` SET  `Nomdoc`='". $file_name ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'"; 
    $sql.= " WHERE `Iddoc`=". $Id ; 
    $test  = mysql_query($sql); 
    mysql_free_result($test); 
} 
// ELSE DU PREMIER TEST 
else 
{ 
    //Récupération du chemin pour la copie du fichier et des données pour l'enregistrement dans la base de donnée 
    $chemin=" "; 
    $query2 = "SELECT Valeur FROM imprime.param WHERE Donnee='". $chemin ."'"; 
    $result2 = mysql_query($query2); 
    $resultchemin = mysql_fetch_array($result2); 
    $chemin = $resultchemin[0]; 
    $Id = $_GET['id']; 
    $titre = $_POST['titre']; 
    $descriptif = $_POST['descriptif']; 


echo("Partie else() : ". $sql);


    $file_terminaison = substr($_FILES['file_name']['name'],strlen($_FILES['file_name']['name'])-3); 

    if ($file_terminaison=="txt" or $file_terminaison=="pdf" or $file_terminaison=="doc") 
    { 
        /* indiquer $dest_file qui correspond au répertoire de destination */ 
        $dest_file = $chemin . $file_name; 
        /* enlève un "\"  */ 
        $source_file=$_FILES['file_name']['tmp_name']; 
        /* copie du fichier */ 

        $res_copy=copy($source_file , $dest_file); 
    } 
    else 
    { 
        print "Sélectionner un fichier au format texte."; 
    } 

    //Enregistrement dans la base 
    if (isset ($_POST['Nomdoc']) && isset ($_POST['Titredoc']) && isset ($_POST['Descriptifdoc'])) 
    { 
        $titre = $_POST['Titredoc']; $descriptif = $_POST['Descriptifdoc']; 

        $nomdoc =  $_FILES['file_name']['name']; 
        $sql = "UPDATE `imprime.document` SET  `Nomdoc`='". $nomdoc ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'" ; 
        $sql.= " WHERE `Iddoc`=". $Id ; 
        $test  = mysql_query($sql); 
        mysql_free_result($test); 


		echo("Partie else() : ". $sql); 


    } 
} 
?> 
<html> 
<head> 
<title></title> 
<!--<META HTTP-EQUIV="Refresh" CONTENT="2; URL= ../maj_lien.php"> -->
</head> 
<body background="../Images/PINELUMB.JPG"> 
<h2 align="center" style="color:#009900">Votre document a été modifié</h2> 
</body> 
</html> 

par psaikopat » 08 sept. 2005, 09:44

ok merci cyrano, je pose des balises de débugage, et si seulement j'en reviens vivant, je te dirai ou j'ai pu encercler l'ennemi ! ;)

par Cyrano » 08 sept. 2005, 09:41

Il faut arriver à cerner le problème en posant des balises de test de débuggage. Par exemple, tu initialises une variable $file_name, mais dans la ligne suivante, tu ne l'utilises pas, mais dans le if, tu vérifie la taille du fichier sans vérifier si le fichier existe bien comme tu as fait sur la ligne précédente. As-tu mis un echo($sql) après les deux requête, une fois dans le if et une fois dans le else ? Sinon, fais-le en ajoutnt un détail te permettant de savoir d'où sort le message, par exemple:
- Dans le if
echo("Partie if() : ". $sql);
- Dans le else
echo("Partie else() : ". $sql);
Ça doit forcément en afficher une des deux, mais il faut établir laquelle et si ce n'est pas celle que tu attends,, alors il faut vérifier pourquoi la condition n'est pas remplie. Tu pourrais aussi afficher la variable $_FILES avec :
echo("<pre>);
var_dump($_FILES);
echo("</pre>);
De façon à voir ce qui est envoyé au juste.