我有一个包含三个文本输入和一个文本区域的表单。在处理表单的php页面上,我想首先检查以确保用户在处理表单之前输入了某些内容(输入字段不为空)。我将在下面提供表单处理页面的框架。 *(我通过省略表单本身来节省空间和时间,但是文本输入字段具有以下名称属性“name”,“company”,“email”,而textarea字段的name属性是“message”)我将我会尽力在代码注释中更详细地解释代码。
<?php
// Turn on output buffering. Allows for headers to be called anywhere on script. See
// pg228 Ulman.
ob_start();
if (isset($_POST['submit'])){
// Initialize a session to keep tract of error and success messages:
session_start();
// Define a session variable that keeps tract of how many times user
// accesses page.
$_SESSION['views'] = 1;
// Connect to the database.
require('config/config.php');
//Check for errors.
//Check to make sure they entered their name.
if (!empty ( $_POST['name'])){
$a = TRUE;
}
else {
$a = FALSE;
//This variable will be echoed on the form if field is missing a value
$_SESSION['name'] = '*Please enter a valid name.';
}
//Check to make sure they entered their company name.
if (!empty ( $_POST['company'])) {
$b = TRUE;
}
else{
$b = FALSE;
//This variable will be echoed on the form if field is missing a value
$_SESSION['company'] = '*Please enter the name of an institution you are affiliated with.';
}
//Check to make sure email is valid.
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST['email'])) {
$c = TRUE;
}
else {
$c = FALSE;
//This variable will be echoed on the form if field is missing a value or email format is wrong.
$_SESSION['email'] = '*Please enter a valid email address.';
}
//Check to make sure they entered their message.
if (!empty ( $_POST['message'])) {
$d = TRUE;
}
else {
$d = FALSE;
//This variable will be echoed on the form if field is missing a value
$_SESSION['message'] = '*Please enter your message.';
}
//If no errors
if (empty($_SESSION['name'] ) && empty($_SESSION['company'] ) && empty($_SESSION['email'] ) && empty($_SESSION['message'] ) ) {
//Insert data into database.
$query = " table... ";
$result = mysql_query($query) or die("Data could not be inserted into table because: " .mysql_error());
if (mysql_affected_rows() == 1) {
// Display success message
//This variable will be echoed on the form if everything is filled out correctly.
$_SESSION['sent'] = "Your email has been sent. We will get back to you shortly.";
// Display contact page (the page containing the form)
header("Location: contact_page.php");
exit();
}
else{
die(mysql_error());
}
//Display error messages.
}
else {
// if errors array is not empty
// Display page (page containing the form)
header("Location: contact_page.php");
exit();
}//End of if there are errors.
}//End of if submit.
?>
就是这样。一切正常,除了检查textarea(名为“message”)是否为空的部分不起作用。如果单击“提交”按钮而不填写任何字段,则会为文本输入字段而不是文本区域字段打印相应的错误消息。如果我正确填写所有字段并将“消息”字段留空,则表单将被正确处理,并且值将被放入数据库中并打印出成功消息。当我输入“message”textarea字段的值时也是这种情况。现在我试了一下。我将textarea更改为文本字段,当我将此字段留空时,$ _SESSION ['message']变量最终得到了回显。显然,问题来自于textarea标签中的命名属性未正确处理的事实?谁知道这里出了什么问题?
答案 0 :(得分:5)
要检查是否输入了数据,您应该以这种方式使用strlen。
if (!strlen(trim($_POST['textarea'])))
修剪将删除发布的所有前导和尾随空白字符。
确保正确发送表单数据。
您可以确保在页面开头插入var_dump($_POST)
,以便检查发布的所有内容。
答案 1 :(得分:3)
如何检查
textarea
是否为空?
如果为空,则表示其无内容,请使用strlen()
检查用户输入。
如果您的empty定义仅包含空格内容,请先在用户输入上执行trim()
。
如果字符串为empty()
,您不希望使用0
,在这种情况下为到PHP ,但不一定是您的应用程序。
答案 2 :(得分:3)
你可以使用几种不同的方式
$msg = $_POST['message'];
if ($msg == "") { // Error }
if (!$msg) { // Error }
if (strlen($msg) == 0) { // Error }
等等......
您可能希望使用trim
删除空格,因为它们可能会放入大量空格,并且可能仍会验证。
此外,不回答您的问题,但不使用ereg
使用preg_match
- ereg
已被弃用,建议不再使用。您还希望在插入输入之前转义(mysql_real_escape_string
)或使用预准备语句(首选方法)(或者就此问题进行任何查询)。