Impossible d'écrire dans ma base !

Résolu
fareohh Messages postés 65 Statut Membre -  
fareohh Messages postés 65 Statut Membre -
Bonjour,

Depuis un petit moment je me suis mis en tête de refaire de A à Z mon site web osudl.re (upload de fichiers spécifique à osu)
et impossible d'inscrire quoi que ce soit dans la base de donnée !!

Voilà mon code si quelqu'un arrive à savoir ce qui ne vas pas, car toutes mes variables sont ok...

<?php
function sqlconnect(){
       $bdd = mysqli_connect ('web2.pulseheberg.net', 'wkmfc8_osudl', '123456789', 'wkmfc8_osudl');  
}
 $ip = $_SERVER['REMOTE_ADDR']; 
function random($car) {
 $string = "";
 $chaine = "1234567890ABCDEFGHIJKLMNOPRSTUVWXYZ";
 
 srand((double)microtime()*1000000);
 for($i=0; $i<$car; $i++) {
 $string .= $chaine[rand()%strlen($chaine)];
}
 return $string;
}
 $chaine = random(5);

if(!empty($_FILES)){
 $pseudo = $_POST['pseudo'];
 $fichier_name = $_FILES['fichier']['name'];
 $image_name = $_FILES['img']['name'];
        $fichier_type = $_FILES['fichier']['type'];
 $fichier_ext = strrchr($fichier_name, ".");
 $image_ext = strrchr($image_name, ".");
 $image_name = $_FILES['img']['name'];
 $fichier_tmp_name = $_FILES['fichier']['tmp_name'];
 $image_tmp_name = $_FILES['img']['tmp_name'];
 $ext_auth_osu = array('.osz', '.OSZ', '.osr', '.OSR', '.osk', '.OSK');
 $ext_auth_img = array('.jpg', '.JPG', '.png', '.PNG', '');
 $fichier_local = 'fichiers/'.$fichier_name;
 $image_tmp_name = $_FILES['img']['tmp_name'];
 $image_local = 'images/'.$image_name;
 $dwl = 'Télécharger votre fichier: <a href="http://news.osudl.re/fichers/'.$fichier_name.'">http://news.osudl.re/fichiers/'.$fichier_name.'</a>';
 $date = date("h.d.m.y");
 if ($ext_auth_osu == ".osz"){
    $type =  "Beatmap";}
 elseif ($ext_auth_osu == "osk"){
    $type = "Skin";}
 elseif ($ext_auth_osu == "osr"){
 $type = "Replay";}
 else{
    $type = ['Unknown'];}
 $infos = 'Nom de la map: '.$fichier_name.'<br /> Nom de l\'image: '.$image_name.'<br /> Pseudo: '.$pseudo.' <br /> ID: '.$chaine.' <br /> IP: '.$ip.' <br /> Type: '.$ext_auth_osu.'<br />';

 if((in_array($fichier_ext, $ext_auth_osu)) && in_array($image_ext, $ext_auth_img)){
  if((move_uploaded_file($fichier_tmp_name, $fichier_local))){
   echo
   $infos;
   setcookie('pseudo', $_POST['pseudo'], time() + 365*24*3600, null, null, false, true); 
   move_uploaded_file($image_tmp_name, $image_local);
   
   if($bdd = mysqli_connect('web2.pulseheberg.net', 'wkmfc8_osudl', '123456789', 'wkmfc8_osudl')){
   
   $req_pre = mysqli_prepare($bdd, 'INSERT INTO fichiers (id, name, type, img, pseudo, ip, date) VALUES (?, ?, ?, ?, ?, ?, ?)');
   mysqli_stmt_bind_param($req_pre, $chaine, $name, $type, $img, $pseudo, $ip, $date);
   mysqli_stmt_execute($req_pre);

   echo 'ok';
            }  
            else {
   echo 'Erreur';
   }
  }
      else { 
   echo 'Vous n\'avez pas sélectionné de fichiers.';
      }  
 }
         else {
      echo 'Votre fichier doit provenir de Osu! !';
         }

   
}
 
?>

2 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Tu as placé le code de connexion à la bdd dans une fonction.... mais tu n'y fais pas appel...

    Je pense qu'il serait préférable de ne pas le mettre dans une fonction et de remplacer :
    function sqlconnect(){
           $bdd = mysqli_connect ('web2.pulseheberg.net', 'wkmfc8_osudl', '123456789', 'wkmfc8_osudl');  
    }
    

    par :
    $bdd = mysqli_connect ('web2.pulseheberg.net', 'wkmfc8_osudl', '123456789', 'wkmfc8_osudl');  
     if (mysqli_connect_errno()){
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
     }
    

    0
    1. fareohh Messages postés 65 Statut Membre
       
      Bonjour, j'ai essayé votre code, mais toujours pas..

      	if((in_array($fichier_ext, $ext_auth_osu)) && in_array($image_ext, $ext_auth_img)){
      if((move_uploaded_file($fichier_tmp_name, $fichier_local))){
      echo
      $infos;
      setcookie('pseudo', $_POST['pseudo'], time() + 365*24*3600, null, null, false, true);
      move_uploaded_file($image_tmp_name, $image_local);

      $bdd = mysqli_connect('web2.pulseheberg.net', 'wkmfc8_osudl', '123456789', 'wkmfc8_osudl');

      }
      $req_pre = mysqli_prepare($bdd, 'INSERT INTO fichiers (id, name, type, img, pseudo, ip, date) VALUES (?, ?, ?, ?, ?, ?, ?)');
      mysqli_stmt_bind_param($req_pre, $chaine, $name, $type, $img, $pseudo, $ip, $date);
      mysqli_stmt_execute($req_pre);

      if (mysqli_connect_errno()){
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
      else {
      echo 'Vous n\'avez pas sélectionné de fichiers.';
      }
      }
      else {
      echo 'Votre fichier doit provenir de Osu! !';
      }


      }


      bien sur quand j'essaye d'envoyer mes fichiers, je n'ai aucune erreurs.. Ni celle de la connexion
      0
    2. fareohh Messages postés 65 Statut Membre
       
      Voilà ma table
      https://image.noelshack.com/minis/2018/18/3/1525256489-1651145.png
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      if (mysqli_connect_errno()){
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
      

      Est à utiliser pour les ERREURS DE CONNEXION... et donc à placer SOUS la ligne de code qui fait la connexion à la bdd....

      Pour voir les erreurs de REQUETES, il faut utiliser :
      printf("Erreur : %s.\n", mysqli_stmt_error($req_pre));
      
      0
    4. fareohh Messages postés 65 Statut Membre
       
      Ou pardon, bah du coup voilà l'erreur
      Erreur : No data supplied for parameters in prepared statement.
      Je vous avouerais que je ne sais pas comment résoudre cette erreur...
      0
    5. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      D'où viennent les variables qui tu lui envoies dans le BIND ?
      $chaine, $name, $type, $img, $pseudo, $ip, $date

      Que valent t'elles ?
      Car visiblement le message d'erreur que ces variables ne contiennent pas de valeurs....
      0
  2. Utilisateur anonyme
     
    Bonjour

    Si j'en crois la doc, il manque un paramètre à ton appel à mysqli_stmt_bind_param.
    https://www.php.net/manual/fr/mysqli-stmt.bind-param.php
    Le deuxième paramètre est une chaîne qui indique les types des variables à utiliser pour la requête préparée, alors que toi tu mets directement les variables.
    0
    1. fareohh Messages postés 65 Statut Membre
       
      Ok donc je doit juste mettre 'sssd' dans stmt binf para?
      0
    2. Utilisateur anonyme
       
      Il me semble que tu as 7 variables dans ta requête préparée, ta chaîne de types devrait avoir 7 caractères. C'est toi qui sais quels sont leurs types, pas moi.
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > fareohh Messages postés 65 Statut Membre
       
      Comme indiqué dans la documentation :
      'sssd' => correspond aux différents types de tes variables
      s = string
      d = un nombre

      Donc, en fonction des TES VARIABLES, tu dois mettre le type correspondant (dans l'ordre de tes variables )
      0
    4. fareohh Messages postés 65 Statut Membre
       
      Comment ça ?
      La variable
      id: contiens 5 caractères alphanumérique
      Name: du texte
      Pseudo : du texte
      Type: texte
      Image: texte
      Ip: texte
      Date: date

      Je doit mettre quoi du coup ?
      0
    5. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > fareohh Messages postés 65 Statut Membre
       
      Tu as lu la doc ??

      Visiblement, tu as

      id: contiens 5 caractères alphanumérique ===>>> Donc du text
      Name: du texte
      Pseudo : du texte
      Type: texte
      Image: texte
      Ip: texte
      Date: date => Du text je pense

      Donc :

      sssssss
      0