Impossible d'écrire dans ma base !

Résolu
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. Modérateur
    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();
     }
    

    1. 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
    2. Voilà ma table
      https://image.noelshack.com/minis/2018/18/3/1525256489-1651145.png
    3. Modérateur
      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));
      
    4. 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...
    5. Modérateur
      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....
  2. 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.
    1. Ok donc je doit juste mettre 'sssd' dans stmt binf para?
    2. 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.
    3. Modérateur
      @fareohhComme 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 )
    4. 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 ?
    5. Modérateur
      @fareohhTu 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