2017-10-18 71 views
0

所以主要的問題是,當我在post []之後進行一些查詢或者其它只是在php的主代碼中(而不是在函數中)它可以完美地工作很好.. 但是,當我嘗試,並有一個PHP函數內的查詢,它從來沒有工作,有點隱藏任何其他代碼在頁面的其餘部分...我有幾個div後,PHP和SQL查詢代碼,他們只是不顯示當我嘗試通過函數來​​查詢..當php函數內部的SQL查詢不起作用

<script type="text/javascript"> 
    function callPhpVoteAdd(name) { 
     var result = <?php voteAdd(name); ?>; 
     alert(result); 
     return false; 
    } 
</script> 
<?php 
echo '</br>'; 
$allsql = "SELECT * FROM voting ORDER BY votes DESC"; 
$result = mysqli_query($conn, $allsql); 
if (mysqli_num_rows($result) > 0) { 
    // output data of each row 
    while($row = mysqli_fetch_assoc($result)) { 
     $name = $row["name"]; 
     $votes = $row["votes"]; 
     echo '<form method="post"> 
     name: "' .$name. '" - votes: "' .$votes. '" <input type="submit" name="'.$name.'" value="'.$name.'" onclick="callPhpVoteAdd(this.name)"/><br> 
     </form>'; 
    } 
} 
function voteAdd($name) { 
    if($conn->query("UPDATE voting SET votes = votes + 1 WHERE name = '".$name."' ") === TRUE) { 
     echo "<script>alert('fuck yeah');</script>"; 
    } 
    echo "shit"; 
} 

所以按下按鈕調用JS函數,該函數調用PHP函數

+2

添加您的代碼,下次不要忽略規則。 – svgrafov

+0

@svgrafov謝謝編輯 –

+0

瞭解如何使用參數。篡改查詢字符串可能會導致語法錯誤和SQL注入漏洞。 –

回答

0

我猜猜你誤解了JS和PHP的工作方式。 PHP的作品服務器端,和JS,在你的情況下,客戶端。因此,PHP在發送到瀏覽器之前生成腳本/頁面,所以當JS運行它時,所有<?php ?>已被靜態數據取代。

因此,簡而言之,在加載頁面後,您無法從JS調用PHP函數,這是您嘗試的方式(因爲調用不再存在 - 請檢查源代碼您的瀏覽器)。

您需要要麼:

  • 使用形式的 「動作」 屬性;這會將數據發送到服務器,並調用在「action」中設置的php腳本,您可以在其中處理髮送的數據,然後使用新的/更新的數據重新加載頁面,使用ajax(幾乎相同的事情:這會將數據發送到服務器並調用一個php腳本來處理它們,但不是重新加載頁面,PHP腳本的輸出(包含所需的數據)將被髮送回JS,返回到一個回調函數能夠使用它們來修改頁面)。