-3

あるページから別のページに投稿されるフォーム値の配列があります。

$_POST['ingredients'];

配列内の項目は の形式で投稿されましたingredients[]

すべての値を連結して、データベースの行の 1 つのフィールドに入れるにはどうすればよいですか

mysql コードの例は完璧です。

ありがとう

$ingredient_method = $_POST['conValue'];
$ingredient_type = $_POST['OneWordDescription'];
$ingredient_element = $_POST['ingredients'];


$sql="INSERT INTO tbl_Recipe (recipe_id, ingredient_method, ingredient_type, ingredient_element)
VALUES
('',$_POST[conValue]','$_POST[OneWordDescription]','$_POST[ingredients]')";

if (!mysql_query($sql))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";
4

2 に答える 2

4

いくつかのオプションがあります:

  1. PHP のserialize関数を使用して、配列をデータベースに入れる前に文字列に変換し、データを取り出すときにシリアル化を解除します。
  2. PHP のimplodeを使用してデータを文字列に変換し、データを取り出すときに爆発します。
  3. MySQL で別のテーブルを作成し、各値を個別の行としてデータベースに挿入してから、クエリでINNER JOINorLEFT JOINのようなものを使用してデータを引き出します。

更新

コードを投稿したので、関数を使用しないことをお勧めしますmysql_*。それらは非推奨です。mysqliまたはPDOを使用します。また、SQL インジェクション攻撃を防ぐために、ユーザーから受け取った値には常に mysqli_real_escape_stringまたはPDO ::quoteを使用してください。

serializeと PDOを使用した例を次に示します。

//get the array
$ingredient_method = $_POST['conValue'];
$ingredient_type = $_POST['OneWordDescription'];
$ingredient_elements = $_POST['ingredients'];
if(!is_array($ingredient_elements)) {
    //do some error handling
}

//connect to the database
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$pass = 'dbpass';
try {
    $pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

//serialize the string
$elements_str= serialize($ingredient_elements);

//prepare sql
$sql = 'INSERT INTO tbl_Recipe '.
           '(recipe_id, ingredient_method, ingredient_type, ingredient_element) '.
       'VALUES ( '.
            '"",'. //recipe_id
            $pdo->quote($ingredient_method).','.
            $pdo->quote($ingredient_type ).','.
            $pdo->quote($elements_str).
       ')';
// insert into database
$con->query($sql);
于 2012-12-11T01:55:21.970 に答える
0

わかりました、どのようにして成分が配列になったのかわかりませんが、これが当てはまる場合は、ここに行きます.

最初に、implode を使用して配列に参加できますが、警告がスローされないように、そこに何かがあるかどうかを確認してください。

//check if $_POST['ingredients'] is available if not then use empty string
$ingredient_element = isset($_POST['ingredients']) ? $_POST['ingredients'] : "";

join the array 
$ingredient_element = implode(" ", $ingredient_element);

今できることは、mysql_real_escape_string を使用して文字列をサニタイズすることですが、mysql_ 関数は非推奨であるため、mysqli または PDO について学習することをお勧めします。

//sanitize
$ingredient_element = mysql_real_escape_string($ingredient_element);

次に、挿入SQLで $ingredient_element を使用します

$sql="INSERT INTO tbl_Recipe (recipe_id、成分方法、成分タイプ、成分要素) 値 ('',$$ingredient_method','$ingredient_type','$ingredient_element')";

また、recipe_id が自動インクリメントの整数 ID の場合は、空白のままにできますが、何かを使用する必要がある場合は、'' の代わりに NULL を使用する必要があります。

于 2012-12-11T02:25:11.947 に答える