-3

我有一组表单值,它们从一个页面发布到另一个页面。

$_POST['ingredients'];

数组中的项目以 的形式发布ingredients[]

我如何连接所有值并将它们放入数据库中一行的一个字段中

一个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 的序列化函数将数组转换为字符串,然后再放入数据库,然后在拉出数据时反序列化。
  2. 使用 PHP 的implode将数据转为字符串,然后在拉出数据时爆炸。
  3. 在 MySQL 中创建另一个表,将每个值作为单独的行插入到数据库中,然后在查询中使用类似INNER JOINor的内容LEFT JOIN将数据拉出。

更新

既然您已经发布了代码,我不得不建议您不要使用mysql_*函数。它们已被弃用。使用mysqliPDO。此外,始终对从用户收到的值使用mysqli_real_escape_stringPDO::quote以防止 SQL 注入攻击。

这是一个使用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 来清理您的字符串,但我建议您了解 mysqli 或 PDO,因为不推荐使用 mysql_ 函数。

//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 回答