1

我正在构建一个显示详细信息的应用程序(admin.php)。用户单击编辑(edit.php),他被重定向到另一个页面以编辑他的详细信息。编辑完成后,值会更新,我想再次重定向到显示详细信息的上一页。所有操作都按需要执行,但是当我尝试在“提交”内重定向到上一页时,它不会发生。

管理员.php

    $event_id = $_SESSION['fedit'];
    if($_GET['edit'])
    {
     $url = "edit.php?event_id=". $event_id;  
     header("Location: $url");
    }

编辑.php

     if($_GET["Submit"])
              {
                 $val=$_GET['event'];
                 $remail=$_GET['email'];
                $rname = $_GET['ename'];
                $sqt=mysql_query("UPDATE users SET NAME='$rname',EMAIL='$remail' WHERE EID ='$val'");
                $page= "admin.php";
                header("Location: $page");
             }
4

6 回答 6

3

我不知道您将此代码放在页面上的哪个位置,但是如果在该标头(位置:“”)之前以某种方式发送了 http 标头输出,那么它将无法正常工作。尝试其他人的建议,但如果一切都失败了,你可能想使用 JS。

echo "<script>window.location.assign("admin.php")</script>";

用那个代替

header("Location: $page");

我猜它应该可以工作。

于 2013-02-21T11:16:22.150 回答
0

添加action='edit.php' method='get'到您的表单标签。并在 edit.php 页面中放置提交后的其余代码。

于 2013-02-21T11:07:03.137 回答
0

最好这样做:

if ($_GET["Submit"]) {
   ...

   // Clean any output
   ob_clean();
   header("Location: $page");

   // Exit the PHP process 
   exit;
}
于 2013-02-21T11:07:07.663 回答
0

从您发布的不完整代码中很难判断您在做什么。
但是,看起来不是重定向而是表单提交被破坏了。您的代码中还有 2 个严重缺陷:

  • 任何编辑都必须使用 POST 方法完成,而不是 GET
  • 您必须正确格式化您的 SQL 查询。

无论如何,这里有一个这样的应用程序示例(虽然只编辑一个字段。您可以轻松添加更多),它可以工作。

<?  
mysql_connect(); 
mysql_select_db("new"); 
$table = "test"; 
if($_SERVER['REQUEST_METHOD']=='POST') { //form handler part: 
  $name = mysql_real_escape_string($_POST['name']); 
  if ($id = intval($_POST['id'])) { 
    $query="UPDATE $table SET name='$name' WHERE id=$id"; 
  } else { 
    $query="INSERT INTO $table SET name='$name'"; 
  } 
  mysql_query($query) or trigger_error(mysql_error()." in ".$query); 
  header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);  
  exit;  
}  
if (!isset($_GET['id'])) { //listing part: 
  $LIST=array(); 
  $query="SELECT * FROM $table";  
  $res=mysql_query($query); 
  while($row=mysql_fetch_assoc($res)) $LIST[]=$row; 
  include 'list.php'; 
} else { // form displaying part: 
  if ($id=intval($_GET['id'])) { 
    $query="SELECT * FROM $table WHERE id=$id";  
    $res=mysql_query($query); 
    $row=mysql_fetch_assoc($res); 
    foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v); 
  } else { 
    $row['name']=''; 
    $row['id']=0; 
  } 
  include 'form.php'; 
}  
?>

你还需要 2 个模板来保存你的 HTML

表单.php

<form method="POST">
<input type="text" name="name" value="<?=$row['name']?>"><br>
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="submit"><br>
<a href="?">Return to the list</a>
</form>

列表.php

<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>
于 2013-02-21T11:20:19.080 回答
-1

Actually, that is not going to work, isnce your edit.php will never reach its if statement, as you are not sending $_GET["submit"]. You need to do the following (send the submit variable by setting it to any value)

admin.php

 $event_id = $_SESSION['fedit'];
 if($_GET['edit'])
 {
   $url = "edit.php?event_id=". $event_id . "&submit=1";
   header("Location: $url");
 }

edit.php

if($_GET["Submit"])
{
   $val=$_GET['event'];
   $remail=$_GET['email'];
   $rname = $_GET['ename'];
   $sqt=mysql_query("UPDATE users SET NAME='$rname',EMAIL='$remail' WHERE EID ='$val'");
   header("Location: admin.php");
}
于 2013-02-21T11:07:56.937 回答
-1

使用 header("Location : ". $page); 而不是header("Location: $page");

 if($_GET["Submit"])
          {
             $val=$_GET['event'];
             $remail=$_GET['email'];
            $rname = $_GET['ename'];
            $sqt=mysql_query("UPDATE users SET NAME='$rname',EMAIL='$remail' WHERE EID ='$val'");
            $page= "admin.php";
            header("Location : ". $page);
         }
于 2013-02-21T11:06:41.487 回答