L'upload de fichier en php

Bonjour,
J'aimerais créer une base de donnée pays qui comportera une table t_pays
dans cette table j'ai 4 champs id_pays, nom_pays, capital_pays, image
Je dois maintenant manipuler des enregistrements, c'est à dire ajouter / modifier / supprimer des éléments tout fonctionne bien !
Là où je galère c'est au niveau de l'ajout de l'image, elle ne s'affiche pas et elle n'est pas envoyé dans mon dossier images (sur wamp)

voici mon code...
 

Pièces jointes

  • t_pays.jpg
    t_pays.jpg
    52.9 KB · Affichages: 14
  • image.jpg
    image.jpg
    12.3 KB · Affichages: 15
PHP:
<?php
$Temoin = 0;
$pdo = new pdo('mysql:host=localhost;dbname=pays','root',
                "");
header("Content-Type: text/html; charset=utf-8");             
include ("resize.php");
$choix = "";
if(isset ($_POST['GoToAjouter']))
    {
    $choix="GoToAjouter";
    }
if(isset ($_POST['Ajouter']))
    {
    $choix="Ajouter";
    }
if(isset ($_POST['Supprimer']))
    {
    $Temoin=1;
    }
if(isset ($_POST['Modifier']))
    {
    $choix="Modifier";
    }
if(isset ($_POST['GoToModifier']))
    {
    $choix="GoToModifier";
    }
                 
switch ($choix)
{


default:
    if ($Temoin){
            if(isset ($_POST['Check'])){   
            $check=$_POST['Check'];
            $sql="DELETE FROM `pays`.`t_pays` WHERE `t_pays`.`id_pays` = ".$check[0].";";
            $pdo->exec($sql);
            }
            }
        $sql="select*from t_pays";
        $stmt=$pdo->query($sql);
        $arr=$stmt->fetchall();
        echo "<div align='center' style='background-color:#9AA0E3; border:1px solid #756020; border-width:4 ; margin: 200 500; padding: 25'>
            <form name='Form' action='index.php' method='POST'>
            <table style='background-color:white ; padding: 5;' border=1>";
        for ($I = 0 ; $I<count($arr); $I++){
        echo "<tr>"   ;
        $enr=$arr[$I];
        // ici on ajoute à chaque fois un champ pour notre tableau
        echo "<td>".$enr[0]."</td>
             <td>".$enr[1]."</td>
              <td>".$enr[2]."</td>
              <td><img src ='".$enr[3]."'/img></td>
             <td><input type='checkbox' name='Check[]' value='".$enr[0]."'/></td>";
            }
        echo "</table> </br>
            <input type='submit' name='Supprimer' value='Supprimer'/>
            <input type='submit' name='GoToAjouter' value='Ajouter' />
            <input type='submit' name='GoToModifier' value='Modifier' />
            </form></div></body>";
       break;
 
PHP:
      case "GoToAjouter":
     
       echo "<div align='center' style='background-color:#9AA0E3; border:1px solid #756020; border-width:4 ; margin: 200 500; padding: 25'>";
       echo '<form name="Form" action="index.php" method="POST">
              <tab><tr><td>
            Nom Pays <input type="text" name="nom_pays" value=""/></br>
            Capital <input type="text" name="capital_pays" value=""/></br>
        <input type="file" name="image"/></td></tr></tab>
          <input type="submit" name="Ajouter" value="Ajouter dans database"/>
          <input type="submit" name="Lister" Value="Lister les enregistrements"/>
          </form></div>';
       break;

       
       // pour ajouter des enrengistrements
         
      case "Ajouter":
      $nom_pays=$_POST['nom_pays'];
      $capital_pays=$_POST['capital_pays'];
       
      if (is_uploaded_file($_FILES['Image']['tmp_name']))
            {$tmp_name = $_FILES['Image']['tmp_name'];
            $newimage = $_FILES['Image']['name'];
            move_uploaded_file($tmp_name,"images/".$newimage);
            resize($newimage);
            }
      $sql="INSERT INTO `pays`.`t_pays` (`id_pays`, `nom_pays`, `capital_pays`, `image`) VALUES (NULL, '".$nom_pays."', '".$capital_pays."', '".$newimage."');";
     
      echo $sql;
      $pdo->exec($sql);
      header("location:index.php");
      break;
 
et pour le fichier resize.php

PHP:
<?php
    function resize($fichier)
    {
    $dir="images/";
    $fichierSource = $dir.$fichier;
    $source = ImageCreateFromJpeg($fichierSource);
    $largeurSource = imagesx($source);
    $hauteurSource = imagesy($source);
    $ratiol=100/$largeurSource;
    $largeurDestination=100;
    $hauteurDestination=$hauteurSource*$ratiol;
    $im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination) 
            or die ("Erreur lors de la création de l'image"); 
    ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);
    $miniature = $dir.$fichier;
    ImageJpeg ($im, $miniature);   
    }
?>

Si quelqu'un a une idée ? Je suis preneur...:rolleyes:
 
Salam,

J'y suis arrivé ! J'y ai un peu bossé hier soir j'ai réussi à ajouter une image dans un enregistrement et la supprimer....
Par contre j'aimerais bien savoir comment on modifie une image ?!!

PHP:
<?php
$Temoin = 0;
$pdo = new pdo('mysql:host=localhost;dbname=pays','root',
                "");
header("Content-Type: text/html; charset=utf-8");             
include ("resize.php");
$choix = "";
if(isset ($_POST['GoToAjouter']))
    {
    $choix="GoToAjouter";
    }
if(isset ($_POST['Ajouter']))
    {
    $choix="Ajouter";
    }
if(isset ($_POST['Supprimer']))
    {
    $Temoin=1;
    }
if(isset ($_POST['Modifier']))
    {
    $choix="Modifier";
    }
if(isset ($_POST['GoToModifier']))
    {
    $choix="GoToModifier";
    }
switch ($choix)
{
default:
    if ($Temoin){
            if(isset ($_POST['Check'])){   
            $check=$_POST['Check'];
            $sql="DELETE FROM `pays`.`t_pays` WHERE `t_pays`.`id_pays` = ".$check[0].";";
            $pdo->exec($sql);
            }
            }
        $sql="select*from t_pays";
        $stmt=$pdo->query($sql);
        $arr=$stmt->fetchall();
        echo "<div align='center' style='background-color:#9AA0E3; border:1px solid #756020; border-width:4 ; margin: 200 500; padding: 25'>
           
            <form name='ff' enctype='multipart/form-data' action='index.php' method='POST'>
            <table style='background-color:white ; padding: 5;' border=1>";
        for ($I = 0 ; $I<count($arr); $I++){
        echo "<tr>"   ;
        $enr=$arr[$I];
        // ici on ajoute à chaque fois un champ pour notre tableau
        echo "<td>".$enr[0]."</td>
             <td>".$enr[1]."</td>
              <td>".$enr[2]."</td>
              <td><img src ='".$enr[3]."'/img></td>
             <td><input type='checkbox' name='Check[]' value='".$enr[0]."'/></td>";
            }
        echo "</table> </br>
            <input type='submit' name='Supprimer' value='Supprimer'/>
            <input type='submit' name='GoToAjouter' value='Ajouter' />
            <input type='submit' name='GoToModifier' value='Modifier' />
            </form></div></body>";
       break;
 

Pièces jointes

  • 1.jpg
    1.jpg
    26.8 KB · Affichages: 8
PHP:
case "GoToAjouter":
       echo "<div align='center' style='background-color:#9AA0E3; border:1px solid #756020; border-width:4 ; margin: 200 500; padding: 25'>";
   
        echo    '<form name="ff" enctype="multipart/form-data" action="index.php" method="POST">
              <tab><tr><td>
            Nom Pays <input type="text" name="nom_pays" value=""/></br>
            Capital <input type="text" name="capital_pays" value=""/></br>
        <input type="file" name="couv"/></td></tr></tab>
          <input type="submit" name="Ajouter" value="Ajouter dans database"/>
          <input type="submit" name="Lister" Value="Lister les enregistrements"/>
          </form></div>';
       break;
       // pour ajouter des enrengistrements
      case "Ajouter":
      $nom_pays=$_POST['nom_pays'];
      $capital_pays=$_POST['capital_pays'];
     
      if (is_uploaded_file ($_FILES['couv']['tmp_name']))
            {
                $tmp_nom= $_FILES["couv"]["tmp_name"];
                $name= $_FILES["couv"]["name"];
                move_uploaded_file($tmp_nom,"images/".$name);
                //resize($couv)
            }
            $couv="images/".$_FILES['couv']['name'];
      $sql="INSERT INTO `pays`.`t_pays` (`id_pays`, `nom_pays`, `capital_pays`, `couv`) VALUES (NULL, '".$nom_pays."', '".$capital_pays."', '".$couv."');";
      echo $sql;
      $pdo->exec($sql);
      header("location:index.php");
      break;
 
Dans le resize il faut mettre ceci
PHP:
<?php
    function resize($image)
    {
   $dir="images/";
        //$dir="./images/";
        //$image="tree.jpg";

            $source = ImageCreateFromJpeg($couv);
            $largeurSource = imagesx($source);
            $hauteurSource = imagesy($source);
            $ratiol=100/$largeurSource;
            $largeurDestination=100;
            $hauteurDestination=$hauteurSource*$ratiol;
            $im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination);
            ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);
            $miniature = $couv;
            ImageJpeg ($im, $miniature);
            }
   

?>
 
Bonjour,
J'aimerais créer une base de donnée pays qui comportera une table t_pays
dans cette table j'ai 4 champs id_pays, nom_pays, capital_pays, image
Je dois maintenant manipuler des enregistrements, c'est à dire ajouter / modifier / supprimer des éléments tout fonctionne bien !
Là où je galère c'est au niveau de l'ajout de l'image, elle ne s'affiche pas et elle n'est pas envoyé dans mon dossier images (sur wamp)

voici mon code...
A moins de t'exercer à l'upload d'images en php , je n'en vois pas l'intérêt dans ton exercice
Un simple dossier avec tes images numerotés ou nommées selon le pays ,ton champs image de ta table comprendrait alors simplement le nom de l'image
Ce n'est pas l'image que tu rajoute ou supprime mais son champs
Il me semble si je ne dis pas de bêtises!?
 
A moins de t'exercer à l'upload d'images en php , je n'en vois pas l'intérêt dans ton exercice

Salam Blondin,
C'est un super bon exercice ! Surtout si tu veux faire un e-Commerce et avoir un pannel administrateur... Tu devras plus perdre ton temps à te rediriger vers PHPMYADMIN pour encoder tes enregistrements...
Après pour le panier tu fais ça en POO....(si tu veux faire un e-Commerce)

Un simple dossier avec tes images numerotés ou nommées selon le pays ,ton champs image de ta table comprendrait alors simplement le nom de l'image
Ce n'est pas l'image que tu rajoute ou supprime mais son champs
Il me semble si je ne dis pas de bêtises!?

Non, tu supprimes l'enregistrement... Le champ justement faut pas toucher...

J'ai réussi à créer un algorithme pour la partie modification j'arrivais pas à modifier l'image maintenant c'est ok voici
PHP:
case "GoToModifier":
      if(isset ($_POST['Check'])){
      $check=$_POST['Check'];
      $sql="select * from t_pays WHERE `t_pays`.`id_pays` = ".$check[0].";";
      $smtp=$pdo->query($sql);
      $arr=$smtp->fetch();
      echo "<div align='center' style='background-color:#207555; border:1px solid #756020; border-width:4 ; margin: 200 500; padding: 25'    >";
      echo'<form name="ff" enctype="multipart/form-data" action="index.php" method="POST">
                <input type="text" name="id_pays" value="'.$arr[0].'"/>
                <input type="text" name="nom_pays" value="'.$arr[1].'"/>
                <input type="text" name="capital_pays" value="'.$arr[2].'"/>
                <img src ="'.$arr[3].'"/img>
                <input type="file" name="couv"/></td></tr> 
                <input type="submit" name="Modifier" value="Modifier"/>
                <input type="submit" name="" value="Annuler"/>
                </form></div>';
                 }
       break;

     
       // pour faire la modification
 
      case "Modifier":
      $nom_pays=$_POST['nom_pays'];
      $capital_pays=$_POST['capital_pays'];
      $id_pays=$_POST['id_pays'];
      // $nom="nom";
        if (is_uploaded_file ($_FILES['couv']['tmp_name']))
            {
                $tmp_nom= $_FILES["couv"]["tmp_name"];
                $name= $_FILES["couv"]["name"];
                move_uploaded_file($tmp_nom,"images/".$name);
                //resize($couv)
            }
            $couv="images/".$_FILES['couv']['name'];
   
     
                //resize($couv)
         
   
      $sql ="UPDATE `pays`.`t_pays` SET `nom_pays` = '".$nom_pays."', `capital_pays` = '".$capital_pays."', `couv` = '".$couv."' WHERE `t_pays`.`id_pays` = ".$id_pays;
      $pdo->exec($sql);
       
            $sql="UPDATE `pays`.`t_pays` SET `nom_pays` = '".$nom_pays."', `capital_pays` = '".$capital_pays."', `couv` = '".$couv."' WHERE `t_pays`.`id_pays` = ".$id_pays;
 
      header ("location:index.php");
      break;
 

Pièces jointes

  • 1.jpg
    1.jpg
    25.9 KB · Affichages: 9
Non, tu supprimes l'enregistrement... Le champ justement faut pas toucher...
Tu fais comme tu veux mais apparemment tu aimes te compliquer la vie...quand je parle de champs c'est du contenu bien-sûr
Mais je te le dis de la manière dont tu présentes l'exercice l'upload est inutile !
Surtout si tu veux faire un e-Commerce et avoir un pannel administrateur... Tu devras plus perdre ton temps à te rediriger vers PHPMYADMIN pour encoder tes enregistrements...
Après pour le panier tu fais ça en POO....(si tu veux faire un e-Commerce)
Comme je te le propose tu n'as pas besoin d'encoder non plus en phpmyadmin!!!
 
Dernière édition:
Tu fais comme tu veux mais apparemment tu aimes te compliquer la vie...quand je parle de champs c'est du contenu bien-sûr

Sincèrement c'est en me cassant la tête et en passant des heures sur des exercices comme ça que tu apprends à programmer.
Ce que tu proposes n'est pas idiot (pour un amateur) en HTML, mais moi c'est la programmation qui m'intéresse je préfère créer moi même mon pannel administrateur. Tu uploads ton fichier (image) il l'envoie dans ton serveur (phpmyadmin) et il l'envoie aussi sur ton dossier images....

Mais je te le dis de la manière dont tu présentes l'exercice l'upload est inutile !

Mais non... J'y suis comme même passé 4 heures... :D
 
Sincèrement c'est en me cassant la tête et en passant des heures sur des exercices comme ça que tu apprends à programmer.
Ce que tu proposes n'est pas idiot (pour un amateur) en HTML, mais moi c'est la programmation qui m'intéresse je préfère créer moi même mon pannel administrateur. Tu uploads ton fichier (image) il l'envoie dans ton serveur (phpmyadmin) et il l'envoie aussi sur ton dossier images....



Mais non... J'y suis comme même passé 4 heures... :D
Ton exercice de départ est tarabiscoté et incohérent , si au moins tu avais un enregistrement de clients avec leur nom prenom et leur photo ou un avatar à uploader par exemple je comprendrais l'utilité
Dans ton exercices j'aurais utilisé un dossier d'images sur wamp c'est moins lourd...
il y a des sites qui te permettent de télécharger un folder complet d'images de tout les pays
 
Ton exercice de départ est tarabiscoté et incohérent , si au moins tu avais un enregistrement de clients avec leur nom prenom et leur photo ou un avatar à uploader par exemple je comprendrais l'utilité

Qu'est-ce que ça change ? Il suffit de changer le champ nom_pays par nom_client, capital_pays par prenom_client....
Sa te prendra même pas 30 secondes...

Dans ton exercices j'aurais utilisé un dossier d'images sur wamp c'est moins lourd...
il y a des sites qui te permettent de télécharger un folder complet d'images de tout les pays

Je sais mais le HTML, c'est pour les gens qui débutent en informatique, moi ça m'intéresse pas...
Le but de l'exercice que j'ai inventé te permet à la fin de créer toi même ton propre panel administrateur c'est vachement plus intéressant que d'aller toujours sur PHPMYADMIN faire des requêtes en SQL pour ajouter des enregistrements.....
 

farid_h

<defunct>
Contributeur
@tadawit, cherches l'erreur:

PHP:
$check=$_POST['Check'];
$sql="DELETE FROM `pays`.`t_pays` WHERE `t_pays`.`id_pays` = ".$check[0].";";
$pdo->exec($sql);

Avant de scroller vers le bas, reflechis bien et cherches toi meme: c'est tres important et tres instructif!






























































































http://php.net/manual/fr/security.database.sql-injection.php

Et maintenant que t'as compris; faut corriger tout ton code, car il est plein de vulnerabilites de ce genre.
 
Dernière édition:
@tadawit, cherches l'erreur:

PHP:
$check=$_POST['Check'];
$sql="DELETE FROM `pays`.`t_pays` WHERE `t_pays`.`id_pays` = ".$check[0].";";
$pdo->exec($sql);

Avant de scroller vers le bas, reflechis bien et cherches toi meme: c'est tres important et tres instructif!

http://php.net/manual/fr/security.database.sql-injection.php

Et maintenant que t'as compris; faut corriger tout ton code, car il est plein de vulnerabilites de ce genre.
Tu rajoute un "or 1=1" dans le formulaire et hope la table est vidée
 
@tadawit, cherches l'erreur:

PHP:
$check=$_POST['Check'];
$sql="DELETE FROM `pays`.`t_pays` WHERE `t_pays`.`id_pays` = ".$check[0].";";
$pdo->exec($sql);

Avant de scroller vers le bas, reflechis bien et cherches toi meme: c'est tres important et tres instructif !


http://php.net/manual/fr/security.database.sql-injection.php

Et maintenant que t'as compris; faut corriger tout ton code, car il est plein de vulnerabilites de ce genre.

Merci pour toutes ces précisions, c'est vrai que si un petit malin me tape cette commande sur mon panel
SELECT * FROM nom_pays ; DROP TABLE t_pays je lui fais ça fête...:rolleyes:

Comment peut-on se protéger ? Lorsque j'ai crée une pagination en php, par exemple j'ai lu qu'il fallait utiliser la fonction intval() -> The intval() function is used to get the integer value of a variable.

En gros elle désactive dans la barre de navigation les lettres alphabétique
par exemple t'as un site qui s'appelle tadawit.com
tu crées ta pagination tu auras donc http://tadawit.com?page=
vue qu'on utilise la function intval() et qu'elle désactive le clavier alphabétique l'utilisateur ne peut pas faire une injection sql

donc quand le mec tapera http://tadawit.com?page=SELECT * FROM nom_pays ; DROP TABLE t_pays
il reviendra à la page d'accueil....:D

Tu rajoute un "or 1=1" dans le formulaire et hope la table est vidée

Mmmmm ouiii mais si on part du principe qu'on fait une injection sql
(SELECT * FROM t_pays WHERE nom_pays = "OR 1=1");
et que tu veux consulter ma table nom

Maintenant je peux limiter le nombre de caractère et utiliser la function isnumeric() est-ce que c'est suffisant ?
 

farid_h

<defunct>
Contributeur
Y a pas que isnumeric(). Parfois t'as besoin d'un champ alphanumerique, et la il faut sanetizer le contenu (par ex. enlever les ', ", ;, \, double-quotes, etc., mais aussi l'equivalent code en Unicode ou autres...). Il y a des fonctions qui font ca.

Ce qui compte, c'est que les SQL injections sont toute une classe de vulnerabilites que tu trouveras partout. Que tu programmes en PHP, ou autres languages, chaque foi que tu utilises des valeurs donnees par des usagers pour creer du SQL, faut etre hyper-mefiant en ce que tu acceptes. C'est une lecon a retenir en general.

Verifies ton code: meme les SELECT ... WHERE avec des criteres ou tu utilises des valeurs postees par des usagers, peuvent etre utilises pour faire de l'injection. ;)
 
Merci pour toutes ces précisions, c'est vrai que si un petit malin me tape cette commande sur mon panel
SELECT * FROM nom_pays ; DROP TABLE t_pays je lui fais ça fête...:rolleyes:

Comment peut-on se protéger ? Lorsque j'ai crée une pagination en php, par exemple j'ai lu qu'il fallait utiliser la fonction intval() -> The intval() function is used to get the integer value of a variable.

En gros elle désactive dans la barre de navigation les lettres alphabétique
par exemple t'as un site qui s'appelle tadawit.com
tu crées ta pagination tu auras donc http://tadawit.com?page=
vue qu'on utilise la function intval() et qu'elle désactive le clavier alphabétique l'utilisateur ne peut pas faire une injection sql

donc quand le mec tapera http://tadawit.com?page=SELECT * FROM nom_pays ; DROP TABLE t_pays
il reviendra à la page d'accueil....:D



Mmmmm ouiii mais si on part du principe qu'on fait une injection sql
(SELECT * FROM t_pays WHERE nom_pays = "OR 1=1");
et que tu veux consulter ma table nom

Maintenant je peux limiter le nombre de caractère et utiliser la function isnumeric() est-ce que c'est suffisant ?
Publie ton code sur un vrai serveur envoi moi l'url et je te donnerai toutes les failles du type sql injection a corriger
Sinon inspire toi du code source de vbuletin ou xenforo, ils ont adopté des standards pour blinder la securité des formulaires
 
Y a pas que isnumeric(). Parfois t'as besoin d'un champ alphanumerique, et la il faut sanetizer le contenu (par ex. enlever les ', ", ;, \, double-quotes, etc., mais aussi l'equivalent code en Unicode ou autres...). Il y a des fonctions qui font ca.

Ce qui compte, c'est que les SQL injections sont toute une classe de vulnerabilites que tu trouveras partout. Que tu programmes en PHP, ou autres languages, chaque foi que tu utilises des valeurs donnees par des usagers pour creer du SQL, faut etre hyper-mefiant en ce que tu acceptes. C'est une lecon a retenir en general.

Verifies ton code: meme les SELECT ... WHERE avec des criteres ou tu utilises des valeurs postees par des usagers, peuvent etre utilises pour faire de l'injection. ;)

Merci du tuyau, je vais faire gaffe alors, je vais essayé de documenté un peu plus sur les injections SQL....

Publie ton code sur un vrai serveur envoi moi l'url et je te donnerai toutes les failles du type sql injection a corriger
Sinon inspire toi du code source de vbuletin ou xenforo, ils ont adopté des standards pour blinder la securité des formulaires

ahahha ok lorsque j'aurais terminé mon e-Commerce je t'enverrais le lien loool attend d'ici 3 semaines grand max loool
 
Haut