我正在编写一个在服务器上运行的PHP页面并接受一些POST参数,并在使用REGEX验证它们之后将它们添加到服务器。出于某种原因,我的服务器(使用WAMP服务器)在代码成功运行后以及在我最终重定向到页面后显示空结果集。
我认为它可能是我的代码,但它也可能是服务器的设置方式,目前,我的所有列都是“int(11)”类型,我不知道选择哪种类型。 / p>
<?php
if(isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["pnumber"])){
$name = $_POST["name"];
$number = $_POST["pnumber"];
$email = $_POST["email"];
$db = new PDO("mysql:dbname=daythree", "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if( preg_match("/^[0-9]{10}$/", $number) &&
preg_match("/^[A-Za-z]{2,}[\sA-Za-z]*$/", $name) &&
preg_match("/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/", $email)){
$sql = "INSERT INTO daythree ('name', 'email', 'number') VALUES ('. $name .', '. $email. ', '. $number .')";
header("Location: evilmasterminds.php");
die();
}
}
感谢并为任何麻烦道歉。
答案 0 :(得分:0)
未经测试但是当您使用PDO时可能更像以下内容 - 它至少应该指向正确的方向。
if(isset($_POST["name"],$_POST["email"],$_POST["pnumber"])){
$name = $_POST["name"];
$number = $_POST["pnumber"];
$email = $_POST["email"];
try{
$db = new PDO("mysql:dbname=daythree", "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if( preg_match( "/^[0-9]{10}$/", $number ) &&
preg_match( "/^[A-Za-z]{2,}[\sA-Za-z]*$/", $name ) &&
preg_match( "/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/", $email ) ){
$sql='insert into `daythree` (`name`,`email`,`number`) values (:name,:email,:number);';
$stmt=$db->prepare($sql);
$stmt->execute(array(
':name' => $name,
':email' => $email,
':number' => $number
));
exit( header("Location: evilmasterminds.php") );
}
}catch( PDOException $e ){
exit('Error: '.$e->getMessage());
}
}
至于列类型name
和email
几乎肯定是varchar
而number
可能是int
,具体取决于您收到的数字中使用的实际格式 - 再次varchar列可能更合适。
更新: 代码更改为考虑@riggsfolly关于异常的点