Upload + MySQL

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 : Upload + MySQL

par el_diablo » 06 nov. 2005, 19:17

DSL mais je ne peux pas mettre le tag [RESOLU], donc si un moderateur peut le faire. Merci

par el_diablo » 06 nov. 2005, 19:15

Merci!! c'est bon tout est réglé.

par Truc » 06 nov. 2005, 18:24

il te suffit d'inclure ton traitement de BD dans ce test:
if(!empty($_POST['posted']))
si le formulaire n'est pas validé (pas de clic) le traitement ne se fera pas.

par el_diablo (MithrandiR) » 06 nov. 2005, 16:44

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.

par Truc » 06 nov. 2005, 03:01

je te file un lien (ICI) mais c'est une autre question (il me semble) donc nouveau post

par MithrandiR » 05 nov. 2005, 22:41

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

par MithrandiR » 05 nov. 2005, 21:43

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())"; 

par Truc » 04 nov. 2005, 00:04

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 ?!

par MithrandiR » 03 nov. 2005, 20:58

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

par Truc » 02 nov. 2005, 22:04

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

par MithrandiR » 02 nov. 2005, 21:47

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

par MithrandiR » 02 nov. 2005, 18:44

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>

par MithrandiR » 02 nov. 2005, 18:01

Merci pour tout. :pouce:

par Cyrano » 02 nov. 2005, 13:20

On ne met pas de valeur par défaut à un champ autoincrémenté, supprimer ça, tu devrais régler le problème.

par MithrandiR » 02 nov. 2005, 12:58

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.