Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\u将阵列发布到MySQL\u v2_Php_Mysql_Arrays_Post - Fatal编程技术网

Php $\u将阵列发布到MySQL\u v2

Php $\u将阵列发布到MySQL\u v2,php,mysql,arrays,post,Php,Mysql,Arrays,Post,我正在尝试通过$u POST数组和表单更新MySQL数据库。这是我编写的代码,简化了 在第1页中,我得到了一个5的数组,它只是最后一个可用于更新的“文本框”,它更新了整个列,全部为5。我希望能够更新单个单元格 我曾经问过一次这个问题,但是忽略了代码,所以下面是: 第1页 <form method="POST" action="showpost.php" enctype="multipart/form-data" ><tr><td> <?php $hos

我正在尝试通过$u POST数组和表单更新MySQL数据库。这是我编写的代码,简化了

在第1页中,我得到了一个5的数组,它只是最后一个可用于更新的“文本框”,它更新了整个列,全部为5。我希望能够更新单个单元格

我曾经问过一次这个问题,但是忽略了代码,所以下面是:

第1页

<form method="POST" action="showpost.php" enctype="multipart/form-data" ><tr><td>
<?php 
$host = "***";
$username1 = "***";
$password1 = "***";
$db_name = "***";
$tbl_name = "***";

mysql_connect("$host", "$username1", "$password1") or die("Can’t connect ");
mysql_select_db("$db_name") or die ("No connection to table ");

$foresp1 = mysql_query("SELECT * FROM $tbl_name"); 
while($data = mysql_fetch_array($foresp1))  
{
$example = $data[3];
echo "<input type='text' value='$example' name='examplearray[]' size='10'><br>";

}

?>

</td></tr></table>

<input type="submit" value="Update">
</form>
第2页-showpost.php

<?php
$host = "***";
$username1 = "***";
$password1 = "***";
$db_name = "***";
$tbl_name = "***";

mysql_connect("$host", "$username1", "$password1") or die("Can’t connect ");
mysql_select_db("$db_name") or die ("No connection to table ");

{
foreach($_POST['examplearray'] as $value)
{
mysql_query("UPDATE $tbl_name SET  example_cell = '$value'");
}
}

?>

我在这里做错了什么?

这里是一个片段,插入时您应该尝试调整查询和数据。 我仍然不明白你们有什么数据,所以我不能具体说明

<?php

$host = "***";
$username1 = "***";
$password1 = "***";
$db_name = "***";
$tbl_name = "***";
// pdo is built into to newer versions of php, you should be able to do this
// this will help eliminate sql injection issues (data sanitation)
$db = new PDO("mysql:host=$host;dbname=$db_name", $username1, $password1);

if (!$db) {

    die('no connection to table');
}

// you havent posted whats in $_POST and the inputs you have are also vague...
// lets say you want to update a name or a address and you have the row id
// so post has the following
// $_POST['name'] = 'some data the user posted from the form or a long name';
// $_POST['address'] = 'some other long data';
// $_POST['id'] = 16;

// you may want to check if the data is posted, not just assume the data is there
$dataToInsert = array(
    ':name' => $_POST['name'],
    ':bindvalue' => $_POST['address'],
    ':id' => $_POST['id']
);


// this creates a statement
$stmt = $db->prepare("UPDATE $tbl_name SET name = :name, address = :bindvalue WHERE row_id = :id");

// by executing your statement like this, you help protect against sql injection
$result = $stmt->execute($dataToInsert);
?>

这是my的一个简单改编,您基本上在name=update['.$row['id'.]表单中设置行的行id,然后使用它来知道要更新的行。。我不写mysql函数,所以在PDO中就是这样做的

<?php 
//connect to database using PDO
try {
    $db = new PDO("mysql:host=127.0.0.1;dbname=databasename", 'dbuser', 'dbpassword');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch (Exception $e){
    die('Cannot connect to mySQL server.');
}
?>


<form method="POST" action="showpost.php" enctype="multipart/form-data" >
<?php 

$sql = "SELECT id, example_cell FROM tbl_name";
$stmt = $db->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $row)
{
    echo '<input type="text" value="'.htmlentities($row['example_cell']).'" name="update['.$row['id'].']" size="10"><br>';
}

?>
<input type="submit" value="Update">
</form>
showpost.php
未经测试,希望能有所帮助。

快速浏览一下,您的更新查询似乎并不局限于某一行。相反,它将在写入时更新所有行。。在此处显示数据库表..您可以并且肯定没有正确地编写更新查询:您没有在此处执行任何操作,并且如果在公共internet上执行此操作,可能会导致灾难。并提供了一种向查询中添加数据的简单、可靠的方法。像这样的指南概述了与数据库接口时的推荐最佳实践。我试图不折不扣地遵循您的示例,但没有结果。。。你的例子在第2页,对吗?因此,您在第1页中看不到任何问题?我已经测试过了,根本无法开始工作。在你的例子的第1页有一个错误,我找不到。是不是我的第一页和第二页都偏离了目标,以至于它们都没用了?对我来说,似乎我必须以某种方式重写UPDATE命令,但不知道是什么。是的,您需要更改一些内容,主要是mysql登录详细信息,查询中的表名tbl_name。这不是一个复制粘贴的解决方案,教一个人钓鱼等等。。。另外,在变量中指定表名也是一种糟糕的做法,不应该这样做,只有在您为表实现一些前缀以停止与其他脚本的冲突时才应该这样做。让我知道错误,并向我展示正确的表结构,通过从phpmyadmin或诸如此类的导出,然后,我会告诉您出了什么问题。。。
<?php
//connect to database using PDO
try {
    $db = new PDO("mysql:host=127.0.0.1;dbname=databasename", 'dbuser', 'dbpassword');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch (Exception $e){
    die('Cannot connect to mySQL server.');
}

if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['update'])){
    //prepare the query
    $stmt = $db->prepare("UPDATE tbl_name SET example_cell = :value WHERE id = :id");

    foreach($_POST['update'] as $key=>$value)
    {
        //do update
        $stmt->execute(array(':value' => $value,
                              ':id'    => $key));
    }
}

?>