Requete correcte mais ne fonctionne pas !

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 139 Messages

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 !

Eléphant du PHP | 139 Messages

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 ...

Mammouth du PHP | 19672 Messages

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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 139 Messages

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 !

Eléphant du PHP | 139 Messages

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 ...

Mammouth du PHP | 19672 Messages

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 :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: