我只想接受用户的小写和大写字母。
我尝试了以下代码,它回显了无效的字符消息,但不起作用。我的意思是它没有检查。它只显示消息。有什么帮助吗?
<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();
}
}
?>
答案 0 :(得分:6)
如果你只是想检查一下你可以使用ctype_alpha(),但你说你只想 ACCEPT 字母,所以如果你选择接受输入,你可以:
$fname=preg_replace('/[^a-z]/i','',$fname);
检查后更好
答案 1 :(得分:5)
if(!isset($_POST['fname']) || !ctype_alpha($_POST['fname'])){
// can i haz alpha letters only?
}
答案 2 :(得分:1)
代码存在一些问题,您可能遇到的问题可能是您在同一个PHP文件中使用了表单及其处理。这是可能的,但它需要一种不同的方法。对于初学者来说,最好将它们分开。
发布的代码会发生的事情是PHP处理器在没有提交表单时尝试处理表单数据,甚至没有检查是否存在数据。现在$fname
未定义,因此测试总是失败。
测试也是错误的。现在它只检查$fname
是否包含至少一个字母。例如,if(!preg_match ('/^[a-zA-Z]+$/', $fname))
会测试$fname
是否包含一个或多个Ascii字母而不是其他内容。
答案 3 :(得分:0)
使用这个,这给了我正确答案
if(!preg_match ('/^([a-zA-Z]+)$/', $fname)){
echo "Invalid characters";
}
else{
echo "correct";
}
答案 4 :(得分: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
:检查fname
是否为空。换句话说,无论检查fname
字符的结果如何,只要它不为空,就将其插入数据库。
解决此问题的一种简单方法是将您的第二个if
更改为elseif
。这会将所有三个条件链接在一起,因此只有在未触发打印错误消息的早期条件的两个时才会出现最终else
块。
if (/* empty fname */) {
echo 'First name is required.';
}
elseif (/* invalid fname */) {
echo 'Invalid characters';
}
else {
/* insert into database */
}