2011-01-19 68 views
1

我有一个PHP脚本内的窗体。我正在使用JavaScript进行验证。调用JavaScript窗体php

<?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("[email protected]", "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,我不能验证表单。

+1

不可能调用JavaScript表单php,但只能从HTML中调用。你首先要弄清楚 – 2011-01-19 12:47:15

回答

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文件?

另外,请注意,如果你使用onsubmit,你不要在一开始使用javascript:,只是:

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

javascript:伪协议仅用于在HTML通常包含链接,就像锚的属性一样。 onsubmit和类似的不接受链接,只是JavaScript代码,所以你不使用它。 (这是如果你这样做主要是无害的,因为巧合的是,它看起来像一个JavaScript 标签,所以代码解析好和运行,但它是错的。)


题外话,但很重要的绝不依赖依靠客户端验证;客户端验证是纯粹是用户体验改进练习(帮助人们向你发送你会接受的东西),从来没有取代服务器端验证。所引用的PHP代码对SQL注入是开放的(甚至是无辜的问题  —如果在其中一个字段中有',会发生什么情况?)。搜索“SQL注入PHP”,找到很多方式如此正确地处理提交的数据。

+0

谢谢。但是我的回声声明是用双引号括起来的单引号和onsubmit属性。现在我想如何使用引用验证函数的参数。 – rdp 2011-01-20 05:23:58

+0

@dilip:您可以使用反斜杠在PHP中避开单引号:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.single – 2011-01-20 08:20:46

0

你并不需要指定javascriptin的onsubmit:

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

,而不是这样做:

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

,我希望你把正确的逃生charaters的字符串。用这个代替:

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

加上好的做法状态,你应该净化你的投入,从来只在JS验证依赖,同时也做服务器端,并永远EEEEEEVER在使用$ _ POST [“什么”]直接在查询,它的该死的危险,处理输入,并尝试从xss中保存自己,主要是sql注入。