6

我想只接受用户的小写和大写字母。

我尝试了下面的代码,它回显了无效的字符消息,但不起作用。我的意思是它不检查。它只是显示消息。有什么帮助吗?

<form action="" method="post">
<input type="text" name="fname">
<input type="submit" value="Send" name="submit">
</form>

更新:这是我必须检查并将名称插入数据库的内容。如果在名称中找到数字,则通过显示错误消息拒绝该名称,否则如果该名称仅包含字母,则将其插入数据库。这就是我想要实现的。

<?php
if ( isset( $_POST['submit'] ) ) { 
$fname = $_POST["fname"];

if(!preg_match ('/^([a-zA-Z]+)$/', $fname)){
echo "Invalid characters";
}

if (empty($fname)) {
echo  '<span> First name is required</span>';
}

else{
$mysqli = new mysqli("localhost", "root", "", "test");
$stmt = $mysqli->prepare("INSERT INTO test (firstname) VALUES (?)");

$stmt->bind_param("s", $fname);
$stmt->execute();

$stmt->close();

$mysqli->close();


}
}
?>
4

5 回答 5

6

如果你只是想检查你可以使用ctype_alpha()但你说你只想接受字母所以如果你选择接受输入你可以:

$fname=preg_replace('/[^a-z]/i','',$fname);

检查后更好

于 2013-02-06T05:01:18.530 回答
5
if(!isset($_POST['fname']) || !ctype_alpha($_POST['fname'])){
  // can i haz alpha letters only?
}

参考

于 2013-02-06T04:50:33.850 回答
1

代码有几个问题,您遇到的一个问题可能是您在同一个 PHP 文件中拥有表单及其处理。这是可能的,但它需要不同的方法。首先,最好将它们分开。

发布的代码发生的情况是,PHP 处理器在没有提交表单时尝试处理表单数据,甚至不检查数据是否存在。现在$fname是未定义的,所以测试总是失败。

测试也是错误的。现在它只检查是否$fname包含至少一个字母。例如,if(!preg_match ('/^[a-zA-Z]+$/', $fname))将测试$fname由一个或多个 Ascii 字母组成而没有其他内容。

于 2013-02-06T07:27:06.553 回答
0

检查与模式不匹配的字符的一般想法[a-zA-Z]是一个很好的想法。

if但是,如果您希望它起作用,那么您状况的“不”部分就在错误的位置。您现在所拥有的只是确保其中的任何单个字符fname都是大写或小写的拉丁字母。

您想将逻辑的“非”部分推入模式:

if (preg_match('/[^a-zA-Z]/', $fname)) {

这会检查其中的任何字符fname是否不是拉丁字母,这就是您要执行的操作。

编辑:您的新更新有一个不同的测试也有效(它似乎来自源代码的更新答案,但您已经从这里的不同答案中获得了几个同样有效的测试)。但是,您更新的帖子清楚地表明,您的问题并不在于测试名称的模式。

您的代码如下所示:

if (/* invalid fname */) {
    echo "Invalid characters";
}

if (/* empty fname */) {
    echo  '<span> First name is required</span>';
}

else {
    /* insert into database */
}

else子句仅取决于if紧接在其前面的 the :检查是否fname为空。换句话说,无论您对 的字符进行检查的结果如何,fname只要它不为空,就将其插入数据库。

解决此问题的一种简单方法是将您的第二个更改ifelseif. 这会将所有三个条件链接在一起,因此只有在未触发打印错误消息的两个else较早条件时才会出现最后一个块。

if (/* empty fname */) {
    echo  'First name is required.';
}

elseif (/* invalid fname */) {
    echo 'Invalid characters';
}

else {
    /* insert into database */
}
于 2013-02-06T04:49:24.783 回答
0

用这个,这给了我正确的答案

if(!preg_match ('/^([a-zA-Z]+)$/', $fname)){
    echo "Invalid characters";
}
else{
    echo "correct";
}
于 2013-02-06T04:47:47.070 回答