JeuWeb - Crée ton jeu par navigateur
inpossible d'enregistre une image dans la basse de donner - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : inpossible d'enregistre une image dans la basse de donner (/showthread.php?tid=6174)



inpossible d'enregistre une image dans la basse de donner - zaon - 03-06-2012

salut tous le monde j'ai un petit souci je n'arrive pas a enregistrer le chemin de l'avatar dans ma base de donner, j'ai bien essayer plusieurs truc mais rien ni fait j'ai toujours un message d'erreur. merci d'avance
Code :
<?php  
// Constantes
define('TARGET', '/avatar/'); // Repertoire cible
define('MAX_SIZE', 100000); // Taille max en octets du fichier
define('WIDTH_MAX', 100); // Largeur max de l'image en pixels
define('HEIGHT_MAX', 100); // Hauteur max de l'image en pixels

// Tableaux de donnees
$tabExt = array('jpg','gif','png','jpeg'); // Extensions autorisees
$infosImg = array();

// Variables
$extension = '';
$message = '';
$nomImage = '';

/************************************************************
* Creation du repertoire cible si inexistant
*************************************************************/
if( !is_dir(TARGET) ) {
if( !mkdir(TARGET, 0755) ) {
exit('Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !');
}
}

/************************************************************
* Script d'upload
*************************************************************/
if(!empty($_POST))
{
// On verifie si le champ est rempli
if( !empty($_FILES['fichier']['name']) )
{
// Recuperation de l'extension du fichier
$extension = pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);

// On verifie l'extension du fichier
if(in_array(strtolower($extension),$tabExt))
{
// On recupere les dimensions du fichier
$infosImg = getimagesize($_FILES['fichier']['tmp_name']);

// On verifie le type de l'image
if($infosImg[2] >= 1 && $infosImg[2] <= 14)
{
// On verifie les dimensions et taille de l'image
if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['fichier']['tmp_name']) <= MAX_SIZE))
{
// Parcours du tableau d'erreurs
if(isset($_FILES['fichier']['error'])
&& UPLOAD_ERR_OK === $_FILES['fichier']['error'])
{
// On renomme le fichier
$nomImage = md5(uniqid()) .'.'. $extension;

// Si c'est OK, on teste l'upload
if(move_uploaded_file($_FILES['fichier']['tmp_name'], TARGET.$nomImage))
{
$message = 'Upload réussi !';
}
else
{
// Sinon on affiche une erreur systeme
$message = 'Problème lors de l\'upload !';
}
}
else
{
$message = 'Une erreur interne a empêché l\'uplaod de l\'image';
}
}
else
{
// Sinon erreur sur les dimensions et taille de l'image
$message = 'Erreur dans les dimensions de l\'image !';
}
}
else
{
// Sinon erreur sur le type de l'image
$message = 'Le fichier à uploader n\'est pas une image !';
}
}
else
{
// Sinon on affiche une erreur pour l'extension
$message = 'L\'extension du fichier est incorrecte !';
}
}
else
{
// Sinon on affiche une erreur pour le champ vide
$message = 'Veuillez remplir le formulaire svp !';
}
}?>
voici le code upload l'avatar la aucun souci sa fonctionne

Code :
<?php
//var_dump($_FILES['fichier']);
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($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"] == "form")) {
  $insertSQL = sprintf("INSERT INTO free_admin (pseudo, password, statut, `time`, `last time`, `online`, email, avatar, ip) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['pseudo'], "text"),
                       GetSQLValueString($_POST['password'], "text"),
                       GetSQLValueString($_POST['statut'], "text"),
                       GetSQLValueString($_POST['time'], "int"),
                       GetSQLValueString($_POST['time'], "int"),
                       GetSQLValueString($_POST['online'], "int"),
                       GetSQLValueString($_POST['mail'], "text"),
                       GetSQLValueString($_POST['fichier'], "text"),
                       GetSQLValueString($_POST['ip'], "text"));

  mysql_select_db($database_connection, $connection);
  $Result1 = mysql_query($insertSQL, $connection) or die(mysql_error());
}

mysql_select_db($database_connection, $connection);
$query_Rcx_inscription = "SELECT * FROM free_admin";
$Rcx_inscription = mysql_query($query_Rcx_inscription, $connection) or die(mysql_error());
$row_Rcx_inscription = mysql_fetch_assoc($Rcx_inscription);
$totalRows_Rcx_inscription = mysql_num_rows($Rcx_inscription);

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
  $insertSQL = sprintf("INSERT INTO free_admin (, admin) VALUES (%s, %s, %s, %s, %s)"  );
                      

  mysql_select_db($database_connection, $connection);
  $Result1 = mysql_query($insertSQL, $connection) or die(mysql_error());

  $insertGoTo = "inscription.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>
var_dump($_FILES['fichier']); me permet de voir le array
'name' => string 'ressource.png' (length=13)
'type' => string 'image/png' (length=9)
'tmp_name' => string 'C:\Program Files (x86)\EasyPHP-5.3.9\tmp\php2271.tmp' (length=52)
'error' => int 0
'size' => int 3255

voici la ligne ki pose probleme
GetSQLValueString($_POST['fichier'], "text"),

voici le message d'erreur
Notice: Undefined index: fichier in D:\projet\zadmin1750959\module\connection\inscription.php on line 144
Le champ 'avatar' ne peut �tre vide (null)


RE: inpossible d'enregistre une image dans la basse de donner - Akira777 - 03-06-2012

Quand tu enregistres le nom de ton image dans la base, la variable $_POST['fichier'] ne semble pas exister (rien d'étonnant à priori).

Pourquoi ne pas utiliser $nomImage comme nom de l'image dans ta base, vu que c'est sous ce nom enregistré dans cette variable que tu as sauvegardé ton image ?


RE: inpossible d'enregistre une image dans la basse de donner - Hirokoshi - 03-06-2012

Je rejoins l'avis d'Akira. De plus, tu devrais penser à indenter ton code pour une meilleure lisibilité.


RE: inpossible d'enregistre une image dans la basse de donner - zaon - 03-06-2012

j'ai renomer le champ dans ma base de donner
monImage ainsi que <input name="nomImage" type="file" id="fichier_a_uploader" size="30" />

GetSQLValueString($_POST['nomImage'], "text"));

et voila une autre erreur



Notice: Undefined index: nomImage in D:\projet\zadmin1750959\module\connection\inscription.php on line 144
Le champ 'nomImage' ne peut �tre vide (null)


RE: inpossible d'enregistre une image dans la basse de donner - Akira777 - 03-06-2012

Oulalala, ça sent le code pompé sur un tuto ou une base de script sans vraiment le comprendre...

Tu peux renommer ton input tant que tu veux, ca ne changera rien, quand un champs de type "file" est envoyé via formulaire, c'est pas via $_POST que tu le récupères, mais via $_FILES.
Secondement, ton input là, retourne un tableau $_FILES['nomImage']. Tu te sers de ton premier script pour traiter ce méga-tableau $_FILES, gérer les erreurs puis enregistrer ton image le nom choisi (via $nomImage = md5(uniqid()) .'.'. $extension; dans ton script) depuis le dossier temporaire de PHP.

Donc le nom de ton image n'a rien à voir avec la façon dont tu nommes ton input. Par contre c'est ton script qui l'a généré et l'a mise dans une variable $nomImage, accessible dans le répertoire défini par la constante TARGET.

Quand tu l'inséres dans ta base, tu n'utilises donc pas $_POST['fichier'], mais $nomImage.

Quand tu voudras afficher ton image depuis un retour MySQL tu feras...

<img src="<?php echo TARGET . $row->avatar" alt="" /> (ou $row et le résultat MySQL)

PS : En passant, au vu du titre du sujet, c'est pas vraiment l'image que tu enregistres, mais uniquement son nom (optionnellement son emplacement). Si tu voulais vraiment enregistrer l'image en base, ce serai par exemple (il existe d'autre solution, peut-être plus efficace) en passant par un gros champs texte (avec option BINARY), dans lequel tu stockerais une version base64 de l'image...