我已经使用php编写了一个带有服务器端验证的表单,现在我的目标是将我表单中的所有输入插入到我的数据库(已经有它的表)中。以下是我的语法:
//Example of one of my validations (for postcode input)
if (empty($_POST["postcode"])) {
$postcodeErr = "";
} else {
$postcode = test_input($_POST["postcode"]);
if(!preg_match("/^[0-9]*$/", $postcode)) {
$postcodeErr = "Only numeric characters";
}
else if (strlen($postcode) != 4) {
$postcodeErr = "Must be 4 digits in length";
}
}
}
//Connect to database server
$conn = mysql_connect("localhost", "-----", "------");
mysql_select_db("-------", $conn)
or die ('Database not found ' . mysql_error() );
// The SQL statement is built
$sql = "INSERT INTO Customer (name, address, suburb, state, postcode)
VALUES ('$_POST[name]', '$_POST[address]', '$_POST[suburb]', '$_POST[$state]', '$_POST[postcode]')";
if (!mysql_query($sql,$conn))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($conn)
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?> //end of my php tag
当我运行我的表单时,我得到一个解析错误,说我有一个意外的T_FUNCTION。我知道上面有很多(试图让它变得尽可能简单)但我似乎无法解决修复错误的问题,如果我这样做,我只会得到另一个错误。我正确编写代码吗?通常情况下,当别人看你的工作时,这是最好的。非常感谢帮助!
答案 0 :(得分:1)
post变量中缺少$_POST['name']
和所有其他变量的引号。
尝试
$name=$_POST['name'];
$address=$_POST['address'];
$suburb=$_POST['suburb'];
$state=$_POST['$state'];
$postcode=$_POST['postcode'];
$sql = "INSERT INTO Customer (name, Address, suburb, state, postcode)
VALUES ('$name', '$address', '$suburb', '$state', '$postcode')";
答案 1 :(得分:1)
你还有一个额外的数据库连接支持,使用mysqli预处理语句以获得更好的安全性。
$db = new mysqli('localhost', 'root', '', 'database');
if ($db->connect_errno) {
echo "failed to connect to the database"; die();
}
$name=$_POST['name'];
$address=$_POST['address'];
$suburb=$_POST['suburb'];
$state=$_POST['$state'];
$postcode=$_POST['postcode'];
$stmt = $db->prepare("insert into `Customer` (name, Address, suburb, state, postcode) VALUES (?,?,?,?,?)";
$stmt->bind_param('sssss', $name, $address, $suburb, $state, $postcode);
$stmt->execute();
echo $stmt->affected_rows."record added";
答案 2 :(得分:0)
mysql_close($conn)
之后需要;
...
这就是为什么它之后的功能是意外的
答案 3 :(得分:-2)
与弗雷德同意,似乎在//Connect to database server
之上有一个额外的结尾括号,这打破了代码。
如果没有解决问题,请复制/粘贴完整的错误消息。
编辑:
else if (strlen($postcode) != 4) {
需要
} else if (strlen($postcode) != 4) {
在if语句的末尾有两个额外的括号(在//Connect to database server
上方)