我正在尝试为我的网站实施两步注册表单,其中我使用了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,但我无法理解。
答案 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漏洞吗?