2013-04-20 73 views
0

我似乎无法更新除第一个记录以外的任何记录。 我不知道如何修改任何显示的记录。使用WHILE循环更新回显数据。只更新一条记录

<?php 

    if(isset($_POST["action"]) == "update") 
    { 
     $id = $_POST['m_id'][0]; 
     $type = $_POST['type'][0]; 
     // if I echo $id & $type, it only gives me the first record.** 
     mysql_query(" 
      UPDATE membership_type 
      SET mt_type ='$type' 
      WHERE mt_id = '$id'" 
     ); 
    } 

    ?> 

ALl这是在相同的PHP页面。

<form name=form action='' method='post'> 

    <?php 
    $result=mysql_query("SELECT * FROM membership_type;"); 
    while($rows=mysql_fetch_array($result)) 
    { ?> 
    <input size=35 class=textField type=text name='type[]' value='<?php echo $rows['mt_type']; ?>'> 
    <input type=hidden name='m_id[]' value="<?php echo $rows['mt_id']; ?>"> 
    <input type=submit value="Update"> 
    <?php 
    } 
    ?> 

如何通过点击更新按钮来编辑任何显示的记录?

+0

不要使用的mysql_query,它弃用。你的代码也打开sql注入。 – Jonast92 2013-04-20 03:17:10

回答

0

第一:您应该从不使用mysql_ *功能,因为它们已被弃用。
二:试试这个代码:

<?php 

// Get a connection to the database 
$mysqli = new mysqli('host', 'user', 'password', 'database'); 

// Check if there's POST request in this file 
if($_POST){ 

    foreach($_POST['m_id'] as $id => $type){ 
     $query = "UPDATE membership_type 
       SET mt_type = '".$type."' 
       WHERE mt_id = '".$id."'"; 

     // Try to exec the query 
     $mysqli->query($query) or die($mysqli->error); 
    } 
}else{ 

    // Get all membership_type records and then iterate 
    $result = $mysqli->query("SELECT * FROM membership_type") or die($mysqli->error); ?> 

    <form name='form' action='<?php echo $_SERVER['PHP_SELF'] ?>' method='post'> 
    <?php while($row = $result->fetch_object()){ ?> 
     <input size='35' 
      class='textField' 
      type='text' 
      name='m_id[<?php echo $row->mt_id ?>]' 
      value='<?php echo $row->mt_type; ?>'> 
     <input type='submit' value="Update"> 
    <?php } ?> 
    </form> 

<?php } ?> 

第三:为了增加更多的安全性(此代码是脆弱的),尝试mysqli_prepare

0

由于您已设置$id = $_POST['m_id'][0],其中包含第一个type[]文本框的值,因此每个表单提交中只更新第一条记录。要更新所有其他记录,请循环执行$_POST['m_id']

0

替换它。希望这可以工作。

<?php 

    if(isset($_POST["action"]) == "update") 
    { 
     $id = $_POST['m_id']; 
     $type = $_POST['type']; 
     $i = 0; 
     foreach($id as $mid) { 
      mysql_query("UPDATE membership_type 
         SET mt_type='".mysql_real_escape_string($type[$i])."' 
         WHERE mt_id = '".intval($mid)."'") OR mysql_error(); 
     $i++; 
     } 
    } 

    ?> 
+0

让我试试这最后一个:) – Angelina 2013-04-20 03:20:11

+0

它一次更新所有的人。我想这很好。我不需要所有的更新按钮。只有一个,我想 – Angelina 2013-04-20 03:22:55

0

试试这个:

if(isset($_POST["action"]) == "update") 
{ 
     $id = $_POST['m_id']; 
     $type = $_POST['type']; 
     $loopcount = count($id); 
     for($i=0; $i<$loopcount; $i++) 
     { 
      mysql_query(" 
      UPDATE membership_type 
      SET mt_type ='$type[$i]' 
      WHERE mt_id = '$id[$i]'" 
     ); 
     } 
} 
0

你的HTML格式不正确而你传递一个数组,但随后也只能使用第一个元素。试想一下:

<form name="form" action="" method="post"> 

<?php 
$result = mysql_query("SELECT * FROM membership_type;"); 
while($row = mysql_fetch_array($result)) 
    echo sprintf('<input size="35" class="textField" type="text" name="m_ids[%s]" value="%s" />', $row['mt_id'], $row['mt_type']); 
?> 
    <input type="submit" value="Update"> 
</form> 

然后服务器脚本:

<?php 

if(isset($_POST["action"]) && $_POST["action"] == "Update"){ 

    foreach($_POST['m_ids'] as $mt_id => $mt_type) 
     mysql_query(sprintf("UPDATE membership_type SET mt_type ='%s' WHERE mt_id = %s LIMIT 1", addslashes($mt_type), (int) $mt_id)); 

} 

有,你可以在这里做什么,例如,其他的事情。准备好的陈述,但这应该工作。

+0

你们真棒!谢谢 – Angelina 2013-04-20 03:45:04

+0

该解决方案应该只有一个更新按钮。 – calcinai 2013-04-20 03:47:06