пытается перенаправить с помощью функции PHP Header ("Location:") - PullRequest
2 голосов
/ 28 октября 2011

Я спотыкаюсь из блоков на этом.Я не могу получить этот код для перенаправления пользователя на страницу продукта сразу после отправки для создания продукта.У меня есть три файла create_product.php |product.php |& страницу внешней функции, из которой я вызываю функцию.То, что я не могу заставить работать, это: header ("location: product.php? Product_id = '. $ Product_id.'");функциональность.Все это правильно вводится в базу данных, но когда пользователь нажимает кнопку «Отправить», чтобы создать продукт, я получаю сообщение об ошибке «Этот продукт не существует».Любая помощь будет принята с благодарностью (я знаю, что есть проблемы с безопасностью и т. Д. ... на данный момент я не беспокоюсь о них, а просто получаю кнопку «создать продукт», чтобы перенаправить пользователя на эту вновь созданную страницу продукта)..И извините за низкий уровень отклика (на меня уже обратили внимание как нового пользователя ... я начну принимать все ответы). Огромное спасибо за любую помощь, которую вы можете предоставить,

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

}
?>

Ответы [ 3 ]

3 голосов
/ 28 октября 2011

Эта строка неверна:

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

должно выглядеть так:

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

Обратите внимание на отсутствие одинарных кавычек.

Кроме того, этокажется, вы не определили $product_id var вообще в CREATE_PRODUCT.PHP

1 голос
/ 28 октября 2011

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

0 голосов
/ 28 октября 2011

Вы должны использовать абсолютный путь для местоположения 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;
?>
...