【发布时间】:2016-07-23 13:54:30
【问题描述】:
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<input type="text" name="duration" placeholder="Enter duration">
<input type="text" name="budget" placeholder="Enter Budget">
<input type="text" name="keyskills" placeholder="Enter Skills">
<input type="text" name="jobdescription" placeholder="Enter Job Description">
<input type="text" name="edate" placeholder="Click to enter expiry date">
<input type="text" name="cdexmin" placeholder="Enter Minimum Experience">
<input type="text" name="cdexmax" placeholder="Enter Maximum Experience">
<input type="submit">
</form>
<?php
if(isset($_POST['submit'])) {
try {
// Establish server connection and select database
$username = $_SESSION['username'];
$stmt = $db->prepare("SELECT * FROM employer INNER JOIN company ON employer.cid = company.cid WHERE employer.username='$username' ");
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$cid=$row['cid'];
$eid = $row['eid'];
$duration = $_POST['duration'];
$budget = $_POST['budget'];
$keyskills = $_POST['keyskills'];
$jobdescription = $_POST['jobdescription'];
$edate = $_POST['edate'];
$cdexmin = $_POST['cdexmin'];
$cdexmax = $_POST['cdexmax'];
$stmt = $db->prepare("INSERT INTO job(cid,eid,duration,budget,keyskills,jdesc,edate,cdexmin,cdexmax) values('$cid','$eid','$duration','$budget','$keyskills','$jobdescription','$edate','$cdexmin','$cdexmax') ");
$stmt->execute();
echo "JOB POSTED SUCCESSFULLY";
} catch(PDOException $e) {
echo "Error occurs:". $e->getMessage();
}
}
?>
这是我刚刚为试图将值插入数据库的示例表单创建的代码。我的问题是这些值没有进入数据库。
为什么它不起作用?是否有我找不到的语法错误?
页面解析很容易完成,它没有显示任何错误但值没有进入数据库。
【问题讨论】:
-
为您的提交按钮添加一个
name标签。<input type="submit" name="submit"> -
您应该验证所有用户提交的数据,并且您很容易受到 SQL 注入攻击,因为您没有正确使用准备好的语句
-
请注意,
form的action属性中的代码<?php $_SERVER['PHP_SELF'] ?>实际上并没有回显任何内容,从而导致action=""。这是有效的,因为空字符串表示当前页面,但您可能应该将其更改为<?=$_SERVER['PHP_SELF'];?>。 -
AFAIK
PHP_SELF容易出现 XSS。如果您想提交到同一页面,请省略action!