Проблема с регистрацией PHP - PullRequest
1 голос
/ 03 августа 2011

Я программирую систему регистрации php, в которой есть две точки входа (если это имеет смысл):

  1. Если клиент хочет приобрести продукт, но не имеет учетной записи, и он сохраняет идентификатор продукта на протяжении всего процесса регистрации. Затем он позволяет обработать платеж после регистрации.

  2. Клиент регистрируется впервые, не пытаясь купить продукт.

Это ссылки, указывающие пользователю на страницы регистрации для двух вышеуказанных методов:

1. <a href="register.php?id=<?php echo $row['product_id'] ?>"></a>
2. <a href="register.php?type=first"></a>

Это код для файла register.php:

<?php
if(empty($_GET['type'])== "first") {
    header("Location: register.php?type=first&step=1");
}
if(empty($_GET['id'])) {
     if($_GET['type']) {
         //show the content first registration
}
    header("Location: register.php?type=first&step=1");

}else{
    $product_id=$_GET['id'];
    header("Location: register.php?id=".$product_id."&step=1");
    //show the content with the product information
}
?>

<html>...</html>

Проблемы:

  1. При использовании 1-го метода выше php говорит, что у него есть цикл перенаправления, и я не могу решить это. Как только у нас будет эта работа, я хочу показать содержимое, но это приводит ко второй проблеме.

  2. При использовании второго метода он работает и показывает контент для первой регистрации, но не отображает html-контент под этим кодом.

Буду признателен за любую помощь.

Спасибо

UPDATE:

Благодаря вашим ответам я переписал это так, и теперь оно работает.

<?php
if($_GET['type'] == "first" && empty($_GET['step'])) {
    header("Location: register.php?type=first&step=1");

    //If user clicks on (<a href="register.php?type=first"></a>)

    //show the content first registration

}elseif(empty($_GET['id']) && empty($_GET['type'])) {
    header("Location: register.php?type=first&step=1");

    //if user types in the address bar www.domain.co.uk/register.php

    //redirect and show the content first registration

}elseif(isset($_GET['id']) && empty($_GET['step'])){
    $product_id=$_GET['id'];
    header("Location: register.php?id=".$product_id."&step=1");

    //if the user clicks on <a href="register.php?id=<?php echo $row['product_id'] ?>"></a>

    //show the content with the product information

}
?>

Ответы [ 4 ]

1 голос
/ 03 августа 2011

Его обновление будет работать

<?php
if($_GET['type'] == "first" && empty($_GET['step'])) {
    header("Location: register.php?type=first&step=1");


}elseif(empty($_GET['id']) && empty($_GET['type'])) {
    header("Location: register.php?type=first&step=1");


}elseif(isset($_GET['id']) && empty($_GET['step'])){
    $product_id=$_GET['id'];
    header("Location: register.php?id=".$product_id."&step=1");

}
?>

Потому что это то, что я разработал.

1 голос
/ 03 августа 2011

Более точный отступ ваших файлов может быть полезен в этом случае:

<?php
if(empty($_GET['type'])== "first") 
{
    header("Location: register.php?type=first&step=1");
    exit;
}
if(empty($_GET['id'])) 
{
    if($_GET['type']) 
    {
        exit;       //show the content first registration
    }
    header("Location: register.php?type=first&step=1");
    exit;
}
else
{
    $product_id=$_GET['id'];
    header("Location: register.php?id=".$product_id."&step=1");
    exit;               //show the content with the product information
}
?>

<html>...</html>

Система не может добраться до html. Если $ _GET ["type"] не пусто, вызывается первый if или вложенный if и скрипт завершается. Если $ _GET ["id"] не пусто, то вложенное if может быть выполнено и скрипт завершится. Если $ _GET ["id"] пусто, выполняется последняя команда и сценарий завершается.

Эта строка очень интересна:

if(empty($_GET['type'])== "first") 

Это говорит: «тип пуст? затем пусто ($ _ GET ['type'] равно true. True == "first" также верно, поэтому скрипт завершается. Это то, что вы хотели? Похоже, вы имели в виду

if (! Empty ($ _ GET ['type']) && $ _GET ['type'] == "first")

Чтобы добраться до ваших ситуаций 1 и 2:

Ситуация 1, если она возвращается на эту страницу, переходит в финал еще. Это добавляет & step = 1 к URL. Но это не меняет ситуацию, поэтому вы продолжаете добираться до этого и перенаправлять на тот же URL. Я не думаю, что вы собираетесь перейти к этому, как только вы добавили & step = 1, или вы?

Ситуация 2 переходит во второе условие if, потому что $ _GET ["type"] не пусто, а $ _GET ["id"] равно, а затем выполняет вложенный оператор if для прямого выхода.

Я думаю, вы имели в виду это:

<?php
if (!empty($_GET['step']) && (!empty($_GET['type']) || !empty($_GET['id'])))
{
    // This is when the html should be shown, right?
    // So no code here
}
/*elseif ($_GET['type'] == "first")
{
    header("Location: register.php?type=first&step=1");
    exit;
}*/ // Don't need this part?
elseif (!empty($_GET['id']))
{
    $product_id=$_GET['id'];
    header("Location: register.php?id=".$product_id."&step=1");
    exit;
}
else
{
    header("Location: register.php?type=first&step=1");
    exit;
}
?>

<html>...</html>
0 голосов
/ 03 августа 2011

что если я пойду на шаг 10

register.php? Тип = первый шаг & = 10

вам нужно указать действительные шаги и типы, например

if($_GET['type'] == "first") { do something }

if($_GET['step'] == 1) { do something }

использование empty () не очень хорошая идея

0 голосов
/ 03 августа 2011

Проблемы:

  1. цикл перенаправления - скажем, ссылка выглядит так, когда она отображается: AB Когда пользователь щелкает ее, он переходит на URL: http://yourhostname/register.php?id=1234 CЭто третье предложение в register.php.$ Product_id = 1234.D. Вы перенаправляете браузер пользователя на http://yourhostname/register.php?id=1234. E. Браузер пользователя идет туда, и опыт в основном идет прямо к C. Снова и снова и снова.

  2. ВторойМетод не показывает HTML-код, потому что он не должен - перенаправление - это последнее, что вы должны отправить в ответ на любой запрос страницы - вы правильно используете "exit".

Решение. Почему вы вообще перенаправляете?Вы можете заменить весь блок следующим образом:

<?php
$type = 'first';
$step = 1;
$productId = null;

if (!empty($_GET['type'])) {
   $type = $_GET['type'];
}
if (!empty($_GET['step'])) {
    $step = $_GET['step'];
}
if (!empty($_GET['id'])) {
    $product_id = $_GET['id'];
}

... now add your business logic code
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...