0

$_POST 関数から配列を受け取り、インデックスとインデックスに含まれる値を使用して SQL を作成する関数があります。私の問題は、SQL を正しくエコーする関数を取得できるが、変数を作成できないことです。私の機能は以下です

 function createcontactsArray($sql,Array $contactsArray){
         //array has already been cleaned from sql injections

        //delete null variables and the value of the submit button        
        foreach ($contactsArray as $key => $value) {

            if($value == ""||$value=="continue") {
                unset($contactsArray[$key]);
            }

        }

        echo "INSERT INTO users(";
        //create list of tables to use in the database
        foreach ($contactsArray as $key => $value) {

            if ($value == end($contactsArray))                {
                echo $key;
            } else                {
                echo $key.",";
            }

        }
        echo ') VALUES (';

        //create list of tables to use in the database
        //$newcontactsArray = array_values($contactsArray);
        foreach ($contactsArray as $key => $value) {

            if ($value == end($contactsArray))                {
                echo '"'.$value.'"';
            } else                {
               echo '"'.$value.'"'.",";
            }

        }

        echo ');';

}

たとえば、このスクリプトを実行して連想配列を渡すと$contacts = array("name"=>"Peter griffin","town"=>"Quahogn");、次のように出力されますINSERT INTO users (name,contacts) VALUES ("Peter griffin","Quahog")。ただし、関数で次のようなSQLを作成して、 「ありがとう$sql = INSERT INTO users (name,contacts) VALUES ("Peter griffin","Quahog")」とだけ出力するようにします。echo $sql;

4

4 に答える 4

1

すべての部分をエコーするのではなく、文字列変数に集めてください。したがって、代わりに:

echo 'Text';
echo $variable;

のようなことをする

$output = 'Text';
$output .= $variable;

関数の最後に、その出力を次のように返します

return $output;

.=以前の値と新しい値を連結することに注意してください。

于 2012-05-02T10:53:33.363 に答える
0
 function createcontactsArray($sql,Array $contactsArray){
         //array has already been cleaned from sql injections

        //delete null variables and the value of the submit button        
        foreach ($contactsArray as $key => $value) {

            if($value == ""||$value=="continue") {
                unset($contactsArray[$key]);
            }

        }

        $sql = "INSERT INTO users(";
        //create list of tables to use in the database
        foreach ($contactsArray as $key => $value) {

            if ($value == end($contactsArray))                {
                $sql .= $key;
            } else                {
                $sql .= $key.",";
            }

        }
        $sql .= ') VALUES (';

        //create list of tables to use in the database
        //$newcontactsArray = array_values($contactsArray);
        foreach ($contactsArray as $key => $value) {

            if ($value == end($contactsArray))                {
                $sql .= '"'.$value.'"';
            } else                {
               $sql .= '"'.$value.'"'.",";
            }

        }

        $sql .= ');';

        return $sql;
于 2012-05-02T10:55:39.113 に答える
0

これが正しい方法です。安全で清潔

function dbSet($fields,$source=array()) {
  global $mysqli;
  if (!$source) $source = &$_POST;
  $set='';
  foreach ($fields as $field) {
    if (isset($source[$field])) {
      $set.="`$field`='".mysqli_real_escape_string($mysqli,$source[$field])."', ";
    }
  }
  return substr($set, 0, -2); 
}

このように使用

$query  = "UPDATE $table SET ".dbSet(array("name","contacts"));

$_POST から取得するのではなく、常に許可されたフィールド名をハードコーディングする必要があることに注意してください。そうしないと、サイトが数秒でハッキングされます。

mysql では、この関数を INSERT または UPDATE クエリに使用できます。

于 2012-05-02T10:57:06.193 に答える
0
function createcontactsArray($sql,Array $contactsArray){
         //array has already been cleaned from sql injections
         $sql = '';
        //delete null variables and the value of the submit button        
        foreach ($contactsArray as $key => $value) {

            if($value == ""||$value=="continue") {
                unset($contactsArray[$key]);
            }

        }

        $sql .= "INSERT INTO users(";
        //create list of tables to use in the database
        foreach ($contactsArray as $key => $value) {

            if ($value == end($contactsArray))                {
                $sql .= $key;
            } else                {
                $sql .= $key.",";
            }

        }
        $sql .= ') VALUES (';

        //create list of tables to use in the database
        //$newcontactsArray = array_values($contactsArray);
        foreach ($contactsArray as $key => $value) {

            if ($value == end($contactsArray))                {
                $sql .= '"'.$value.'"';
            } else                {
               $sql .= '"'.$value.'"'.",";
            }

        }

        $sql .= ');';

        echo $sql;
于 2012-05-02T10:57:08.180 に答える