Page 1 sur 2

Requete correcte mais ne fonctionne pas !

Posté : 08 sept. 2005, 08:52
par psaikopat
Bonjour a tous,

J'ai un petit souci d'enregistrement dans une base de donnée ! Euh... Plutot avec un UPDATE! C'est en rapport avec l'UPLOAD de fichier... :?
<?php require_once('../Connections/imprime.php'); ?>

<html>

<?
if (isset($result)) {@mysql_free_result($result);}
$nomdoc=" ";
$titredoc=" ";
$descriptifdoc=" ";
$query = "SELECT * FROM imprime.document WHERE Iddoc='$id_nouvel_enregistrement'";
$result = mysql_query($query);
$champ = @mysql_fetch_array($result);
$nomdoc=$champ[1];
$titredoc=$champ[2];
$descriptifdoc=$champ[3];
?>
<?
$id_nouvel_enregistrement = " ";
$id_nouvel_enregistrement= $_GET['id'];
?>

<body background="../Images/PINELUMB.JPG">
<form name="form1" method="post" action="<? echo "../IMPRIME/update_doc.php?id=" . $id_nouvel_enregistrement; ?>" enctype="multipart/form-data">
<table width="200" border="0">
  <tr>
    <td>
      <p><strong>Titre :</strong>
          <input type="text" name="titre" value="<? echo $titredoc; ?>">
      </p>
      <p> <strong>Descriptif :</strong>
          <textarea name="descriptif" rows="3"><? echo $descriptifdoc; ?></textarea>
      </p>
      <p><strong>Document actuel :
            <input name="textfield" type="text" disabled value="<? echo $nomdoc; ?>" size="50" maxlength="50">
      </strong> </p>
      <p><strong>Fichier &agrave; t&eacute;lecharger :
            <input type="file" name="file_name" enctype="multipart/form-data" on>
            <br>
            <input type="hidden" name="MAX_FILE_SIZE" value="100000">
      </strong></p>
    
      </td>
    <td><input name="Envoyer" type="submit" value="METTRE A JOUR" ></td>
  </tr>
</table>
</form>
</html>
Et voici ma page ou j'enregistre dans la base. Bref, celle qui ne fonctionne pas !
<?php require_once('../Connections/imprime.php'); ?>
<?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'];
	
	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'];

	 $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); }
		}
?>
<html>
<body background="../Images/PINELUMB.JPG">
<strong><h2 align="center" style="color:#009900">Votre document a été modifié</h2></strong>
<META HTTP-EQUIV="Refresh" CONTENT="2; URL= ../maj_lien.php">
</body>
</html>
Merci d'avance ! ;)

Posté : 08 sept. 2005, 08:59
par Cyrano
Salut,
fais des concaténation correctes entre SQL et PHP:
$sql = "UPDATE `imprime.document` SET  `Nomdoc`='". $file_name ."', `Titredoc`='". $titre ."', `Descriptifdoc`='". $descriptif ."'";
        $sql.= "WHERE `Iddoc`=". $Id ; 
Fais afficher la requête et teste la dans phpMyAdmin.

Question quand même: pourquoi préfixes-t le nom de table avec le nom de la base ? Ta connexion ne se fait en principe que sur une seule base à la fois, ce préfixe est donc inutile :-k

Posté : 08 sept. 2005, 09:07
par psaikopat
J'avais des probleme de connexion a ma base, mais je viens de tester mais j'en ai plus besoin...

Je viens d'essayer d'afficher ma requete mais il ne veux pas, il ne me les affiche pas !

Bon j'ai peut etre pas fait le bon affichage en faisant des
echo $test;
?

Posté : 08 sept. 2005, 09:09
par Cyrano
Peut-être bien avec
echo($sql);
:?:

Posté : 08 sept. 2005, 09:12
par psaikopat
Aucun résultat ! :shock:
Comment est-ce possible, pourtant avec des echo !?!?

Posté : 08 sept. 2005, 09:22
par Cyrano
Ça voudrait dire qu'on ne rentre ni dans le if ni dans le else. Proposition: commencer par virer les "@" devant les mysql_... pour afficher les erreurs s'il y en a et indenter comme il faut le code de façon à le suivre plus facilement, ça peut t'aider à dévcourir où est le bobo :
<?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'];

    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'];

    $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);
    }
}
?>
<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>
Un détail : où sont initialisées les variables $test et $result2 en début de code ?

Posté : 08 sept. 2005, 09:31
par psaikopat
C'est vrai, il faut que je prenne l'habitude d'indenter mon code.

Pendant que tu me répondais, j'ai enlever les @, mais aucune erreur se produit...
J'ai aussi essayer des fichiers d'une autre extension, et il passe bien par
{ 
        print "Sélectionner un fichier au format texte."; 
    }
J'avoue ne pas comprendre... Pourtant tu avouera que mon code est correcte non ?
Si oui d'ou vient le problème pu*** ?!?

Posté : 08 sept. 2005, 09:41
par Cyrano
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.

Posté : 08 sept. 2005, 09:44
par psaikopat
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 ! ;)

Posté : 08 sept. 2005, 10:24
par psaikopat
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> 

Posté : 08 sept. 2005, 10:32
par Cyrano
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 ;)

Posté : 08 sept. 2005, 10:39
par psaikopat
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... :?: :!: :?:

Posté : 08 sept. 2005, 10:54
par Cyrano
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 ?

Posté : 08 sept. 2005, 10:58
par psaikopat
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 !!

Posté : 08 sept. 2005, 11:11
par psaikopat
:shock: /!\ INCROYABLE /!\ :shock:

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