调用javascript表单php

时间:2011-01-19 12:29:38

标签: php javascript html

我在php脚本中有一个表单。我正在使用javascript进行验证。

<?php

$con = mysql_connect("servername","login","passsword");
if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }

mysql_select_db("dbadminatms", $con);

if (isset($_POST['email']) && isset($_POST['name']) && isset($_POST['comments']))
{
    $sql="INSERT INTO feedback_comments (posted_by, email, comments_text, comment_date)
        VALUES
    ('$_POST[name]','$_POST[email]','$_POST[comments]',NOW())";
    $emailID = $_POST['email'];
    $postedBy = $_POST['name'];
    $message = $_POST['comments'];

    if (!mysql_query($sql,$con))
    {
        die('Error: ' . mysql_error());
    }
    else
    {
        mail( "aaa@bbb.coml.com", "Subject: Comments", $message, "From: $emailID\r\n $postedBy" );
    }
}
    else
{

echo '


<form action="contactus.php" method="POST" id="feedback" onsubmit="javascript:return validate("feedback","name","email","comments");">

                <p id="errorMsg">All fields are required</p>

                <label for="name" class="label" id="nameLabel">Your name: </label><input id="name" type="text" size="30"  name="name" class="field"/>
                <br /><br />
                <label for="email" class="label" id="emailLabel">Your Email id: </label><input id="email" type="text" size="30"  name="email" class="field"/>
                <br /><br />

                    <label for="comments" class="label" id="commentsLabel">Comments:</label>
                  <div id="commentsSection">
                    <textarea name="comments" id="comments" class="ui-corner-all" cols="9" rows="5" tabindex="140"></textarea>
                  </div>

            <p><input type="submit" value="Submit" id="submit"/>&nbsp;<input type="reset" /></p>

        </form>';
}

    mysql_close($con);
?>

Everrything工作正常但我无法使用javascript验证表单。

4 个答案:

答案 0 :(得分:7)

相关摘录如下:

onsubmit="javascript:return validate("feedback","name","email","comments");"

两件事:

  1. 您在属性中使用双引号会提前结束(浏览器只会看到onsubmit="javascript:return validate(",这是无效的,并且会被JavaScript解释器抛出)。在属性值中使用单引号:

    onsubmit="javascript:return validate('feedback','name','email','comments');"
    
  2. 你真的有一个名为validate的JavaScript函数,它直接或通过外部JavaScript文件包含在页面中吗?

  3. 另外请注意,如果您使用onsubmit,则不要在开头使用javascript:,只需:

    onsubmit="return validate('feedback','name','email','comments');"
    

    javascript:伪协议仅用于HTML通常包含链接的位置,与锚点的href属性一样。 onsubmit和类似的不接受链接,只接受JavaScript代码,因此您不使用它。 (如果你这样做的话,这在很大程度上是无害的,因为巧合的是,它在JavaScript中看起来像是一个标签,所以代码解析好了并运行。但这是错误的。)


    偏离主题,但很重要从不依赖客户端验证;客户端验证纯粹用户体验改进练习(帮助人们发送您接受的内容),从不替代服务器端验证。引用的PHP代码对SQL注入是开放的(甚至是无辜的问题 - 如果在其中一个字段中有'会发生什么?)。搜索“SQL Injection PHP”以找到很多方法,以便正确处理提交的数据。

答案 1 :(得分:2)

另外一个好的做法是说你应该清理你的输入,永远不要只依靠JS验证,而且还要服务器,并且永远不要让EEEEEEVER直接在你的查询中使用$ _POST ['whatever'],这该死的危险,处理输入并尝试从xss中保存自己,主要是sql注入。

答案 2 :(得分:0)

您无需在onsubmit上指定javascriptin:

onsubmit="javascript:return validate("feedback","name","email","comments")"

而是这样做:

onsubmit="return validate("feedback","name","email","comments")"

我希望你为字符串添加正确的转义字符。请改用:

onsubmit="return validate(\"feedback\",\"name\",\"email\",\"comments\")"

答案 3 :(得分:0)

使用jquery更好。

jQuery plugin: Validation