【问题标题】:PHP insert HTML form values notice array to string conversionPHP插入HTML表单值通知数组到字符串转换
【发布时间】:2017-05-21 05:46:44
【问题描述】:

我在尝试将表单值插入数据库时​​收到通知:

Array to string conversion in C:\path\rangking.inc.php on line 41

我读过this answer,但我有一个不同的数组,用print_r 显示的是:

Array ( [ia] => 6 [ik] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) [nn] => Array ( [0] => 80 [1] => 79 [2] => 79 [3] => 80 ) ) 1

任何建议的答案将不胜感激

形成 HTML:

    if($_POST){

    include_once 'includes/rangking.inc.php';
    $eks = new rangking($db);

    $eks->ia = $_POST['ia'];
    $eks->ik = $_POST['ik'];
    $eks->nn = $_POST['nn'];

    if($eks->insert2()){
?>
<div class="alert alert-success alert-dismissible" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  <strong>Berhasil Tambah Data!</strong> Tambah lagi atau <a href="rangking.php">lihat semua data</a>.
</div>
<?php
    }

    else{
?>
<div class="alert alert-danger alert-dismissible" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  <strong>Gagal Tambah Data!</strong> Terjadi kesalahan, coba lagi.
</div>
<?php
    }
    }
?>
<form method="post">
  <div class="form-group">
    <label for="ia">Alternatif</label>
    <select class="form-control" id="ia" name="ia">
        <?php
            $stmt3 = $pgn1->readAll();
            while ($row3 = $stmt3->fetch(PDO::FETCH_ASSOC)){
                extract($row3);
                echo "<option value='{$id_alternatif}'>{$nama_alternatif}</option>";
            }
        ?>
    </select>
  </div>
  <div class="form-group">
        <?php
            $stmt2 = $pgn2->readAll();
            while ($row2 = $stmt2->fetch(PDO::FETCH_ASSOC)){
                extract($row2);
        ?>
        <label for="ik"><?php echo $nama_kriteria; ?></label>
        <input type="hidden" name="ik[]" id="ik" value=<?php echo $id_kriteria ?>>
        <input type="text" class="form-control" id="nn" name="nn[]">
        <?php
            }
        ?>
  </div>
  <button type="submit" class="btn btn-primary">Simpan</button>
  <button type="button" onclick="location.href='rangking.php'" class="btn btn-success">Kembali</button>
</form>
<?php (print_r($_POST)); ?>

rangking.inc.php 的代码:

    function insert2(){

        $query = "insert into ".$this->table_name." values(?,?,?,'','')";
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->ia);
        $stmt->bindParam(2, $this->ik);
        $stmt->bindParam(3, $this->nn);

        if($stmt->execute()){
            return true;
        }else{
            return false;
        }

    }

编辑

mixing function code of _chris85_ and mine

$query = "insert into ".$this->table_name." values(?,?,?,'','')";
foreach ($this->ik as $key => $value){
    $stmt = $this->conn->prepare($query);
    $stmt->bindParam(1, $this->ia);
    $stmt->bindParam(2, $value);
    $stmt->bindParam(3, $this->nn[$key]);
    if($stmt->execute()){
        return true;
    }else{
        return false;
    }
}

【问题讨论】:

  • 我正在尝试将 HTML 表单的值插入数据库,但在 HTML 表单上,我使用ik and nn 中的一些循环来显示数据库中的每个值以使用&lt;label&gt; 标记,实际上我在第 41 行和第 42 行有一个错误,第 41 行是$stmt-&gt;bindParam(2, $this-&gt;ik);
  • 我在下面做了一个示例答案,试一试。如果可行,请接受,如果不行,请启用错误报告(我没有测试),和/或在下面发表评论。

标签: php mysql arrays pdo


【解决方案1】:

由于nnik 是数组,您需要遍历它们并绑定每个值。下面是一个粗略的例子,假设nnik 具有一对一的关系。

$query = "insert into ".$this->table_name. " values";
error_log('IK' . print_r($this->ik, 1));
foreach($this->ik as $key => $value) {
     error_log('In Loop');
     $query_bits[] = '(?, ?, ?, "", "")';
     $params[] = $this->ia;
     $params[] = $value;
     $params[] = $this->nn[$key];
}
$stmt = $this->conn->prepare($query . implode(',' $query_bits));
$stmt->execute($params);

这是一个粗略的、未经测试的示例,说明它应该如何工作。

不要将变量放入$query_bits,否则您将失去准备/绑定的目的。

这种方法是在大型insert 语句上使用逗号分隔每一行的数据。

使用 VALUES 语法的 INSERT 语句可以插入多行。为此,请包含多个列值列表,每个列表括在括号中并用逗号分隔。

-https://dev.mysql.com/doc/refman/5.7/en/insert.html

【讨论】:

  • 我不知道$query_bits 是如何工作的?同样在第 1 行,您忘记在行尾添加 ;
  • $query_bits 是每行将包含的数据的数组。这是现在的一个大插页。 (我认为某处会有错字,已更正)。我还添加了mysql 手册参考。
  • 当我在上面尝试你的代码时,我收到了一个错误syntax error, unexpected '$query_bits' (T_VARIABLE) on line 8,这意味着我需要先创建一个名为$query_bits 的新变量?
  • 听起来好像没有进入foreach$this-&gt;ik 是否已填充?
  • 是的,因为我上次可以使用我的函数&lt;select&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2018-09-28
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
相关资源
最近更新 更多