2012-02-13 2 views
1

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

Первый шаг:

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; 

    "); 
    } 
?> 

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

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

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

ответ

2

Вы делаете:

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 уязвимости?

+0

Удалось устранить проблему. Кажется, мне пришлось изменить некоторые имена, когда я использовал MAX. Спасибо за помощь и отличный совет по кодированию! – Programmer

+0

NP. Добро пожаловать в SO! – PeeHaa