我的PHP脚本看起来应该可以工作,为什么不呢?

时间:2015-09-16 21:20:06

标签: php

我正在为我的网站留言。我现在所拥有的是一个基本的HTML表单:

<form action="submit.php" method="post">
  Name: <input type="text" value="Julian Davis" name="name"readonly><br>
  E-mail (Not published) <input type="text" name="email"><br>
  Message: <input name="message" rows="5" cols="40"><br>
  <input type="submit">
</form>

(名称字段是只读的是gag的一部分)。它使用HTTP POST将结果发送到submit.php,如下所示:

<?php

if strlen($_POST["message"]) = 0 {
  echo "You didn\'t type a message. Don't you want people to hear 
  what you have to say?";
}

else if strlen($_POST["message"]) > 499 {
  echo "Messages are limited to 500 characters. Try again.";
}

else{
  echo "Your response has been received. Cheers!";
}
?>

我打算添加一些SQL查询来聚合响应,但首先我希望这个脚本不返回空白页。

我之前没有写任何表格或使用过POST(另外,我对我的elseifs有点不稳定),所以这可能是一些愚蠢的语法,但我看了上下脚本,我可以看不出有什么问题。

(另外,如果有人知道如何使这个表格安全,也许是CAPTCHA,请告诉我!)

1 个答案:

答案 0 :(得分:8)

许多问题:

  1. 所有if语句中都应包含( ... ),整个语法错误!好好学习PHP。

    if (expr)
      statement
    
  2. 第一个应该有==而不是=

    有很多问题可以解答这个问题。请参阅The 3 different equals

    • =是赋值运算符。这意味着,左侧变量被赋予一个新值。
    • 您需要==,这是一个比较运算符。检查左侧和右侧是否相等。
    • ===是严格比较运算符,它检查数据的值和类型。
  3. 最好使用elseif代替else if

    如评论中所述,注意elseif和else if在使用大括号时只会被视为完全相同,如上例所示。使用冒号来定义if / elseif条件时,如果分成两个单词,则不能将else分开,否则PHP将因解析错误而失败。“

  4. 更正后的代码:

    <?php
        if (strlen($_POST["message"]) == 0) {
            echo "You didn\'t type a message. Don't you want people to hear what you have to say?";
        }
    
        elseif (strlen($_POST["message"]) > 499) {
            echo "Messages are limited to 500 characters. Try again.";
        }
    
        else {
            echo "Your response has been received. Cheers!";
        }
    ?>
    

    另外,您的输入语法无效

    <input name="message" rows="5" cols="40">
    

    此类语法适用于<textarea>。即:

    <textarea rows="4" cols="50">
    

    语法为:

    <input type="text" name="input_name" maxlength="4" size="4">
    

    如果您绝对希望<input />大于其他{/ 1}},则需要使用CSS。