Php / mysql / XHTML表单.如何一次更新多行表


PHP/MYSQL/ XHTML FORM. How to update multi row table at once?

我有以下PHP/SQL的例子,在编辑一行时工作得很好&保存更改。

它是基于POST/GET方法工作-其中URL设置要编辑/保存的行ID。

form -> post id & live values

seperate php file -> get 'id' and change row with this 'id'.

<?php
session_name('users');
session_set_cookie_params(2*7*24*60*60);
session_start();
define('INCLUDE_CHECK',true);
require 'connect.php';
require 'functions.php';
if(!$_SESSION['id']) {
    header ("Location: index.php"); 
}

//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}
//Sanitize the POST values
$id = clean($_POST['id']);
$usr2 = $_SESSION['usr'];
$live = (isset($_POST['live']))?1:0;
$updated = date("F j, Y, g:i a",time()+60*60);
$title = clean($_POST['title']);
$content = clean($_POST['content']);
//Create INSERT query
$qry = "UPDATE table SET live = '$live' WHERE id='".mysql_real_escape_string($_POST['id']). "'  ";
$result = mysql_query($qry);
echo mysql_error();
//Check whether the query was successful or not
if($result) {
    header("location: notes.php");
    exit();
}else {
    die("Query failed");
}
?>

我的问题是如何更新多行表/表单像这一个?

最好的方法是使用一个简单的for循环。

foreach ($_POST as $key=>$value) {
    // You didn't provide the names of the fields, so you will need to validate them here yourself.
    // I usually name them with a prefix, like somefield_3, and then I can use substr() to determine if the field is the one I'm looking for.
    $result=mysql_query("UPDATE whatever SET somefield=1 WHERE id=" . mysql_real_escape_string($key) . ";");
    //etc., etc.
}

因为你只设置了一个布尔字段,你也可以这样做:

UPDATE table SET live=1 WHERE id IN (1,2,3,4,5);

但是我建议执行循环,因为您将不可避免地需要在某个时候使用此查询更新其他字段。