Uploader un fichier et renseigner la base

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 : Uploader un fichier et renseigner la base

par Truc » 17 mars 2006, 19:09

Un pti [Résolu] peut être... :?:

Probleme résolu

par Chile » 17 mars 2006, 15:28

Merci Ryle :wink:
probleme résolu

par Chile » 15 mars 2006, 01:05

Tu devrais gérer l'upload du fichier avant l'insertion en base (comme ça en cas d'erreur, tu n'as pas d'enregistrement à modifier). Cela te pemet aussi de modifier l'insert en fonction du nom du fichier et du chemin que tu définis (tu utilises alors $chemin et $name_file dans ton insert :)).
ok Ryle,
merci, j'ai appliqué tes corrections et j'ai donc retouché un peu mon code ! alors j'ai refait le code en passant l'upload en tete, comme tu m'as conseillé. Puis j'ai allegé le code au niveau des verifs pour l'instant. Le resultat est que l'image est bien uploadée dans son repertoire image. Dans ma base j'ai les deux premieres données avec l'id, mais pas le non de l'image et son chemin. Je pense que j'ecris mal le code a ce niveau :
GetSQLValueString($_POST['$nomFichier'], "text"),
puis ´j'ai un message d'erreur a la fin qui me dit : Warning: Cannot modify header information - headers already sent by .......exemple/formimag3.php on line 81
la ligne 81 c'est la derniere ligne de code sql :
header(sprintf("Location: %s", $insertGoTo));
voici mon code :
<?php require_once('../Connections/pays.php'); ?>
<?php
//Script Upload
//on vérifies que le champ est bien rempli:
if(!empty($_FILES["photo"]["name"]))
{
	//nom du fichier choisi:
	$nomFichier    = $_FILES["photo"]["name"] ;
	//nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["photo"]["tmp_name"] ;
	//type du fichier choisi:
	$typeFichier   = $_FILES["photo"]["type"] ;
	//poids en octets du fichier choisit:
	$poidsFichier  = $_FILES["photo"]["size"] ;
	//code de l'erreur si jamais il y en a une:
	$codeErreur    = $_FILES["photo"]["error"] ;
	
	//chemin qui mène au dossier qui va contenir les fichiers upload:
	$chemin = "./images/" ;
 
	if(move_uploaded_file($nomTemporaire, $chemin.$nomFichier))
		echo("<br>l'upload a réussi") ;
	else
		echo("<br>l'upload a échoué") ;
}//fin if
else
{
	echo("Vous n'avez pas choisit de fichier!!<br>") ;
	echo("<a href="./choix_fichier.html">Retour</a>") ;
}//fin else
?>

<?php
//Script MySQL
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO bpays (id, pays, site, photo, chemin) VALUES (%s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['id'], "int"),
                       GetSQLValueString($_POST['pays'], "text"),
                       GetSQLValueString($_POST['site'], "text"),
                       GetSQLValueString($_POST['$nomFichier'], "text"),
                       GetSQLValueString($_POST['$chemin'], "text"));

  mysql_select_db($database_pays, $pays);
  $Result1 = mysql_query($insertSQL, $pays) or die(mysql_error());

  $insertGoTo = "formimag3";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
</head>

<body>
<form action="<?php echo $editFormAction; ?>" method="post" enctype="multipart/form-data" name="form1">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Pays:</td>
      <td><input type="text" name="pays" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Site:</td>
      <td><input type="text" name="site" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Photo:</td>
      <td><input name="photo" type="file" id="photo"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Insérer l'enregistrement"></td>
    </tr>
  </table>
  <input type="hidden" name="id" value="">
  <input type="hidden" name="chemin" value="">
  <input type="hidden" name="MM_insert" value="form1">
</form>
<p>&nbsp;</p>
</body>
</html>

par Spols » 15 mars 2006, 00:31

cela t'affiche le contenu du tableau $_FILES['photo']

c'est a dire que

$_FILES['photo']['name'] est égale à "2.gif"
$_FILES['photo']['type'] est égale à "image/gif"
$_FILES['photo']['tmp_name'] est égale à "/tmp/phpHetAnp"//nom temporaire du fichier dans son dossier temporaire
etc.

par Chile » 15 mars 2006, 00:24

Salut Cyrano, et merci
j'ai inseré ton code et j'ai ce message lors de la manip :

Code : Tout sélectionner

array(5) { ["name"]=> string(5) "2.gif" ["type"]=> string(9) "image/gif" ["tmp_name"]=> string(14) "/tmp/phpHETAnp" ["error"]=> int(0) ["size"]=> int(38582) }
ca veut dire quoi ??? :?

par Ryle » 15 mars 2006, 00:18

Bonsoir,

A mon avis y a quelques petits trucs qui ne vont pas :

Dans ton insert :
 
GetSQLValueString($_POST['photo'], "text"), // le nom du fichier ne serait-il pas plutôt dans $_FILES['photo']['name'] ;)
GetSQLValueString($_POST['chemin'], "text"));  // tu n'as pas de champ "chemin" dans ton formulaire... et tu définis $chemin après l'insertion.
Upload du fichier
if( isset($_POST['form1']) ) // form1 est le nom du formulaire, pas d'un champ, ton if sera toujours faux.
Tu devrais gérer l'upload du fichier avant l'insertion en base (comme ça en cas d'erreur, tu n'as pas d'enregistrement à modifier). Cela te pemet aussi de modifier l'insert en fonction du nom du fichier et du chemin que tu définis (tu utilises alors $chemin et $name_file dans ton insert :)).

par Cyrano » 15 mars 2006, 00:09

Dans la partie traitement de ton formulaire, ajoute donc ça pour voir :
<pre>
<?php
var_dump($_FILES['photo']);
?>
</pre>
Ça te permettra de vérifier que tu obtiens bien les informations sur ton fichier.

Uploader un fichier et renseigner la base

par Chile » 14 mars 2006, 23:38

Bonjour,
voila, je me prends la tete depuis qlqs temps pour uploader une image sur mon serveur, et ranger qlqs infos dans une base dont le nom du fichier uploader et son chemin ! j'ai les infos id/pays/site qui rentrent dans la base, mais pas le nom photo ni son chemin, et je n'ai pas la photo dans le repertoire de destination ! et je n'ai pas non plus de message d'erreur. J'ai fait le tour des tutoriaux. Il est plutot simple mon code , mais....je dois etre nul ! si quelqu'un peut me filer un coup de main :(
merci
<?php require_once('../Connections/pays.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

 switch ($theType) {
   case "text":
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
     break;    
   case "long":
   case "int":
     $theValue = ($theValue != "") ? intval($theValue) : "NULL";
     break;
   case "double":
     $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
     break;
   case "date":
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
     break;
   case "defined":
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
     break;
 }
 return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
 $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
 $insertSQL = sprintf("INSERT INTO bpays (id, pays, site, photo, chemin) VALUES (%s, %s, %s, %s, %s)",
                      GetSQLValueString($_POST['id'], "int"),
                      GetSQLValueString($_POST['pays'], "text"),
                      GetSQLValueString($_POST['site'], "text"),
       GetSQLValueString($_POST['photo'], "text"),
       GetSQLValueString($_POST['chemin'], "text"));

    mysql_select_db($database_pays, $pays);
    $Result1 = mysql_query($insertSQL, $pays) or die(mysql_error());
 }
if( isset($_POST['form1']) ) // si formulaire soumis
 {   
   $chemin = 'images/'; // dossier où sera déplacé le fichier

   $tmp_file = $_FILES['photo']['tmp_name']; // nom temporaire du fichier
  
// on vérifie l'extension
$type_file = $_FILES['photo']['type'];
if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
{
exit("Le fichier n'est pas une image");
} 
   
// on copie le fichier dans le dossier de destination
$name_file = $_FILES['photo']['name'];
if(!move_uploaded_file($tmp_file, $chemin.$name_file))
{
exit("Impossible de copier le fichier dans $content_dir");
}     
echo "Le fichier a bien été uploadé";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
</head>

<body>
<form action="<?php echo $editFormAction; ?>" method="post" enctype="multipart/form-data" name="form1">
 <table align="center">
   <tr valign="baseline">
     <td nowrap align="right">Pays:</td>
     <td><input type="text" name="pays" value="" size="32"></td>
   </tr>
   <tr valign="baseline">
     <td nowrap align="right">Site:</td>
     <td><input type="text" name="site" value="" size="32"></td>
   </tr>
   <tr valign="baseline">
     <td nowrap align="right">Photo:</td>
     <td><input type="file" name="photo"></td>
   </tr>
   <tr valign="baseline">
     <td nowrap align="right">&nbsp;</td>
     <td><input type="submit" value="Insérer l'enregistrement"></td>
   </tr>
 </table>
 <input type="hidden" name="id" value="">
 <input type="hidden" name="MM_insert" value="form1">
</form>
<p>&nbsp;</p>
</body>
</html>