Page 1 sur 2

Upload + MySQL

Posté : 02 nov. 2005, 00:10
par MithrandiR
Salut,
j'ai reussi à trouver le script d'upload pour donner les informations que je voulais. Cependant, je n'arrive qu'à les afficher après un upload. J'aurai aimer les mettre dans une table, pour ensuite les classer selon les valeurs entrées dans la table.
Voici la table:
CREATE TABLE upload (
  id int(11) DEFAULT '0' NOT NULL  auto_increment,
  nom varchar(50) NOT NULL,
  poids varchar(15),
  dateheure datetime,
  PRIMARY KEY (id)
);
et voici la page:
<?php
//----------------------------
//  DEFINITION DES VARIABLES
//----------------------------

$target     = 'upload/';  // Repertoire cible
$extension  = 'jpg';      // Extension du fichier sans le .
$max_size   = 900000;     // Taille max en octets du fichier
$width_max  = 1024;        // Largeur max de l'image en pixels
$height_max = 768;        // Hauteur max de l'image en pixels

//---------------------------------------------
//  DEFINITION DES VARIABLES LIEES AU FICHIER
//---------------------------------------------

$nom_file   = $_FILES['fichier']['name'];
$taille     = $_FILES['fichier']['size'];
$tmp        = $_FILES['fichier']['tmp_name'];

//----------------------
//  SCRIPT D'UPLOAD
//----------------------
?>
<html>
    <head>
        <title>Upload d'une image sur le serveur !</title>
		<link rel="stylesheet" href="CSS.css" type="text/css">   		
    </head>
    <body>
<?php
if(!empty($_POST['posted'])) {
    // On vérifie si le champ est rempli
    if(!empty($_FILES['fichier']['name'])) {
        // On vérifie l'extension du fichier
        if(substr($nom_file, -3) == $extension) {
            // On récupère les dimensions du fichier
            $infos_img = getimagesize($_FILES['fichier']['tmp_name']);

            // On vérifie les dimensions et taille de l'image
            if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
                // Si c'est OK, on teste l'upload
                if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
                    // Si upload OK alors on affiche le message de réussite
                    echo '<b>Image uploadée avec succès !</b>';
                    echo '<hr />';
                    echo '<b>Fichier :</b> ', $_FILES['fichier']['name'], '<br />';
                    echo '<b>Taille :</b> ', $_FILES['fichier']['size'], ' Octets<br />';
                    echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />';
                    echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />';
                    echo '<hr />';
                    echo '<br /><br />';
                } else {
                    // Sinon on affiche une erreur système
                    echo '<b>Problème lors de l\'upload !</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br /><br />';
                }
            } else {
                // Sinon on affiche une erreur pour les dimensions et taille de l'image
                echo '<b>Problème dans les dimensions ou taille de l\'image !</b><br /><br />';
            }
        } else {
            // Sinon on affiche une erreur pour l'extension
            echo '<b>Votre image ne comporte pas l\'extension .jpg !</b><br /><br />';
        }
    } else {
        // Sinon on affiche une erreur pour le champ vide
        echo '<b>Le champ du formulaire est vide !</b><br /><br />';
    }
}
?>
//Début MySQL
<?php

switch($_POST['action'])
{

  // INSERTION DANS LA BASE
  case "inserer":

    // déclaration de quelques variables
    $host = "localhost";
    $user = "********";
    $pass = "********";
    $bdd = "Mithrandir_db";
    $table = "upload";

    // connection avec MySQL
    @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données"); // Le @ indique à php de ne pas afficher de message d'erreur
    @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");

    // affichage sélection
    echo '<p>IMAGE Poids ' . htmlentities($_POST['nom']) . ', Poids: ' . htmlentities($_POST['poids']) . '</p>';

    // stockage dans la bdd
    $nom = $_POST['nom'];
    $poids = $_POST['poids'];
    if(!get_magic_quotes_gpc())
  	{
  	  // si php n'est pas configuré pour le faire automatiquement, on ajoute des \ devant les '
  	  // deux raisons : autoriser d'ajouter des ', et sécuriser notre requete
  	  // on y reviendra dans un prochain tutorial
  	  $nom = addslashes($nom);
  	  $poids = addslashes($poids);
  	}
    $sql = "INSERT INTO " . $table . "(nom, poids, dateheure) VALUES('" . $nom . "','" . $poids . "', NOW())";
    $res = mysql_query($sql);

    // déconnection avec MySQL
    mysql_close();

  break;
// AFFICHAGE FORMULAIRE HTML
  default:
?>
// Fin MySQL		
        <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
        <fieldset>
            <legend><span style="font-size: 10pt;"><font color="#006600" face="Tahoma"><b>Envoyer le fichier :</b></font></span></legend><br />
            <p><input style="border: 1px dashed rgb(210, 228, 168);" type="hidden" name="posted" value="1" />
            <input name="fichier" style="border: 1px dashed rgb(210, 228, 168);" type="file" /></p>
            <p><font face="Tahoma"><span style="font-size: 8pt;">Seules les images au format ".JPG" sont acceptées.</span></font>
            <p><input style="border: 1px dashed rgb(210, 228, 168);" type="submit" value="Uploader" /></p>
        </legend></fieldset>
        </form>
    </body>
</html>

il manque
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
pour le formulaire.... Je ne sais pas comment le mettre dedans :(

Je precise le script d'upload fonctionne impec et le script MySQL aussi normalement parce que c'est celui du tuto du site que j'ai légèrement modifier. Le problème, je crois, vient de l'assemblage des deux.....
Quand j'affiche ma page, j'obtient une erreur dans une ligne inexistante. (une ligne qui serait sous ma derniere balise: </html>)

Quelqu'un pourrait-il m'expliquer le/les problèmes avec ma page??? Pourquoi je n'arrive pas à la lire correctement et comment on peut assembler les deux?? Je suis complètement pommé!!! ](*,)

renseignement

Posté : 02 nov. 2005, 01:17
par alaingpl
Désolé je ne peux pas répondre car je débute mais serait - il possible de me dire où as - tu trouvé ton tutorial. Merci d'avance.

Attention quand même, dans ta page tu donnes toutes les informations confidentielles de connexion à ta base (host, password,...). Donc "piratage" possible.

A +

Posté : 02 nov. 2005, 09:36
par Cyrano
Il y a une accolade non fermée :
<?php
//....
    // AFFICHAGE FORMULAIRE HTML
    default:
?>
// Fin MySQL        
        <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <fieldset>
            <legend><span style="font-size: 10pt;"><font color="#006600" face="Tahoma"><b>Envoyer le fichier :</b></font></span></legend><br />
            <p><input style="border: 1px dashed rgb(210, 228, 168);" type="hidden" name="posted" value="1" />
            <input name="fichier" style="border: 1px dashed rgb(210, 228, 168);" type="file" /></p>
            <p><font face="Tahoma"><span style="font-size: 8pt;">Seules les images au format ".JPG" sont acceptées.</span></font>
            <p><input style="border: 1px dashed rgb(210, 228, 168);" type="submit" value="Uploader" /></p>
        </legend></fieldset>
        </form>
<?php
} // <<== ICI il faut fermer l'accolade du switch.
?>
    </body>
</html>

Posté : 02 nov. 2005, 12:58
par MithrandiR
Pour te repondre alaingpl, je l'ai trouver sur PHPfrance dans les tuto dispo. Voici l'adresse Upload de Fichier.

Merci cyrano, j'ai plus d'erreur. Par contre je n'arrive pas a créer ma table, j'ai toujours cette erreur:
MySQL a répondu: 

#1067 - Valeur par defaut invalide pour 'id' 
Je vous redonne ma table:
CREATE TABLE upload(

id int( 11 ) DEFAULT '0' NOT NULL AUTO_INCREMENT ,
nom varchar( 50 ) NOT NULL ,
poids varchar( 15 ) ,
dateheure datetime,
PRIMARY KEY ( id ) 
)
Je ne pense pas avoir d'erreur dans la table, donc je ne sais pas d'où vient le problème. J'ai déja eu des erreurs avec MySQL qui ne prenait pas en compte auto_increment, maintenant il est pris en compte mais ça ne fonctionne toujours pas.

Posté : 02 nov. 2005, 13:20
par Cyrano
On ne met pas de valeur par défaut à un champ autoincrémenté, supprimer ça, tu devrais régler le problème.

Posté : 02 nov. 2005, 18:01
par MithrandiR
Merci pour tout. :pouce:

Posté : 02 nov. 2005, 18:44
par MithrandiR
En fait j'ai un autre problème.... :(
Lorsque j'upload un fichier, les infos de celui-ci n'entre pas dans la table. Quelqu'un pourrait-il me dire quel est mon problème? SVP

Je vous redonne mon code:
<?php
//----------------------------
//  DEFINITION DES VARIABLES
//----------------------------

$target     = 'upload/';  // Repertoire cible
$extension  = 'jpg';      // Extension du fichier sans le .
$max_size   = 900000;     // Taille max en octets du fichier
$width_max  = 1024;        // Largeur max de l'image en pixels
$height_max = 768;        // Hauteur max de l'image en pixels

//---------------------------------------------
//  DEFINITION DES VARIABLES LIEES AU FICHIER
//---------------------------------------------

$nom_file   = $_FILES['fichier']['name'];
$taille     = $_FILES['fichier']['size'];
$tmp        = $_FILES['fichier']['tmp_name'];

//----------------------
//  SCRIPT D'UPLOAD
//----------------------
?>
<html>
    <head>
        <title>Upload d'une image sur le serveur !</title>
		<link rel="stylesheet" href="CSS.css" type="text/css">   		
    </head>
    <body>
<?php
if(!empty($_POST['posted'])) {
    // On vérifie si le champ est rempli
    if(!empty($_FILES['fichier']['name'])) {
        // On vérifie l'extension du fichier
        if(substr($nom_file, -3) == $extension) {
            // On récupère les dimensions du fichier
            $infos_img = getimagesize($_FILES['fichier']['tmp_name']);

            // On vérifie les dimensions et taille de l'image
            if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
                // Si c'est OK, on teste l'upload
                if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
                    // Si upload OK alors on affiche le message de réussite
                    echo '<b>Image uploadée avec succès !</b>';
                    echo '<hr />';
                    echo '<b>Fichier :</b> ', $_FILES['fichier']['name'], '<br />';
                    echo '<b>Taille :</b> ', $_FILES['fichier']['size'], ' Octets<br />';
                    echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />';
                    echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />';
                    echo '<hr />';
                    echo '<br /><br />';
                } else {
                    // Sinon on affiche une erreur système
                    echo '<b>Problème lors de l\'upload !</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br /><br />';
                }
            } else {
                // Sinon on affiche une erreur pour les dimensions et taille de l'image
                echo '<b>Problème dans les dimensions ou taille de l\'image !</b><br /><br />';
            }
        } else {
            // Sinon on affiche une erreur pour l'extension
            echo '<b>Votre image ne comporte pas l\'extension .jpg !</b><br /><br />';
        }
    } else {
        // Sinon on affiche une erreur pour le champ vide
        echo '<b>Le champ du formulaire est vide !</b><br /><br />';
    }
}
?>
<!-- Début MySQL -->
<?php

switch($_POST['action'])
{

  // INSERTION DANS LA BASE
  case "inserer":

    // déclaration de quelques variables
    $host = "localhost";
    $user = "********";
    $pass = "***********";
    $bdd = "***********";
    $table = "upload";

    // connection avec MySQL
    @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données"); // Le @ indique à php de ne pas afficher de message d'erreur
    @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");

    // affichage sélection
    echo '<p>IMAGE Nom: ' . htmlentities($_POST['nom']) . ', Poids: ' . htmlentities($_POST['poids']) . '</p>';

    // stockage dans la bdd
    $nom = $_POST['nom'];
    $poids = $_POST['poids'];
    if(!get_magic_quotes_gpc())
  	{
  	  // si php n'est pas configuré pour le faire automatiquement, on ajoute des \ devant les '
  	  // deux raisons : autoriser d'ajouter des ', et sécuriser notre requete
  	  // on y reviendra dans un prochain tutorial
  	  $nom = addslashes($nom);
  	  $poids = addslashes($poids);
  	}
    $sql = "INSERT INTO " . $table . "(nom, poids, dateheure) VALUES('" . $nom . "','" . $poids . "', NOW())";
    $res = mysql_query($sql);

    // déconnection avec MySQL
    mysql_close();

  break;
// AFFICHAGE FORMULAIRE HTML
  default:
?>
<!-- Fin MySQL -->		
        [color=violet][b]<form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">[/b][/color] // [color=red]Je crois que le pb est là!![/color]        <fieldset>
            <legend><span style="font-size: 10pt;"><font color="#006600" face="Tahoma"><b>Envoyer le fichier :</b></font></span></legend><br />
            <p><input style="border: 1px dashed rgb(210, 228, 168);" type="hidden" name="posted" value="1" />
            <input name="fichier" style="border: 1px dashed rgb(210, 228, 168);" type="file" /></p>
            <p><font face="Tahoma"><span style="font-size: 8pt;">Seules les images au format ".JPG" sont acceptées.</span></font>
            <p><input style="border: 1px dashed rgb(210, 228, 168);" type="submit" value="inserer" /></p>
        </legend></fieldset>
        </form>
<?php
}	// Fermer le switch
?>
    </body>
</html>

Posté : 02 nov. 2005, 21:47
par MithrandiR
J'ajoute a ma précédente question, celle-ci:
Comment faire pour mettre des chiffres "1 2 3 4 5 6 7..." en valeur dans une requête?
Je m'explique:
je voudrais entrer automatiquement le poids de mes images en chiffres ici:
INSERT INTO upload VALUES(0,'sinsemilia','[color= #006600]ICI[/color]',NOW())
Qqu'un pourrait-il m'expliquer comment? SVP

Posté : 02 nov. 2005, 22:04
par Truc
Pour la 1ere question que donne la requete génrèrée ? => echo $sql;

Les variables POST:
$_POST['action'] , $_POST['nom'] , $_POST['poids'] sotent d'où ??

tu as bien un formulaire qui renvoi sur la meme page mais tu n'a pas de champs avec ces noms !!

Pour mettre des valeurs numériaues dans la base deja ça serai mieux que le champ soit en INT et non VARCHAR
ensuite tu fait:
INSERT INTO upload VALUES('','sinsemilia',565,NOW())
et ne met pas de valeur par défaut pour le champ en auto-incrément !!

Posté : 03 nov. 2005, 20:58
par MithrandiR
Merci beaucoup ça fonctionne impec!! :D :D Les valeurs rentrent comme je le voulais!! :pouce:

Par contre y-a-t-il moyen de mettre la valeur du poids automatiquement?? Parce que j'aimerais réduire au maximum le temps entre la sélection du fichier puis l'upload du visiteurs. Si quelqu'un voit comment c'est faisable, dites le moi.. :)

Posté : 04 nov. 2005, 00:04
par Truc
eh bien tu fait appel a $_POST['poids'] donc je suppose que tu as un champ où l'utilisateur doit entrer le poids de l'image ?!

pourquoi ne pas réutiliser $_FILES['fichier']['size'] qui contein cette valeur et l'insèrer dans la BD ?!

Posté : 05 nov. 2005, 21:43
par MithrandiR
J'ai essayer mais j'y arrive pas!!
Voici le nouveau code:
<html>
    <head>
        <title>Upload d'une image sur le serveur !</title>
		<link rel="stylesheet" href="CSS.css" type="text/css">   		
    </head>
    <body>
<?php
//----------------------------
//  DEFINITION DES VARIABLES
//----------------------------

$target     = 'upload/';  // Repertoire cible
$extension  = 'jpg';      // Extension du fichier sans le .
$max_size   = 900000;     // Taille max en octets du fichier
$width_max  = 1024;        // Largeur max de l'image en pixels
$height_max = 768;        // Hauteur max de l'image en pixels

//---------------------------------------------
//  DEFINITION DES VARIABLES LIEES AU FICHIER
//---------------------------------------------

$nom_file   = $_FILES['fichier']['name'];
$taille     = $_FILES['fichier']['size'];
$tmp        = $_FILES['fichier']['tmp_name'];

//----------------------
//  SCRIPT D'UPLOAD
//----------------------
if(!empty($_POST['posted'])) {
    // On vérifie si le champ est rempli
    if(!empty($_FILES['fichier']['name'])) {
        // On vérifie l'extension du fichier
        if(substr($nom_file, -3) == $extension) {
            // On récupère les dimensions du fichier
            $infos_img = getimagesize($_FILES['fichier']['tmp_name']);

            // On vérifie les dimensions et taille de l'image
            if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size)) {
                // Si c'est OK, on teste l'upload
                if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
                    // Si upload OK alors on affiche le message de réussite
                    echo '<b>Image uploadée avec succès !</b>';
                    echo '<hr />';
                    echo '<b>Fichier :</b> ', $_FILES['fichier']['name'], '<br />';
                    echo '<b>Taille :</b> ', $_FILES['fichier']['size'], ' Octets<br />';
                    echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />';
                    echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />';
                    echo '<hr />';
                    echo '<br /><br />';
                } else {
                    // Sinon on affiche une erreur système
                    echo '<b>Problème lors de l\'upload !</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br /><br />';
                }
            } else {
                // Sinon on affiche une erreur pour les dimensions et taille de l'image
                echo '<b>Problème dans les dimensions ou taille de l\'image !</b><br /><br />';
            }
        } else {
            // Sinon on affiche une erreur pour l'extension
            echo '<b>Votre image ne comporte pas l\'extension .jpg !</b><br /><br />';
        }
    } else {
        // Sinon on affiche une erreur pour le champ vide
        echo '<b>Le champ du formulaire est vide !</b><br /><br />';
    }
}
?>


<?php
//----------------------------
//	  PARTIE MySQL
//----------------------------
//-----------------------------
//    DEFINITION DE VARIABLES
//-----------------------------
	$host = "localhost";
    $user = "MithrandiR";
    $pass = "geantvert";
    $bdd = "Mithrandir_db";
    $table = "upload";
//-----------------------------
//    CONNEXION A LA BASE
//-----------------------------
 @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données"); // Le @ indique à php de ne pas afficher de message d'erreur
//-----------------------------
//    SELECTION DE LA BASE
//-----------------------------
 @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");
//------------------------------
//    EXECUTION DE LA REQUETE
//------------------------------
	//STOCKAGE DANS LA BD
	$nom = $_FILES['fichier']['name'];	
    $poids = $_FILES['fichier']['size'];

    //INSERTION DANS LA BD
	$sql = "INSERT INTO" . $table . "(nom, poids, dateheure) VALUES ('"$nom"', '"$poids"', Now())";
	$res = mysql_query($sql);
//-----------------------------
//    DECONNEXION DE LA BASE
//-----------------------------
 mysql_close();
?>
        <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
        <fieldset>
            <legend><span style="font-size: 10pt;"><font color="#006600" face="Tahoma"><b>Envoyer le fichier :</b></font></span></legend><br />
            <p><input style="border: 1px dashed rgb(210, 228, 168);" type="hidden" name="posted" value="1" />
            <input name="fichier" style="border: 1px dashed rgb(210, 228, 168);" type="file" /></p>
            <p><font face="Tahoma"><span style="font-size: 8pt;">Seules les images au format ".JPG" sont acceptées.</span></font>        	
            <p><input style="border: 1px dashed rgb(210, 228, 168);" type="submit" value="inserer" /></p>
        </legend></fieldset>
        </form>
    </body>
</html>
Lorsque j'affiche ma page, l'erreur suivante apparait:
"Parse error: parse error, unexpected T_VARIABLE in /var/www/users/MithrandiR/upload.php on line 106"

La ligne 106, c'est celle-là:
$sql = "INSERT INTO" . $table . "(nom, poids, dateheure) VALUES ('"$nom"', '"$poids"', Now())"; 

Posté : 05 nov. 2005, 22:41
par MithrandiR
En fait c'est bon, merci Truc pour cette idée!
MAIS j'ai un autre problème! Comment fait-on pour afficher les résultats d'une table?? j'ai essayer sous différentes formes, j'y arrive pas.

Qqu'un pourrait-il m'aider?? SVP

Posté : 06 nov. 2005, 03:01
par Truc
je te file un lien (ICI) mais c'est une autre question (il me semble) donc nouveau post

Posté : 06 nov. 2005, 16:44
par el_diablo (MithrandiR)
Re j'ai changer de pseudo à cause d'un pb d'adresse mail...

Ouais désolé, c'est vrai que je n'aurais pas dû poser cette question ici. :oops:

Cette fois-ci j'en ai une qui est toujours en rapport avec le sujet de départ. J'ai réussi à créer la page d'upload mais lorsque j'actualise ou affiche cette page, elle insère automatiquement des valeurs dans la base.

Je voulais savoir s'il ne manquait pas quelque chose a mon code, pour ne pas que cela arrive.

voici le code post-final d'ajout à la BDD:
<?php
//----------------------------
//	  PARTIE MySQL
//----------------------------
//-----------------------------
//    DEFINITION DE VARIABLES
//-----------------------------
	$host = "localhost";
    $user = "**********";
    $pass = "*********";
    $bdd = "**********_db";
    $table = "upload";
//-----------------------------
//    CONNEXION A LA BASE
//-----------------------------
 @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données"); // Le @ indique à php de ne pas afficher de message d'erreur
//-----------------------------
//    SELECTION DE LA BASE
//-----------------------------
 @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");
//------------------------------
//    EXECUTION DE LA REQUETE
//------------------------------
	//STOCKAGE DANS LA BD
	$nom = $_FILES['fichier']['name'];	
    $poids = $_FILES['fichier']['size'];

    //INSERTION DANS LA BD
	$sql = "INSERT INTO " . $table . "(nom, poids, dateheure) VALUES('" . $nom . "','" . $poids . "', NOW())";
	$res = mysql_query($sql);
//-----------------------------
//    DECONNEXION DE LA BASE
//-----------------------------
 mysql_close();
?>
Je pense qu'il faudrait ajouter une balise interdisant l'utilisation du script en dehors de l'envoi du fichier. Mais comment je ne sais pas.