尝试使用 PHP Header("Location: ") 函数重定向

Posted

技术标签:

【中文标题】尝试使用 PHP Header("Location: ") 函数重定向【英文标题】:trying to redirect with PHP Header("Location: ") function 【发布时间】:2011-12-17 00:08:15 【问题描述】:

我在这个问题上磕磕绊绊。在提交创建产品后,我无法获取此代码以立即将用户重定向到他们的产品页面。我有三个文件 create_product.php |产品.php | &一个我正在从中调用函数的外部函数页面。我似乎无法开始工作的是: header("location: product.php?product_id='.$product_id.'");功能。所有的东西都正确输入到数据库中,但是当用户单击提交创建产品时,我得到“该产品不存在”错误。任何帮助将不胜感激(我知道存在安全问题等......目前不担心这些问题,而只是让“创建产品提交按钮将用户重定向到新创建的产品页面...... . 很抱歉回复率低(作为新用户已经引起我的注意...我将开始接受所有答案)。非常感谢您提供的任何帮助,

CREATE_PRODUCT.PHP 页面:

<?php
if (isset($_POST['product_name'], $_POST['product_description'], $_FILES['fileField'])) 
$product_name = $_POST['product_name'];
$product_description = $_POST['product_description'];
$image_name = $_FILES['fileField']['name'];
$image_size = $_FILES['fileField']['size'];
$image_temp = $_FILES['fileField']['tmp_name'];

$allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
$image_ext = strtolower(end(explode('.', $image_name)));

$errors = array();

if (empty($product_name) || empty($product_description) || empty($image_name)) 
    $errors[] = "All Fields are required";
 else 
    if (strlen($product_name) > 55 || strlen($product_description) > 255) 
        $errors[] = "One or more fields contains too many characters";
     else 
        if (in_array($image_ext, $allowed_ext) === false) 
            $errors[] = 'File type not allowed';
        
        if ($image_size > 2097152) 
            $errors[] = 'Maximum file size is 2MB';
        

    



if (!empty($errors)) 
    foreach ($errors as $error) 
        echo $error, '<br/>';
        
     else 
        create_product($product_name, $product_description, $image_temp, $image_ext);

        header("location: product.php?product_id='.$product_id.'");
        exit();
    

 ?>

PRODUCT.PHP 页面:

<?php
// check to see the url variable product_id is set
if (isset($_GET['product_id'])) 
    $product_id = preg_replace('#[^0-9]#i','',$_GET['product_id']);
    // use this variable to check to see if this product ID exists...
    // if yes then get details...
    // if no then exit this script and give error

    $sql = mysql_query("SELECT * FROM products WHERE product_id = '$product_id' LIMIT 1");
    $productCount = mysql_num_rows($sql); // count the output
    if ($productCount > 0) 
        // get all the product details
        while($row = mysql_fetch_array($sql)) 
            $member_id = $row['member_id'];
            $timestamp = strftime("%b %d %Y", strtotime($row['timestamp']));
            $prodtitle = $row['bmtitle'];
            $proddesc = $row['bmdesc'];
        

     else 
        echo "That product does not exist";
        exit();
    

 else 
    echo "Need data - product id needed to render this page is missing.";
    exit();


?>

然后我继续在这个 product.php 页面中回显变量,如 $prodtitle 等

最后包含的产品功能页面:(仅显示 create_product 功能):

<?php

function create_product($product_name, $product_description, $image_temp, $image_ext) 
$product_name = mysql_real_escape_string(htmlentities($product_name));
$product_description = mysql_real_escape_string(htmlentities($product_description));

mysql_query("INSERT INTO products (product_id, member_id, timestamp, prodtitle, proddesc, image_temp, image_ext) VALUES ('','".$_SESSION['member_id']."', UNIX_TIMESTAMP(), '$product_name', '$product_description', '$image_temp', '$image_ext')");

mkdir('uploads/'.mysql_insert_id(), 0777);
mkdir('uploads/thumbs/'.mysql_insert_id(), 0777);

// place image & thumbnail in the respective folder
$bmid = mysql_insert_id();
$image_file = "$bmid."."jpg";
$location = "uploads/$bmid/$image_file";
move_uploaded_file($_FILES['fileField']['tmp_name'],$location);

create_thumb('uploads/'.$bmid.'/', $image_file, 'uploads/thumbs/'.$bmid.'/');


?>

【问题讨论】:

【参考方案1】:

这一行是错误的:

header("location: product.php?product_id='.$product_id.'");

应该是这样的:

header("Location: product.php?product_id=$product_id");

请注意没有单引号。

此外,您似乎根本没有在 CREATE_PRODUCT.PHP 中定义 $product_id 变量

【讨论】:

感谢 aurelio,仅更改行并删除引号并不能解决问题,因此正如您所说,它一定不是定义变量。最好的地方是哪里? @BennyB 好吧,我认为你应该将它作为参数传递。【参考方案2】:

我没有看到你在任何地方定义$product_id。有可能是错误页面的 URL product.php?product_id== 之后没有任何内容?

【讨论】:

它是 Kolink...它实际上是 product.php?product_id='..' 可能是因为上面提到的 Aurelio 我写错了... 嘿 Kolink,定义变量的最佳位置在哪里?如在哪个文件和哪个代码块中。 (我已经尝试了几次但没有让它工作......可能是我缺少的一些小东西)。【参考方案3】:

您应该为位置 uri 使用绝对路径。您还需要确保在发送标头之前没有其他输出发送到客户端。

来自http://php.net/manual/en/function.header.php的相关截图

<?php
/* Redirect to a different page in the current directory that was requested */
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>

【讨论】:

以上是关于尝试使用 PHP Header("Location: ") 函数重定向的主要内容,如果未能解决你的问题,请参考以下文章

header("Location: url") 不重定向

使用eclipse对maven项目打包时,报 invalid LOC header (bad signature)异常处理

使用 php header("Refresh") 重定向时的延迟 [重复]

invalid LOC header (bad signature)

invalid LOC header

tomcat启动出错 invalid LOC header