你如何检查textarea是否为空

时间:2011-11-27 04:02:33

标签: php

我有一个包含三个文本输入和一个文本区域的表单。在处理表单的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标签中的命名属性未正确处理的事实?谁知道这里出了什么问题?

3 个答案:

答案 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)或使用预准备语句(首选方法)(或者就此问题进行任何查询)。