我的问题很简单。但我为此付出了太多的努力。问题是,一旦我点击了“提交”按钮,该页面便应重定向到其他页面。请告诉我我做错了什么?因为我已经尝试了一切。
代码:
Update-docket.php
<?php
//error_reporting(0);
$link = mysqli_connect("localhost", "home_db", "root", "");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
$sql = 'SELECT * FROM prod_details';
$result = mysqli_query($link,$sql);
while ($row = mysqli_fetch_array($result))
{
$Quantity1 = $_POST['p_'.$row['id']. ''];
$id = $row['id'];
$store = $row['rstore'];
// echo $store;
foreach ($_POST as $key => $value)
{}
if(!empty($Quantity1)) {
$query="update prod_details SET rdocket='$Quantity1' WHERE id='$id'";
if(mysqli_query($link, $query)) {
header('Location: /docket-details.php');
exit();
} else {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
}
}
docket-details.php
<form class="form-horizontal" action="update-docket.php" method="post" name="myform" autocomplete="off">
<button type='submit' name='submit' class='btn c-theme-btn c-btn-square c-btn-uppercase c-btn-bold'>Submit</button>
请帮助!!!
答案 0 :(得分:3)
您的Location
行不正确,请使用以下方式重定向:
header('Location: /url');
https://secure.php.net/manual/en/function.header.php
我认为您的if语句未得到满足。尝试再次启用错误日志记录,并在每个条件部分中启用var_dumping以查看真正的问题所在。现在,您已经更新了代码以使用header
,它在理论上应该可以工作。但是我的猜测是$ _POST没有返回您想要/期望的东西。
答案 1 :(得分:0)
已编辑!
尝试一下:
header('Location: /docket-details.php');
// i'm sorry, forgot to add exit
exit();
当然,如果您引荐,也可以填写完整的网址。
重要提示:此行之前不应进行任何输出,因为它将生成标头。发送响应标头之前,没有一个echo
!
答案 2 :(得分:0)
应该是这样的:
if(!empty($Quantity1)) {
$query="update prod_details SET rdocket='$Quantity1' WHERE id='$id'";
$res = mysqli_query($link, $query);
if($res) {
header('Location: /docket-details.php', true, '200');
} else {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
}
答案 3 :(得分:0)
您有“ update-details.php”,但在表单操作中引用了“ update-docket.php”。因此,表单操作将重定向到另一个文件。
如@thisGuyHasTwoThumbs所述,您的位置行不正确。
header('Location: /url');
exit();
您还希望exit()
,因为它将阻止在该行之后执行任何代码。
https://secure.php.net/manual/en/function.header.php https://secure.php.net/manual/en/function.exit.php
详细信息:
"update prod_details SET rdocket='$Quantity1' WHERE id='$id'"
看起来更干净,更容易阅读:
"UPDATE `prod_details` SET `rdocket` = '$Quantity1' WHERE `id` ='$id'"
将MySQL单词保留为大写。在反引号中包装列和表名将防止出现“ MySQL serverd word error”
制作:
<form class="form-horizontal" action="update-docket.php" method="post" name="myform" autocomplete="off">
<?php
if (!empty( $Quantity1) )
{
$query = "UPDATE `prod_details` SET `rdocket` = '$Quantity1' WHERE `id` ='$id'";
if( mysqli_query( $link, $query ) )
{
header( 'Location: /docket-details.php' );
exit();
} else {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
}
变量$Quantity1
已打开以进行SQL注入。要解决此问题,您可以escape如果变量是字符串,但是应该使用prepared statement。
答案 4 :(得分:0)
最好不要在header()之前输出任何内容。不要回显“错误:无法执行$ sql。”。 mysqli_error($ link);
答案 5 :(得分:0)
似乎您的文件名为“ Update-docket.php”,大写字母U。但是在表单的操作中,您需要输入action =“ update-docket.php”。
答案 6 :(得分:-1)
标题(位置:带有扩展名的页面名称)
如果上面的代码不能正常运行,并且给出“标题不变”的错误,请将下面的行分别放在页面顶部和页面底部
ob_start()-在页面顶部 ob_end_flush()-页面底部