Move_Upload_files qui ne fonctionne pas

Fermé
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021 - Modifié le 25 mai 2018 à 04:46
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021 - 26 mai 2018 à 16:11
Bonjour, je suis en galère depuis un petit moment.
Lorsque je remplis mon formulaire, et que j'upload mes fichiers, rien ne vas.
Dans mon formulaire j'ai:
- Fichier (obligatoire)
- Image (optionnel)
- Difficultés (optionnel)
- Email (obligatoire)
- Pseudo (obligatoire)

Mais il se trouve que quand je submit, rien ne vas.
L'upload s'effectue, mais ça ne vas pas jusqu'au bout (pas jusqu'à la BDD)

j'ai déjà essayé de retourner toutes les variable avec le message d'erreur.
Il me trouve le nom temporaire de l'image mais pas celui du fichier ! Rien à faire...
Du coup (je pense) que c'est à cause de ça.. merci d'avance.

J'ai pris le temps de commenter tout le code PHP pour que vous sachiez comment je procède dans ce code.

Merci d'avance !


<!-- Maxime Zorloni Copyright 2018 -->
<!-- OSUDL.RE -->
<!doctype html>
<html>
 <head>
  <title>OsuDL V3</title>
  <link href="https://fonts.googleapis.com/css?family=Oswald" rel="stylesheet">
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type ="text/css" href="https://osudl.re/style.css">
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  
 </head>
 <body>
  <div id="bodyhtml" >
  <?php include('includes/menu.php'); ?>
  <div class="main" >
   <div class="form-style-2">
    <div class="form-style-2-heading">Upload</div>
    <form method="post" enctype="multipart/form-data" >
     <input type="hidden" name="MAX_FILE_SIZE" value="12345" />
     <label for="fichier"><span>Fichier (osz, osk, osr) <span class="required">*</span></span><input class="input-field" type="file" accept=".osr, .osk, .osz" name="fichier" /></label>
     <label for="diff"><span>Diff </span>
     <select name="diff" class="select-field"></label>
      <option value="00">----</option>
      <option value="01">Easy</option>
      <option value="02">Normal</option>
      <option value="03">Hard</option>
      <option value="04">Insane</option>
      <option value="05">Maitre</option>
      <option value="06">Infinite</option>
     </select></label>
     <label for="img"><span>Image d'illustration </span><input class="input-field" type="file" accept=".jpg, .png, .jpeg, .png" name="img" name="img" /></label>
     <label for="pseudo"><span>Pseudo <span class="required">*</span></span><input type="text" class="input-field" name="pseudo" value="<?php error_reporting(0); $cookiespsd = $_COOKIE['pseudo']; echo $cookiespsd;    ?>" /></label>
     <label for="email"><span>E-mail* <span class="required">*</span></span><input type="text" class="input-field" name="email"  value="<?php error_reporting(0); $cookiesemail = $_COOKIE['email']; echo $cookiesemail; ?>" /></label>
     <input type="text" name="confirm" value="ok" hidden ><br />
     <input type="submit" value="Envoyer" id="one" name ="subimt"/>
    </form>

    <p>*Votre adresse e-mail vous est demandé afin de vérifier votre identité. Ne vous trompez pas car je ne pourrais 
    pas vérifier si c'est réelement votre fichier. Par la suite, une vérification InGame se fera et simplifiera les choses.</p>
    <br /> 
   </div>

<?php 
 date_default_timezone_set('UTC+01');
 
 if (isset($_POST['confirm'])) { //si jamais un formulaire à été envoyé
   
  if ((isset($_FILES['fichier'])) && (isset($_POST['pseudo'])) && (isset($_POST['email'])) ) { //si le fichier/pseudo et email sont présent
   if (($_FILES['fichier'] < (20480 * 1024))) {
    echo 'Votre fichier est trop volumineux';
   }
   else {
    function random($car) { //on créer une clé aléatore pour le nom de l'image et l'id du fichier
     $string = "";
     $chaine = "1234567890ABCDEFGHIJKLMNOPRSTUVWXYZ";
     srand((double)microtime()*1000000);
     for($i=0; $i<$car; $i++) {
     $string .= $chaine[rand()%strlen($chaine)];
    }
    return $string;
    }
    $chaine = random(5);
    
    $pseudo = $_POST['pseudo']; //on récupère le pseudo
    $email = $_POST['email']; //on récupère l'email
    $diff = $_POST['diff']; //on récupère la diff
    $ip = $_SERVER['REMOTE_ADDR']; //on récupère l'ip
    $date = date("j.n.20y à H:i"); //on récupère la date
    
    $image_name = $_FILES['img']['name']; //on défini le nom de l'image
    $image_size = $_FILES['img']['size']; //on récupère la taille de l'image 
    $image_tmp_name = $_FILES['img']['tmp_name']; //on récupère le nom temporaire de l'image
    
    $fichier_name = $_FILES['fichier']['name']; //on défini le nom du fichier
    $fichier_size = $_FILES['fichier']['size']; //on récupère la taille du fichier
    $fichier_tmp_name = $_FILES['fichier']['tmp_name']; //on récupère le nom temporaire du fichier
    
    $image_extension = strrchr($image_name, "."); //on récupère l'extension de l'image
    $fichier_extension = strrchr($fichier_name, "."); //on récupère l'extension du fichier
    
    
    
    $image_name_change = $chaine; //on défini le nouveau nom de l'image
    
    
    if ($fichier_extension == ".osz"){ //si l'extension correspond à .osz, on défini $type en  Beatmap
      $type =  "Beatmap";
    }
     elseif ($fichier_extension == ".osk"){ //si l'extension correspond à .osk, on défini $type en  Skin
      $type = "Skin";
     }
     elseif ($fichier_extension == ".osr"){ //si l'extension correspond à .osr, on défini $type en Replay
      $type = "Replay";
     }
     else{
      $type = ['Unknown']; //sinon on mets unknown
    }
    
    
    if ($fichier_extension == ".osz"){ //si l'extension correspond à .osz, on défini le dossiers de destination dans Beatmaps/
      $fichier_dest =  'Beatmaps/'.$fichier_name;
    }
     elseif ($fichier_extension == ".osk"){ //si l'extension correspond à .osk, on défini le dossiers de destination dans Skins/
      $fichier_dest =  'Skins/'.$fichier_name;
     }
     elseif ($fichier_extension == ".osr"){ //si l'extension correspond à .osr, on défini le dossiers de destination dans Replay/
      $fichier_dest =  'Replay/'.$fichier_name;
     }
     else{
      $fichier_dest = 'Inconnue/'.$fichier_name; //si l'extension ne correspond à rien alors on mets dans Inconnue (ça devrais pas arriver vu que dans le formulaire on prend que les osz, osr et osk..)
     }
    
    if (empty($image_name)){ //si l n'y a pas d'image sélectionné alors on défini celle par défaut 
     $image = 'defaut-font-4v34ed8v.png'; 
     $image_tmp_name = 'defaut-font-4v34ed8v.png';
     $image_dest = 'images/defaut-font-4v34ed8v.png';
    }
     else { //sinon on défin $image sur le réel nom de l'image..
     $image = $image_name; 
    }
    
    include('functions/GetSizeName.php'); //permets d'avoir le poid du fichier sous cette forme "[poid]Mo"
    
    
    if((move_uploaded_file($_FILES['image']['tmp_name'], $fichier_dest))){ //On upload le fichier 
     setcookie('pseudo', $_POST['pseudo'], time() + 365*24*3600, null, null, false, true);  // on défini les cookies pour faciliter l'envoie d'autres fichiers dans le future
     setcookie('email', $_POST['email'], time() + 365*24*3600, null, null, false, true); 
     move_uploaded_file($image_tmp_name, $image_dest . $image_name_change); //On upload l'image

     
     $bdd = mysqli_connect('web2.pulseheberg.net', 'wkmfc8_osudl', 'genre je vais vous donner la clé ^^ ;) '); //on se connecte à la BDD
      
     if (mysqli_connect_errno()){
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
     }
     
     $req_pre = mysqli_prepare($bdd, 'INSERT INTO fichiers (id, name, type, img, pseudo, ip, date, poid, diff, email) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); //on pré défini les entrées
      
     mysqli_stmt_bind_param($req_pre, 'ssssssssss', $chaine, $fichier_name, $type, $image_name_change, $pseudo, $ip, $date, $result, $diff, $email); //on pré défini les valeurs à insérer
     mysqli_stmt_execute($req_pre); // on execute
     echo printf("Erreur : %s.\n", mysqli_stmt_error($req_pre));
    }

    else { // si l'upload ne c'est pas passé correctement, alors on affiche erreur 
     echo 'erreur'; 
    }
   }
  } 
  else { // si il manque l'adresse email/pseudo ou le fichier alors on mets cette erreur
   echo 'Veuillez vérifier si les éléments correspondents aux conditions' ; 
  }
 }
?>


<p><span style="color:red;">Ce site web utilise des cookies</span></p>
   </div>
  </div>
 </body> 
</html> 

2 réponses

jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675
25 mai 2018 à 07:17
Bonjour,

Je n'ai pas regardé ton code en détail....
mais
if((move_uploaded_file($_FILES['image']['tmp_name'], $fichier_dest))){ //On upload le fichier 

Ne serait-ce pas plutôt sur
$_FILES['fichier']
que tu veux le faire ??
Surtout que tu en refais un second en dessous
move_uploaded_file($image_tmp_name,

pour l'image justement...
0
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021
25 mai 2018 à 07:29
J'avais pas fait gaffe mais ce n'es pas le problème, même après correction ça merde toujours .. :/
0
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021
25 mai 2018 à 07:38
Bon il se trouve que c'étais un gros coup de lag de mon hébergeur -_-
0
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021
26 mai 2018 à 03:33
Bah.. En fait non ça fonctionne toujours pas
0
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675
26 mai 2018 à 09:30
Ajoute un print_r de $_FILES et dis nous ce que ça t'affiche.
Vérifie les droits sur les dossiers de destination.
Montre nous le code modifié
0
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021
26 mai 2018 à 10:15
Array5
0
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675
Modifié le 26 mai 2018 à 14:25
Bon...

Commence par placer ton PHP AVANT ton html.
Et remplace le par ça :
<?php 
date_default_timezone_set('UTC+01');

//--------------------------------------------------//
//Affichage des erreurs PHP
//--------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//--------------------------------------------------//
// Fonctions
//--------------------------------------------------//
function getPostVar($varName,$default = NULL){
  return !empty($_POST[$varName]) ? $_POST[$varName] : $default;
}

function getFilesVar($varName){
  return !empty($_FILES[$varName]) ? $_FILES[$varName] : NULL;
}

//on créer une clé aléatore pour le nom de l'image et l'id du fichier
function random($car) { 
  $string = "";
  $chaine = "1234567890ABCDEFGHIJKLMNOPRSTUVWXYZ";
  srand((double)microtime()*1000000);
  for($i=0; $i<$car; $i++) {
    $string .= $chaine[rand()%strlen($chaine)];
  }
  return $string;
}

/**
* Insertion dans la bdd
*/
function InsertDb($chaine, $fichier_name, $type, $image_name_change, $pseudo, $ip, $date, $result, $diff, $email){
  $bdd = mysqli_connect('web2.pulseheberg.net', 'wkmfc8_osudl', 'genre je vais vous donner la clé ^^ ;) '); //on se connecte à la BDD 
   if (mysqli_connect_errno()){
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    exit();
   }

  $req_pre = mysqli_prepare($bdd, 'INSERT INTO fichiers (id, name, type, img, pseudo, ip, date, poid, diff, email) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); //on pré défini les entrées    
  mysqli_stmt_bind_param($req_pre, 'ssssssssss', $chaine, $fichier_name, $type, $image_name_change, $pseudo, $ip, $date, $result, $diff, $email); //on pré défini les valeurs à insérer
  if (!mysqli_stmt_execute($req_pre)){
   echo printf("Erreur : %s.\n", mysqli_stmt_error($req_pre));
   exit();
  }else{
    return true;
  }
}


//--------------------------------------------------//
// Récupération PROPRE des variables AVANT de les utiliser 
//--------------------------------------------------//
//files
$fichier = getFilesVar('fichier');
$image = getFilesVar('image');

//post
$pseudo = getPostVar('pseudo'); //on récupère le pseudo
$email = getPostVar('email'); //on récupère l'email
$diff = getPostVar('diff'); //on récupère la diff

//autres variables / constantes
$ip = $_SERVER['REMOTE_ADDR']; //on récupère l'ip
$date = date("j.n.20y à H:i"); //on récupère la date


//--------------------------------------------------//
// Début du traitement
//--------------------------------------------------//

//si jamais un formulaire à été envoyé
if (isset($_POST['confirm'])) { 
  //si le fichier/pseudo et email sont présent 
  if ($fichier && $pseudo && $email ) { 
   
    $image_name_change = random(5);
    $image_name = $image['name']; //on défini le nom de l'image
    $image_size = $image['size']; //on récupère la taille de l'image 
    $image_tmp_name = $image['tmp_name']; //on récupère le nom temporaire de l'image
    $image_extension = pathinfo($image_name, PATHINFO_EXTENSION);
    
    if (empty($image_name)){ //si l n'y a pas d'image sélectionné alors on défini celle par défaut 
      $image = 'defaut-font-4v34ed8v.png'; 
      $image_tmp_name = 'defaut-font-4v34ed8v.png';
      $image_dest = 'images/defaut-font-4v34ed8v.png';
    } else { 
      //sinon on défin $image sur le réel nom de l'image..
      $image = $image_name; 
    }
    
    require_once('functions/GetSizeName.php'); //permets d'avoir le poid du fichier sous cette forme "[poid]Mo"
    
    $errors = array();
    if(! $fichier){
      $errors[] = "Aucun fichier passé à la fonction de vérification !";
    }else{
      $fichier_name = $fichier['name'];
      $fichier_extension = pathinfo($filename, PATHINFO_EXTENSION);
      $fichier_size = $fichier['size'];
      $fichier_tmp_name = $fichier['tmp_name'];
      
      if($fichier_size > $maxSize){
        $errors[] = "Fichier trop volumineux";
      }else{
        switch($fichier_extension){
          case "osz":
            $rep_dest =  'Beatmaps/';
            $type =  "Beatmap";
            break;
          case "osk":
            $rep_dest =  'Skins/';
             $type = "Skin";
            break;
          case "osr":
            $rep_dest =  'Replay/';
            $type = "Replay";
            break;
          default:
            $rep_dest = 'Inconnue/';
            $type = ['Unknown']; //sinon on mets unknown
            break;
        }
        
        //on verifie le répertoire de destination existe
        $repCheck = true;
        if( !is_dir($rep_dest)){
          $errors[] = " Répertoire ".$rep_dest." inconnu !";
        }
        if(!is_writable($rep_dest)){
          $errors[] = "Ecriture dans le répertoire ".$rep_dest." non autorisé !";
        }
        
        $fichier_dest = $rep_dest . $fichier_name;
        if(move_uploaded_file($fichier_tmp_name, $fichier_dest)){
          setcookie('pseudo', $pseudo, time() + 365*24*3600, null, null, false, true);  // on défini les cookies pour faciliter l'envoie d'autres fichiers dans le future
          setcookie('email', $email, time() + 365*24*3600, null, null, false, true); 
          move_uploaded_file($image_tmp_name, $image_dest . $image_name_change); //On upload l'image
          
          //insertion en bdd
          InsertDb($chaine, $fichier_name, $type, $image_name_change, $pseudo, $ip, $date, $result, $diff, $email);
        
        }else{
           $errors[] = 'Upload error : ' . $fichier_tmp_name .' vers '. $fichier_dest;
        }
     }   
      
    }
  }else{
    $errors[] = "Erreur : Email, Pseudo ou Fichier vide ";
  }
  
  //Affichage du résultat :
  if(!empty($errors)){
    foreach($errors as $R){
      echo "<br>".$R;
    }
  }else{
    echo " OK ";
  }
  
}
?>


Je t'invite à lire et à appliquer ceci :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

0
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021
26 mai 2018 à 11:57
Notice: Undefined variable: size in /var/www/wzh1cj/www/functions/GetSizeName.php on line 33

Notice: Undefined variable: filename in /var/www/wzh1cj/www/up/index.php on line 102

Notice: Undefined variable: maxSize in /var/www/wzh1cj/www/up/index.php on line 106



WTF
0
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675
26 mai 2018 à 13:32

Notice: Undefined variable: size in /var/www/wzh1cj/www/functions/GetSizeName.php on line 33

Je ne sais pas ce que contient ce fichier...


Notice: Undefined variable: filename in /var/www/wzh1cj/www/up/index.php on line 102

filename à remplacer par fichier_name

Notice: Undefined variable: maxSize in /var/www/wzh1cj/www/up/index.php on line 106

J'ai oublié de déclarer la variable $maxSize
Il faut que tu la déclare et que tu y spécifie la taille max autorisée pour tes fichiers
0
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021
Modifié le 26 mai 2018 à 14:18
Warning: move_uploaded_file(Beatmaps/test.osz): failed to open stream: No such file or directory in /var/www/wzh1cj/www/up/index.php on line 139

Warning: move_uploaded_file(): Unable to move 'tmp/phpPNiaG1' to 'Beatmaps/test.osz' in /var/www/wzh1cj/www/up/index.php on line 139

Répertoire Beatmaps/ inconnu !
Ecriture dans le répertoire Beatmaps/ non autorisé !
Upload error : tmp/phpPNiaG1 vers Beatmaps/test.osz



[https://img-19.ccm2.net/Lq6Ew1POlPNA9pyFduDPuDPaqEw=/5c6105fdf19446ae817abd6d38b72ee8/ccm-ugc/51564658.PNG


Là je ne comprend pas... Tout est ok pour les répertoires pourtant...
0
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675
26 mai 2018 à 14:25
Le répertoire se situe où dans ton site ?
Tu peux nous montrer l'arborescence de ton site histoire qu'on sache où se trouve tes différents fichiers / répertoires ?
0
fareohh Messages postés 63 Date d'inscription samedi 9 septembre 2017 Statut Membre Dernière intervention 30 mars 2021
26 mai 2018 à 14:29
Après réflexion je crois que j'ai juste confonfu deux choses.
De base la page d'upoad se trouvais dans www/event/
Mais maintenant elle se trouve dans www/up/

Et les dossiers se trouvent dans www/ ainsi que le dossier temp
Donc je suppose que je doit redésendre d'un étage comme ceci:
'../Beatmap'
'../Skins'
'../Replay'
'../tmp'

C'est okay comme ça ?
0