php通过表单更新mysql表,立即重新加载页面上的信息

标签 php mysql

我正在创建一个页面,其中房间预订显示在表格中,并且可以更新或删除它们。

预订来自 MySQL 数据库、表预订。

它有效,但我希望按下按钮后数据库中的信息立即更新到页面上。

例如,如果现在我将用户名从“person”设置为“other person”,则该字段会在数据库中正确更新,但我需要刷新页面才能查看表中的更新。

我该怎么做?

<table border="1">
<tr><td>Datum</td><td>Start</td><td>Stop</td><td>Gebruikersnaam</td></tr>

<?php
$now = date("Y-m-d");
$query = "SELECT * FROM reservations WHERE (roomid = " . 45 . " AND end > NOW() ) ORDER BY start"; 
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$reservationid=$row["reservationid"];
$username=$row["username"];
$aantal=$row["numberingroup"];
$reservationid=$row["reservationid"];
$start=$row["start"];
$end=$row["end"];
$roomid=$row["roomid"];
?>

<form action="" method="post">
<tr><td><input name="StartDate" value="<? echo $StartDate; ?>" /></td><td><input name="StartTime" value="<? echo $StartTime; ?>" /></td><td><input name="StopTime" value="<? echo $StopTime; ?>" /></td><td><input name="username" value="<? echo $username;?>" /></td><td><input type="submit" value="update" name="<?php echo 'update_' . $reservationid; ?>" /></td><td><input type="submit" value="delete" name="<?php echo 'delete_' . $reservationid; ?>" /></td><td><? echo $reservationid; ?></td></tr></form>
<?php
//DELETE

if(isset($_POST['delete_' . $reservationid]))
{
$deletequery = "DELETE FROM reservations WHERE reservationid=" . $reservationid;
if(mysql_query($deletequery)){ 
echo "<p><b>Boeking verwijderd</b></p>";}
else {
echo "<p><b>Boeking niet verwijderd</b></p>";}
}

//UPDATE

if(isset($_POST['update_' . $reservationid]))
{
$NewStartDate = explode("-",$_POST[StartDate]);
$newstartdate = $NewStartDate[2] . "-" . $NewStartDate[1] . "-" . $NewStartDate[0];
$newstarttime = $_POST[StartTime] . ":00";

$newenddate = $newstartdate;
$NewEndTime = explode(":",$_POST[StopTime]);
$newendtime = mktime($NewEndTime[0],($NewEndTime[1]-1),59);
$newendtime = date("H:i:s",$newendtime);

$UpdateStart = $newstartdate . " " . $newstarttime;
$UpdateEnd = $newenddate . " " . $newendtime;

$UpdateUsername = $_POST[username];

$updatequery = "UPDATE reservations SET start='$UpdateStart', end='$UpdateEnd', username='$UpdateUsername' WHERE reservationid=" . $reservationid;
if(mysql_query($updatequery)){
echo "<p><b>Updated " . $reservationid . " " . $UpdateStart . " " . $UpdateEnd . " " .    $UpdateUsername . "</b></p>";}
else {
echo "<p><b>FAILURE IS NOT AN OPTION. AGAIN!</b></p>";}
}
?>

<?php
}
mysql_close();
?>

工作代码是:

<?php
//DELETE

if(isset($_POST['delete_' . $_POST[updateid]]))
{
$deletequery = "DELETE FROM reservations WHERE reservationid=" . $_POST[updateid];
  if(mysql_query($deletequery)){
  echo "<p><b>Boeking verwijderd</b></p>";
  }
  else {
  echo "<p><b>FAILURE IS NOT AN OPTION. AGAIN!</b></p>";
  }
}

//UPDATE

if(isset($_POST['update_' . $_POST[updateid]]))
{
$UpdateID = $_POST[updateid];

$NewStartDate = explode("-",$_POST[StartDate]);
$newstartdate = $NewStartDate[2] . "-" . $NewStartDate[1] . "-" . $NewStartDate[0];
$newstarttime = $_POST[StartTime] . ":00";

$newenddate = $newstartdate;
$NewEndTime = explode(":",$_POST[StopTime]);
$newendtime = mktime($NewEndTime[0],($NewEndTime[1]-1),59);
$newendtime = date("H:i:s",$newendtime);

$UpdateStart = $newstartdate . " " . $newstarttime;
$UpdateEnd = $newenddate . " " . $newendtime;

$UpdateUsername = $_POST[username];

$updatequery = "UPDATE reservations SET start='$UpdateStart', end='$UpdateEnd', username='$UpdateUsername' WHERE reservationid='$UpdateID'";
  if(mysql_query($updatequery)){
  echo "<p><b>Updated " . $reservationid . " " . $UpdateStart . " " . $UpdateEnd . " " . $UpdateUsername . "</b></p>";
  }
  else {
  echo "<p><b>FAILURE IS NOT AN OPTION. AGAIN!</b></p>";
  }
//  echo "<p><b>Updated " . $reservationid . " " . $UpdateStart . " " . $UpdateEnd . " "  . $UpdateUsername . "</b></p>";
}
?>

<?php
$query = "SELECT * FROM reservations WHERE (roomid = " . 45 . " AND end > NOW() ) ORDER BY start"; 
$result = mysql_query($query) or die(mysql_error());
?>
<table border="1">
<tr><td>Datum</td><td>Start</td><td>Stop</td><td>Gebruikersnaam</td></tr>

<?php
while($row = mysql_fetch_array($result)){
$reservationid=$row["reservationid"];
$username=$row["username"];
$aantal=$row["numberingroup"];
$reservationid=$row["reservationid"];
$start=$row["start"];
$end=$row["end"];
$roomid=$row["roomid"];

$startdate = explode(" ",$start);
$startdate[0] = explode("-",$startdate[0]);
$startdate[1] = explode(":",$startdate[1]);
$StartFormat = mktime($startdate[1][0],$startdate[1][1],$startdate[1][2],$startdate[0][1],$startdate[0][2],$startdate[0][0]);
$StartDate = date("d-m-Y",$StartFormat);
$StartTime = date("H:i",$StartFormat);

$stopdate = explode(" ",$end);
$stopdate[0] = explode("-",$stopdate[0]);
$stopdate[1] = explode(":",$stopdate[1]);
$StopFormat = mktime($stopdate[1][0],$stopdate[1][1],($stopdate[1][2]+1),$stopdate[0][1],$stopdate[0][2],$stopdate[0][0]);
$StopDate = date("d-m-Y",$StopFormat);
$StopTime = date("H:i",$StopFormat);
?>
<form action="" method="post">
<tr><td><input type="hidden" name="updateid" value="<?php echo $reservationid; ?>" />    <input name="StartDate" value="<? echo $StartDate; ?>" /></td><td><input name="StartTime" value="<? echo $StartTime; ?>" /></td><td><input name="StopTime" value="<? echo $StopTime; ?>" /></td><td><input name="username" value="<? echo $username;?>" /></td><td><input type="submit" value="update" name="<?php echo 'update_' . $reservationid; ?>" /></td><td>  <input type="submit" value="delete" name="<?php echo 'delete_' . $reservationid; ?>" /></td> </tr>
</form>

<?php
}
mysql_close();
?>
</table>

最佳答案

将执行更新和删除的逻辑移到执行渲染的逻辑之上:

<?php
// DELETE (your delete stuff)
// UPDATE (your update stuff)

// RETRIEVE (your SELECT query)
?>
<table> <!-- your table markup -->
<?php
// RENDER (your while loop and such)

您还需要稍微调整一下您的逻辑。您正在使用 SELECT 中的 $reservationid 来执行删除和更新。这是行不通的,因为 PHP 的执行上下文会随着每次页面加载而刷新。您需要的是将预订 ID 存储在每个表单中(可能在隐藏字段中),然后从 $_POST 中检索该预订 ID。

顺便说一句,您的代码非常容易受到 SQL 注入(inject)的攻击。另外,您应该考虑使用 mysqliPDOmysql_connect 在当前版本的 PHP 中已弃用。

关于php通过表单更新mysql表,立即重新加载页面上的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21116328/

相关文章:

jquery - 如何使用 datatables codeigniter 数据库上传类型文件

MYSQL GUID 触发器

MySQL DATETIME 使用虚拟日期表排序

mysql - 为什么 "admin' #"work as a sql injection attack on MySql but "admin' - -"doesn' t?

php - 从数据库中删除字符 "Â"

php - 带有\x26 值的 JSON 破坏了 PHPs json_decode

php - 如何在 Microsoft 中开发离线应用程序而不会使其刷新 token 在 90 天后过期

php - 哪个是我的 PHP 应用程序的正确设计模式?

php - 单击正文关闭弹出窗口

php - $_SESSION ['uiD' ] 注册后无法重定向到主页,uiD 未设置