在mysql db中更新多行时遇到麻烦

时间:2013-03-04 12:32:47

标签: php sql-update

有人告诉我,我写错了吗?这段代码显示了来自数据库的数据,但是当我按下提交时,它只是重新加载页面而没有这些字段在数据库中更新... 我应该将更新查询中的变量更改为:$ _POST ['name']

<?php

$host="localhost"; // Host name
$username="username"; // Mysql username
$password="password"; // Mysql password
$db_name="db"; // Database name
$tbl_name="test"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

// Count table rows
$count=mysql_num_rows($result);
?>

<table width="500" border="0" cellspacing="1" cellpadding="0">
<form name="form1" method="POST" action="">
<tr>
<td>
<table width="500" border="0" cellspacing="1" cellpadding="0">

<tr>
<td align="center"><strong>Id</strong></td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Lastname</strong></td>
<td align="center"><strong>mid</strong></td>
</tr>

<?php
while($rows=mysql_fetch_array($result)){
    $id[]=$rows['id']; 
 ?>

<tr>
<td align="center">
<input name="id[]" type="text" id="id" value="<? echo $rows['id']; ?>">
</td>
<td align="center">
<input name="name[]" type="text" id="name" value="<? echo $rows['name']; ?>">
</td>
<td align="center">
<input name="lastname[]" type="text" id="lastname" value="<? echo $rows['lastname']; ?>">
</td>
<td align="center">
<input name="midmark[]" type="text" id="midmark" value="<? echo $rows['midmark']; ?>">
</td>
</tr>
<?
}
?>

<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>

<?php
            if(isset($_POST['submit'])){
                for($i=0;$i<$count;$i++){
                $sql1=mysql_query("UPDATE $tbl_name SET name='$name[$i]', lastname='$lastname[$i]', midmark='$midmark[$i]'  WHERE id='$id[$i]' ");
                $result1=mysql_query($sql1);
                }
            }

                if(isset($result1)){
                header("location:multiple.php");
                }
                mysql_close();

?>

4 个答案:

答案 0 :(得分:0)

尝试输入'。'在SQL字符串中的变量和文本之间以及使用单引号 - 它可能正在尝试评估$ name [$ i]的两个部分 ,例如

 'UPDATE '.$tbl_name.' SET name=\''.$name[$i].'    ...etc

此外,在测试时始终在查询之前回显SQL字符串以查看它将执行的操作

答案 1 :(得分:0)

试试这个,希望它能帮到你。

if(isset($_POST['Submit']))
{
    for($i=0;$i<$count;$i++)
    {
        $sql1=mysql_query("UPDATE `".$tbl_name."` SET name='".magic($_REQUEST['name'][$i])."', lastname='".magic($_REQUEST['lastname'][$i])."', midmark='".magic($_REQUEST['midmark'][$i])."'  WHERE id='".magic($_REQUEST['id'][$i])."' ");
            $result1=mysql_query($sql1);
     }
}


function magic($value)
{
   if( get_magic_quotes_gpc() )
       $value = stripslashes( $value );
   if( function_exists( "mysql_real_escape_string" ) )
       $value = mysql_real_escape_string( $value );
   else
       $value = addslashes( $value );
   return $value;
}

答案 2 :(得分:0)

使用以下方式显示和输入: -

<tr>
<td align="center">
<input name="data[<? echo $rows['id']; ?>][name]" type="text" id="name" value="<? echo $rows['name']; ?>">
</td>
<td align="center">
<input name="data[<? echo $rows['id']; ?>][lastname]" type="text" id="lastname" value="<? echo $rows['lastname']; ?>">
</td>
<td align="center">
<input name="data[<? echo $rows['id']; ?>][midmark]" type="text" id="midmark" value="<? echo $rows['midmark']; ?>">
</td>
</tr>

然后使用: -

处理
<?php
        if(isset($_POST['submit']))
        {
            while(list($index,$record)=each($_POST['data']))
            {
                $sql=mysql_query("UPDATE $tbl_name SET name='".mysql_real_escape_string($record['name'])."', lastname='".mysql_real_escape_string($record['lastname'])."', midmark='".mysql_real_escape_string($record['nmidmarkame'])."  WHERE id=".intval($index));
                $result1=mysql_query($sql1);
            }
        }
?>

答案 3 :(得分:0)

您的帖子变量设置错误。

首先你的if语句,post ['submit']是小写的,它需要与表单中的相同:

isset($_POST['Submit'])

然后你需要读取其余的post值并将它们存储在变量中或者至少正确地引用它们:

$sql1=mysql_query("UPDATE $tbl_name SET name='$name[$i]', lastname='$lastname[$i]', midmark='$midmark[$i]'  WHERE id='$id[$i]' ");

应该成为:

$name = $_POST['name[$i]'];
$lastname = $_POST['lastname[$i]'];

$sql1=mysql_query("UPDATE $tbl_name SET name='$name', lastname='$lastname',  ...