PHPヘッダー( "場所:")関数でリダイレクトしようとしています

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ページ:

<?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(); } } ?>

プロダクト.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.'/');

}
?>
2

3 答え

この行は間違っています:

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

次のようになります。

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

一重引用符がないことに注意してください。

また、CREATE_PRODUCT.PHPで $ product_id varを定義していないようです

2
追加された
@BennyBまあ、私はそれをパラメータとして渡すべきだと思います。
追加された 著者 Aurelio De Rosa,
ありがとうaurelio、ちょうど行を変更し、引用符を削除しても問題を解決するわけではないので、変数を定義していない必要があります。これを行う最良の場所はどこですか?
追加された 著者 BennyB,

どこでも $ product_id を定義することはありません。万一、 = の後にエラーページ product.php?product_id = のURLが何も表示されません。

1
追加された
それはKolinkです...そのactuall product.php?product_id = '..'おそらく私が間違って書いた上記のAurelioとして...
追加された 著者 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
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com