Многоэтапная форма регистрации PHP / MySql с использованием сессий - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь реализовать двухэтапную регистрационную форму для моего сайта, где я использовал 2 отдельные страницы для получения информации от пользователя.

Первый шаг:

if($submit)
{
    $connect = mysql_connect("localhost","root","");
    mysql_select_db("mydb");
    $queryreg = mysql_query("INSERT INTO volunteerbio VALUES (<my insert values>)");
}
//gets the latest id added
$query = mysql_query("SELECT MAX(volunteerID) FROM volunteerbio");
$numrows = mysql_num_rows($query);

if($numrows!=0)
{
    while($row = mysql_fetch_assoc($query))
    {
        $dbaccountID = $row['volunteerID'];
    }
    header("Location: http://localhost/RedCrossCaloocan/registration2_volunteer.php");
    $_SESSION['volunteerID']=$dbaccountID;
}
}
?>

Первый шаг заключается в том, что он создает полную строку таблицы, в которой значения, необходимые для второго шага, временно останутся пустыми, пока они не будут обновлены на следующем шаге.

Второй шаг:

<?php
  session_start();
  $idnum = @$_SESSION['volunteerID'];
  $connect = mysql_connect("localhost","root","");
  mysql_select_db("mydb");

if($submit)
{
  $updateSkills = mysql_query("

     UPDATE volunteerbio
     SET medicalSkillRating = $medicalRating,
         electronicsSkillRating = $electronicRating,
         errandSkillRating = $errandRating,
         childCareSkillRating = $childCareRating,
         counsellingSkillRating = $counsellingRating,
         officeSkillRating = $officeRating,
         communicationSkillRating =$communicationRating,
         carpentrySkillRating = $carpentryRating
     WHERE volunteerID = $idnum;

     ");
  }
?>

Второй шаг в основном обновляет поля, которые были заполнены пустыми значениями во время первого шага, чтобы завершитьрегистрация.

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

IЯ чувствую, что может быть проблема с использованием моих сеансов, чтобы получить вновь сгенерированный идентификатор с первого шага, но я просто не могу понять это.

1 Ответ

2 голосов
/ 13 февраля 2012

Вы делаете:

header("Location: http://localhost/RedCrossCaloocan/registration2_volunteer.php");
$_SESSION['volunteerID']=$dbaccountID;

Вторая строка МОЖЕТ никогда не выполняться, потому что вы делаете перенаправление перед ней. Я говорю МОЖЕТ, потому что это МОЖЕТ быть выполнено. Вы должны добавить exit(); после всех перенаправлений, чтобы предотвратить дальнейшее выполнение скрипта.

Другое дело:

Никогда не подавляйте предупреждения в PHP, используя @. @ почти никогда не нужен. Поэтому вместо того, чтобы делать:

@$_SESSION['volunteerID'];

Вы должны сделать:

if (isset($_SESSION['volunteerID'])) {
    $idnum = $_SESSION['volunteerID'];
} else {
    // something went wrong???
}

Я не вижу этого в вашем примере, но можно ли предотвратить уязвимости SQLi?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...