使用会话的多步注册表PHP / MySql

时间:2012-02-13 12:10:56

标签: php mysql forms session registration

我正在尝试为我的网站实施两步注册表单,其中我使用了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;

     ");
  }
?>

第二步基本上更新了在第一步中填充空白值的字段,以便完成注册。

第一步已经有效,并且可以将值添加到数据库中,但是,我在第二步更新空白值时遇到问题。

我觉得我的会话使用可能会出现问题,以便从第一步获取新生成的ID,但我无法理解。

1 个答案:

答案 0 :(得分:2)

你在做:

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

第二行可能永远不会被执行,因为你在它之前进行重定向。我说MAY因为它可能会被执行。您必须在所有重定向后添加exit();以防止进一步执行脚本。

另一件事:

永远不要使用@来抑制PHP中的警告。几乎不需要@。所以不要这样做:

@$_SESSION['volunteerID'];

你应该这样做:

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

我在你的例子中看不到它,但确实阻止了SQLi漏洞吗?