2012-05-02 4 views
0

$ _POST関数から配列を受け取り、そのインデックスに含まれるインデックスと値を使用してSQLを作成する関数があります。私の問題は、SQLを正しくエコーする関数を得ることができますが、変数を作成できません。このスクリプトを実行し、それを連想配列を渡すと私の関数は、それはたとえば$contacts = array("name"=>"Peter griffin","town"=>"Quahogn");ため変数を使用して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 ');'; 

}

下に次のINSERT INTO users (name,contacts) VALUES ("Peter griffin","Quahog")出力されますです。しかし、私は$sql = INSERT INTO users (name,contacts) VALUES ("Peter griffin","Quahog")のようなSQLを作成する関数をしたいので、出力するために私はちょうどecho $sql;と言う。

答えて

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; 
+0

@ PLBありがとうございます。これは実際に動作します。あなたは救い主です。 – sammyukavi

+0

ようこそ。この場合、この答えを受け入れるべきです。 – Leri

1

すべての部分をエコーし​​ませんが、文字列変数でそれらを収集してください。だから、代わりに:

echo 'Text'; 
echo $variable; 

.=は、新しいものと前の値を連結することを関数の戻り値の終わりに

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

ような何かを

return $output; 

注意して出力することを。

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からそれらを得る、またはサイトは数秒でハッキングされません。

with mysqlこの関数は、INSERTクエリまたはUPDATEクエリのいずれかに使用できます。

+0

ウーホー....男。あなたは私の常識です。それはすごくうまくいく。 – sammyukavi

+0

それは完全に安全です。フィールド名を常にハードコードし、POSTから取得しないようにするか、サイトを数秒でハッキングする必要があります。クラスの一部であれば$ mysqliの代わりに$ this-> connを使用してください –

+0

'return substr($ set、0、-2);によって正確に返されるもの – sammyukavi

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; 
+0

OOwwww ....私の怠惰なインターネット接続のために否定的投票を受けました –

+0

ドン心配です。私はuを0にするためにupvoteでuを保存しました。あなたのコードは動作します – sammyukavi

+0

ありがとう@Ukavi。ニースを共有する –

関連する問題