La syntaxe SQL: passage de variable de requête SQL

C'est mon premier programme et j'ai fait de longues recherches pour tenter de répondre à cette question, et je ne peux pas résoudre le problème:

<?php

    include "connect.php";

    if (!$connection)
      {
      die('Could not connect: ' . mysql_error());
      }

    $submit = $_POST["submit"];

    if ($submit=="Submit") {
      $date = $_POST["date"];
      $name = $_POST["name"];
      $activity = $_POST["activity"];
      $activity_level = $_POST["activity_level"];

    $find_role = ("SELECT sales_role 
                     FROM role 
                LEFT JOIN USER on user.role_id = role.id 
                    WHERE user.user = '$name'");
    $find_activity_points = ("SELECT $activity_$role 
                                FROM $activity 
                               WHERE activity_level = '$activity_level'"); 

    $role = mysql_query($find_role);

    $activity_points = mysql_query($find_activity_points);
     if ($activity_points !== false) {
     }
      else {
       echo mysql_error ();
       die;
     }

     $convert_activity_points = array();

    while ($row = mysql_fetch_array($activity_points, MYSQL_ASSOC)) {
      $convert_activity_points[] = $row;
     }



    $set_points = "UPDATE $name SET $activity='$convert_activity_points' WHERE day='$date'";
     mysql_query($set_points);


    } 

    mysql_close($connection);

    ?>

Et c'est le message d'erreur que je reçois quand je soumettre form.php pour update.php:
Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre versions du serveur MySQL pour la bonne syntaxe à utiliser près DE cadran OÙ activity_level='70" à la ligne 1

P. S. je sais qu'il existe des vulnérabilités d'injection SQL, mais je suis la seule personne à l'aide de ce programme et je l'utilise en local sur mon ordinateur. Je suis d'accord avec les vulnérabilités pour l'instant.

Edit: code Modifié (j'apprécie vraiment les commentaires)

$find_role = "SELECT sales_role FROM role LEFT JOIN USER on user.role_id=role.id WHERE user.user='$name'";

$find_activity_points = "SELECT %s_%s FROM $activity WHERE activity_level='%d'";    

list($role) = mysql_fetch_array(mysql_query($find_role));

 $activity_points = mysql_query(
     sprintf($find_activity_points, //the main string
         $activity, $role, $activity, $activity_level) //the "arguments"
  );    

    if ($activity_points !== false) {
    }
        else {
            echo mysql_error ();
            die;
    }

Met à jour le tableau avec des 0 et n'affiche pas une erreur msg.
Re les vulnérabilités d'injection SQL, voir mon premier PS déclaration

  • Avez-vous regardé ce que les requêtes sql sont transmises à la base de données mysql par juste echo eux? Aussi, pourquoi avez-vous ajouter des parenthèses autour des cordes, comme ("foo bar")?
  • Est activity_level un type numérique? Pourrait-il en être les guillemets autour de la 70?
  • Possible faute de frappe: "$activity_$rôle"
  • Vous dire quelque chose à partir de la mise à jour mais il y a seulement des instructions select.
  • JOINTURE EXTERNE avec OÙ sur la même table est égale à INNER JOIN!
  • Quelles sont les parenthèses autour de la requête pour?
  • "Je suis d'accord avec les vulnérabilités pour l'instant." 🙁 !!
  • "Je suis d'accord avec les vulnérabilités pour l'instant." C'est pourquoi nous avons pirates se sentir comme les dieux après le piratage de systèmes réalisés par ces programmeurs.

InformationsquelleAutor Katherine | 2010-12-07