簡體   English   中英

如何從 php echo 中的表單調用 javascript 函數?

[英]How to call javascript function from form in a php echo?

波紋管代碼的作用是確保不允許用戶提交評論,除非他使用 $_SESSION['login_user'] 超變量登錄。 但它給了我一個錯誤。 我認為問題是因為我在 onsumbit="return(checkUser())" 中調用了一個 javascript 函數。 那里有問題,但我不知道為什么。

我有以下代碼:

<script type="text/javascript">  
      // notice the quotes around the ?php tag 
      function checkUser() {     
          <?php
          if(isset($_SESSION['login_user'])){
            $isExist = true;

        }
        ?>
        else{
            $isExist= false;
            alert( "Please register first!" );

        }
      var htmlString="<?php echo $isExist; ?>";
      return isExist;
      }
    </script>

...
...

<?php
echo "<form method='POST' onsubmit="return(checkUser());" action='".setComments($connection, $res['post_id'])."'>
    //echo "<form method='POST' action='".setComments($connection, $res['post_id'])."'>
    <input type='hidden' name='uid' value='".$_SESSION['login_user']."'>
    <input type='hidden' name='date' value='".date('Y-m-d H:i:s')."'>
    <textarea name='message'> </textarea><br>
    <button type='submit' name='commentSubmit'>Comment</button>
     </form>";
    getComments($connection, $res['post_id']);

?>

....

如果這不是阻止用戶提交評論的正確方法,那么還有什么方法呢?

除了@RonaldT 所說的,您還需要了解 PHP 代碼在發送到瀏覽器之前是在服務器上執行的。 所以在 Javascript 函數中檢查$_SESSION['login_user']有點傻,因為在用戶刷新頁面之前它總是相同的(只有這樣 PHP 才會重新檢查該值)。

所以你的功能可以像這樣簡化:

<script type="text/javascript">
    // on page load, define a global variable using PHP
    var isLoggedIn = <?php echo isset($_SESSION['login_user']) ? "true" : "false"; ?>;

    function checkUser() {
        // check that global variable every time checkUser() is called in Javascript
        if (!isLoggedIn) {
            alert( "Please register first!" );
        }

        return isLoggedIn;
    }
</script>

請記住,這種“安全性”非常容易被愚弄(任何用戶都可以打開他們的瀏覽器控制台,鍵入isLoggedIn = true;瞧),所以一定要在提交表單時檢查服務器。

或者更好:如果不允許用戶做某事,則不要給他們機會。 如果無論如何都不允許用戶提交表單,為什么還要顯示表單呢?

<?php
if (!isset($_SESSION['login_user'])) {
    echo "Please register to add a comment";
} else {
    echo "<form [...everything else...] /form>";
}

getComments($connection, $res['post_id']);
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM