【发布时间】:2014-02-04 22:28:39
【问题描述】:
好的,所以问题是,当提交此表单并且有一些输入字段留空时,空白数据将写入数据库,并且因为我不希望每个字段的重复输入第二个填写除非他们将不同的字段留空,否则无法提交。
我不想这样做,所以人们必须填写所有字段,因为不是每个人都会拥有每个字段要求的用户名。
if(isset($_POST["signupbtn"])) {
if ($log_username) {
/// getting data from submitted form into local variables
$x = preg_replace('#[^a-z 0-9]#i', '', $_POST['xbox']);
$p = preg_replace('#[^a-z 0-9]#i', '', $_POST['psn']);
$s = preg_replace('#[^a-z 0-9]#i', '', $_POST['steam']);
$ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR'));
// DUPLICATE DATA CHECKS FOR GAMER PROFILES
$sqli = "SELECT username FROM player WHERE xbox='$x' LIMIT 1";
$query = mysqli_query($db_conx, $sqli);
$x_check = mysqli_num_rows($query);
// -------------------------------------------
if ($x_check > 0){
echo "Xbox Gamer-Tag already linked to a user on this website";
exit();
} else if (is_numeric($x[0])) {
echo 'Xbox Gamer-Tag cannot begin with a number';
exit();
}
$sqli = "SELECT username FROM player WHERE psn='$p' LIMIT 1";
$query = mysqli_query($db_conx, $sqli);
$p_check = mysqli_num_rows($query);
// -------------------------------------------
if ($p_check > 0){
echo "PSN User already linked to a user on this website";
exit();
} else if (is_numeric($p[0])) {
echo 'PSN User cannot begin with a number';
exit();
}
$sqli = "SELECT username FROM player WHERE steam='$s' LIMIT 1";
$query = mysqli_query($db_conx, $sqli);
$s_check = mysqli_num_rows($query);
// FORM DATA ERROR HANDLING
if ($s_check > 0){
echo "Steam account already linked to a user on this website";
exit();
} else if (is_numeric($s[0])) {
echo 'Steam account cannot begin with a number';
exit();
} else { $sqli = "INSERT INTO player (id, username, xbox, psn, steam, ip, created, lastupdated, notecheck)
VALUES ('$id','$log_username','$x','$p','$s','$ip',NOW(),NOW(),NOW())";
$query = mysqli_query($db_conx, $sqli);
echo "Gamer Profiles Updated";
}
exit();
if (!file_exists("p_player/$log_username")) {
mkdir("p_player/$log_username", 0755);
}
}
}
上面是 php,它工作正常,它将信息写入表没有问题,除了它还将空白数据写入数据库的事实。如果有人能指出我正确的方向,甚至解决我的问题,我将不胜感激。我已经查看了整个谷歌,但似乎找不到任何东西,因为我找到的所有答案都不完全是我的意思,而且由于我是 PHP 新手,因此任务似乎更难找到我正在寻找的正确答案.感谢您花时间阅读本文。
【问题讨论】:
-
你是说你做了一个可以为空的、唯一的列吗?
-
是的,在提交此表单时,空白字段会变成一个唯一字段,这样其他人就无法提交相同的空白字段,因为空白字段已被占用
-
如果允许该字段为空,为什么该字段是唯一的,这没有意义?
-
我知道是对的。我个人认为,如果一个字段留空,那么该行、列或任何内容都不会写入数据库,因为它是空白的,但据我发现并非如此,需要忽略空白字段,因此不会使用空白数据写入
-
您要么需要在插入之前检查以确保该字段不为空,要么您需要允许该字段上的重复项。据我所知,您正在寻找某些应用程序的所有用户名。所以你我会允许重复,并对表进行查询以确保该列确实包含相同的用户名。