спрабуе пераарыентаваць з PHP Header ( "Location:") функцыя

I'm stumbling out of the blocks on this one. I can't get this code to redirect the user to their product page immediately after submitting to create the product. I've got three files create_product.php | product.php | & an external function page i'm calling a function from. What i can't seem to get to work is the: header("location: product.php?product_id='.$product_id.'"); functionality. All the stuff is input into the database correctly but when the user clicks submit to create the product i get the "That product does not exist" error. Any help would be greatly appreciated (I know there are issues w/ security, etc...not worried about those at the moment, but rather just getting the "create product submit button to redirect the user to that newly created product page...and sorry for the low response rate (already been brought to my attention as a new user...i will start accepting all answers). Thanks a ton for any help you can provide,

CREATE_Product.php PAGE:

<?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, '
'; } } else { create_product($product_name, $product_description, $image_temp, $image_ext); header("location: product.php?product_id='.$product_id.'"); exit(); } } ?>

Product.php PAGE:

<?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.'/');

}
?>
2

3 адказы

Гэтая лінія не так:

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

павінен выглядаць наступным чынам:

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

Калі ласка, звярніце ўвагу на адсутнасць у адзінарныя двукоссі.

Акрамя таго, здаецца, што вы не вызначылі $ PRODUCT_ID вар наогул у CREATE_PRODUCT.PHP

2
дададзена
@BennyB Ну, я думаю, вы павінны перадаць яго ў якасці параметру.
дададзена аўтар Aurelio De Rosa, крыніца
дзякуючы Аўрэліё, проста змяніўшы радок і выдаленне двукоссяў ня вырашыць гэтую праблему, так як вы сказалі, гэта павінна быць не вызначэнне зменнай. дзе б лепшае месца, каб зрабіць гэта быць?
дададзена аўтар BennyB, крыніца

Я не бачу, што вы вызначэння $ product_id у любым месцы. Выпадкова гэта URL старонкі памылкі product.php? Product_id = ні з чым пасля = ?

1
дададзена
гэта Kolink ... яго actuall product.php? product_id = «..», верагодна, таму, што, як згадвалася вышэй Аўрэліё я напісаў гэта няправільна ...
дададзена аўтар BennyB, крыніца
Эй Kolink, дзе б лепшае месца, каб вызначыць зменную быць? як і ў якім файле і ў якім блоку кода. (Я спрабаваў пару разоў і не атрымаў яго на працу ... мусіць, нешта маленькае я не хватает).
дададзена аўтар BennyB, крыніца

Вы павінны выкарыстоўваць абсалютны шлях да месца размяшчэння URI. Акрамя таго, вы павінны пераканацца, што няма іншага выйсця не пасылаецца кліенту да загалоўка адпраўляецца.

The relevant snip from 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;
?>
0
дададзена