Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insérer une donnée selon une session

    24 janvier 2017 à 20:36:47

    Bonjour, je développe actuellement une solution pour mon site pour un système d'inscription/connexion, ce que je voudrai faire soit que chaque user de la table 'membres' ait un champs 'favoris' dans la base de donnée, sur le site, il sélectionnera les elements qu'il souhaitera mettre en favoris grace a un fichier addfav.php, qui ajoute dans le champs 'favoris' de l'user, l'id de l'element sélectionné sur le site.
    Quand on clique sur "Ajouter en favoris" cela execute addfav.php (le fichier récupère l'id de l'element par l'URL) :
    <?php
    session_start();
    $_SESSION['user'] = $user_name;
    echo $user;
    if (!isset($_SESSION['login'])) {
      header ('Location: login.php');
      
    }
    $servername = "";
    $username = "";
    $password = "";
    $dbname = "";
    
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    $id = $_GET['id'];
    
    if (empty($id)) { 
        echo "Erreur"; 
    } 
    else {
    
           // sql to delete a record
       $sql = "UPDATE 'membres' SET 'favoris' = ".$id." WHERE 'user' = ".$user_name."";  
    
       if ($conn->query($sql) === TRUE) {
        header('Location: allmovie.php');
       } else {
        echo "Error deleting record: " . $conn->error;
       }
    
    $conn->close();
    
    
    	    }
    ?>
    Mais cela ne marche pas...

    -
    Edité par francois_mari 24 janvier 2017 à 20:37:40

    • Partager sur Facebook
    • Partager sur Twitter
      24 janvier 2017 à 20:56:15

      $_SESSION['user'] = $user_name; //verifie bien la logique
      $sql = sprintf('UPDATE membres SET favoris = %u WHERE user = "%s"',$id,$conn->escape_string($user_name));


      Protection contre l'injection et les chaines de caractères toujours les entouré de quote (" ou ')

      Edit : lien sur le fonctionnement de sprintf 

      Edit : Sprintf Pas obligatoire, mais utilise toujours mysqli::escape_string sur des chaine de caractère dans une requête pour éviter les injections et assure toi que les nombres en soit belle est bien  (Ici en l’occurrence id => %u nombre entier non signé base 10)

      -
      Edité par Infoxp 25 janvier 2017 à 14:27:08

      • Partager sur Facebook
      • Partager sur Twitter
      Infoxp ici depuis 2007
        24 janvier 2017 à 21:14:27

        Il faudrait surtout commencer par gérer les erreurs SQL (au moins par un mysqli_error sinon bien mieux mysqli_report vu que c'est global).

        On n'entoure pas de ' les noms de tables ou colonnes et il manque effectivement les quotes pour le SQL autour de $user_name (qui sort d'où d'ailleurs ?)

        Pas obligatoire mais utilise toujours mysqli::escape_string sur des chaine de caractère dans une requête pour éviter les injections et assure toi que les nombres en soit belle est bien (Ici en l’occurrence id => %u nombre entier non signé base 10)

        Là, si, c'est obligatoire (une quote ' dans $user_name et la requête plante(rait) déjà). Sinon on peut arrêter le "bricolage" et préparer ses requêtes, c'est fait pour (du moins un de leurs buts) ! Pas besoin d'aller chercher un tournevis pour enfoncer un clou quand on a un marteau sous la main.

        -
        Edité par julp 24 janvier 2017 à 21:23:10

        • Partager sur Facebook
        • Partager sur Twitter
          25 janvier 2017 à 14:26:38

          le "pas obligatoire" était pour le sprintf j'ai pas fini ma phrase erreur que je n'ai pas relus.

          bien sûr les requête préparé serait pour le coup mieux même si à son niveau j'imagine qu'il n’a pas encore essayé de faire ceci sur mysqli

          Pour Fr4ancois: Voir ici pour les requêtes préparé de mysqli

          -
          Edité par Infoxp 25 janvier 2017 à 14:32:24

          • Partager sur Facebook
          • Partager sur Twitter
          Infoxp ici depuis 2007

          Insérer une donnée selon une session

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown