Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur 500 requête UPDATE condition

Sujet résolu
    8 février 2024 à 22:46:47

    Bonjour,

    j'ai une erreur sur ma requete Update.

    je souhaite mettre a jour la colonne 24 avec la condition de colonne 14 == a $sr

    je ne trouve pas mon erreur a moins que ce soit une syntaxe.

    <?php
    
    $id = $_GET['id'];
    $vin = $_GET['vin'];
    $csv = $_GET['table'];
    $choix = $_POST['radio'];
    
    if ($choix == '1') {$sr = 'Good';}
    if ($choix == '2') {$sr = 'Bad battery';}
    if ($choix == '3') {$sr = 'Need to be recharged';}
    
    
    include("db_connect.php");
    
    $sql = "UPDATE ".$csv." SET  (`COL 24`) = ".$sr."  WHERE (`COL 14`) = ".$vin."";
    
    
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
    
    // on ferme la connexion à la base
    mysql_close();
    
    ?>

    si vin est = a la colonne 14 on applique le choix dans la colonne 24.

    mercii

    -
    Edité par OlivierOxii 8 février 2024 à 22:50:51

    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2024 à 23:41:40

      Hello,

      Je ne vais pas y aller par quatre chemin. Le code complet est à revoir.

      • Utilisation de chose supprimé depuis 10 ans au moins.
      • Faille de sécurité avec les injections SQL.
      • Fermeture de balise inutile
      • Nom des colonnes de la db, comment dire.
      • Pas de vérification des valeurs en entré ($_GET)

      Si c'est un projet d'entreprise, change maintenant de boîte.

      • Partager sur Facebook
      • Partager sur Twitter
        9 février 2024 à 0:36:49

        Salut,

        pour infos c'est juste une extracteur csv pour obtenir et modifier un fichier qui va sur une autre système, rien n'est stocké dans la base de données.

        je me sert juste d'elle pour la création de tableaux et extraire et modifier des données.

        après chaque enregistrement du fichier sur l'ordinateur client la table se vide.

        bref... j'ai remarqué que beaucoup de reproches sur ce site.

        je l'ai connu c'étais le site du zero il y a longtemps...

        la mentalité a bien changé.

        je ne vais plus faire de demandes.

        @+

        • Partager sur Facebook
        • Partager sur Twitter
          9 février 2024 à 18:52:40

          Je vais parler des remarques sur le site car sur le code tant qu'il est comme ça j'aurai du mal à trouver comment faire.

          OlivierOxii a écrit:

          j'ai remarqué que beaucoup de reproches sur ce site.

          Je vais pas parler au nom de tous le monde, mais si le code fourni est de la même qualité que celui que tu as fourni, je comprends pourquoi il y a des reproches.

          Si je reprends ton code et que je l'analyse plus en détails :

          $id = $_GET['id'];
          $vin = $_GET['vin'];
          $csv = $_GET['table'];
          $choix = $_GET['radio'];
          

          Juste dans ces 4 lignes, on peut voir que tu n'as pas de vérification sur les données que tu récupères. Tu fais confiance à l'utilisateur, ce qui est une très mauvaise idée. En plus le nom des paramètres et des variables ne sont pas explicites.

          Voici à minimas ce que tu devrais faire pour améliorer ton code :

          $id = (int) ($_GET['id'] ?? 0);
          $vin = $_GET['vin'] ?? ''; // Ne connsaissant pas son utilité, je ne peux pas te dire si c'est bon ou pas
          $tableName = $_GET['table'] ?? '';
          $battery = $_GET['battery'] ?? ''; // ça implique un changement dans le HTML
          
          Ensuite on a :
          if ($choix == '1') {$sr = 'Good';}
          if ($choix == '2') {$sr = 'Bad battery';}
          if ($choix == '3') {$sr = 'Need to be recharged';}
          

          Déjà pour être sur du type j'aurais mis un `===` et non un `==`. Mais on peut faire encore mieux en utilisant, soit un match (PHP 8), soit un tableau associatif.

          $batteryStatus = [
              '1' => 'Good',
              '2' => 'Bad battery',
              '3' => 'Need to be recharged',
          ];
          
          // Que veut dire "sr" ?
          $sr = $batteryStatus[$battery] ?? 'Unknown'; // Gérer le cas où le choix n'est pas dans le tableau
          

          Ou bien version match

          $sr = match ($battery) {
              '1' => 'Good',
              '2' => 'Bad battery',
              '3' => 'Need to be recharged',
              default => 'Unknown', // Gérer le cas où le choix n'est pas dans le tableau
          };
          

          Ensuite on a :

          $sql = "UPDATE ".$csv." SET  (`COL 24`) = ".$sr."  WHERE (`COL 14`) = ".$vin."";

          Il y a plusieurs problèmes dans cette requête. Le premier est que tu utilises des variables directement dans la requête. C'est une très mauvaise idée. Il faut utiliser des requêtes préparées. Ensuite, tu utilises des parenthèses pour les noms de colonnes. Il faut utiliser des guillemets simples.

          Avec le fait que tu laisse l'utilisateur entrer des données directement dans la requête via $_GET, tu es vulnérable aux injections SQL. C'est une des pires failles de sécurité que tu peux avoir.

          Après on passe à ce qui me fait perdre de l'espérence de vie :

          mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

          La fonction `mysql_query` est obsolète depuis PHP 5.5.0 et a été supprimée depuis PHP 7.0.0. Il faut utiliser `mysqli` ou `PDO`. Ensuite, tu utilises `or die`. C'est une très mauvaise pratique. Il faut gérer les erreurs de manière plus propre. Sache que php 7 existe depuis 2015 et que donc tu as 8, 9 ans de retard sur ça.

          Et la faut pas me sortir une excuse de type : "oui mais moi je ne veux pas être pro ou c'est juste un truc vite fait". La sécurité n'est pas un truc vite fait et ce tenir à jour dans les technologies utilises fait aussi parti du taff.

          OlivierOxii a écrit:

          je l'ai connu c'étais le site du zero il y a longtemps...

          Et ça se voit avec le code présenté, mais le monde évolue (en bien ou en mal ça c'est un autre débat). En tout cas par contre suivre l'évolution des technologies utilisé n'est pas une option. Sache d'ailleurs que tu risque gros, si quelqu'un découvre que tu n'es pas à jours d'après la CNIL. Il en va aussi donc de ta responsabilité.

          OlivierOxii a écrit:

          la mentalité a bien changé.

          Personnellement je suis devenu plus calme qu'avant. Plus jeune sur le SdZ je t'aurai dis la même chose d'une autre manière. Le truc c'est que par contre, un code qui date du SdZ, ce n'est pas quelque chose de positif. C'est comme si tu demandais à un médecin de te soigner avec des méthodes de 1900. J'espère que tu tiens à ta vie xD.

          OlivierOxii a écrit:

          je ne vais plus faire de demandes.

          Je dirais même et se sera la chose la plus dur que je vais te dire, mais tu devrais arrêter de coder si tu ne veux pas suivre l'évolution des technologies.

          Sur ces mots et si jamais tu penses que m'a mentalité n'est pas bonne, je reste ouvert à tes propositions qui me permettrais de m'améliorer.

          • Partager sur Facebook
          • Partager sur Twitter

          erreur 500 requête UPDATE condition

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown