0

重複の可能性:
php変数をjavascriptに渡す

ユーザーがクリックしたクリック数をデータベースに保存されたデータと比較したい。HTML の「クリック数」の値を渡して PHP の「カウント数」と比較する方法がわかりません。

<html>
<script type="text/javascript">

 var count = 0;

 function countClicks() 
 {          
    count = count + 1;
    document.getElementById("clicks").innerHTML = count;
 }  
</script>

<?php
    if(empty($counts)){
?>

<script type="text/javascript">

    alert("Count is empty!!");

</script>   

<?php

} else { 

$data = mysql_query("SELECT clicks FROM customerdetails WHERE customer_username='$username'"); 
$info = mysql_fetch_array($data);
//compare $data with the clicks
echo 'same!';
}
?>

<body>
<a href="javascript:countClicks();">Count Clicks</a>
<input type="button" onclick=countClicks() value="Click"/>
<p id="clicks">0</p>
</body>
</html>
4

2 に答える 2

2

PHP と Javascript を間違った方法で使用しています。PHPはサーバーサイド言語です。つまり、ページがブラウザに読み込まれる前に実行されます。

JavaScript クリック カウンターを作成し、その値を非表示のフォーム フィールドに入力する必要があります。次に、送信ボタンを使用して情報をサーバー (PHP) に送信します。次に、PHP にデータベースからのチェックと選択を行わせ、回答を返します。

もう 1 つの解決策は、javascript AJAX を使用することですが、最初に上記を試すことをお勧めします。

于 2013-01-07T15:19:11.107 に答える
0

続行する最善の方法は、非同期 JavaScript および XML呼び出し (AJAX) を行うことです。PHPはサーバー側の言語であり、HTML がビルドされてブラウザーに表示される前 (つまり、Javascript の前) に実行されます。

したがって、Javascriptが変数とデータを PHP と交換する唯一の方法は、AJAX 呼び出しを行うことです (フォーム送信またはセッション変数Cookieを使用してページをいつでもリロードできますが、これは最善の方法ではありません。あまりにも頻繁に繰り返されます。

AJAX では、両方の値をチェックして必要なものを返す別の PHP ページを作成できます。応答は、Javascript 変数、またはJSONに格納することもできます。

AJAX についてもっと読むことをお勧めします。また、PHP とは何か、どのように使用するかを理解することをお勧めします。


編集:あなたのコメントを読んだ後、ここに簡単な例を置くことにしました。

Javascript (HTML ページ内)

var xmlhttp;

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
     /*Here you should do what you want. 
      xmlhttp.responseText is the content of your PHP answer! */ 

     var result = xmlhttp.responseText;
     //I am parsing a JSON response, which is a specific, universal language
     //To exchange data without losing formatting or anything else.
     result = JSON.parse(result);

     /* The we use the name of our PHP array key as a property 
        Here it is "response" (see PHP json_encode line)       */
     alert(result.response);
  }
}
/* Change this URL for the PHP filename. we use the GET method to send data. */
/* You should always use the POST method when sending sensitive data */
xmlhttp.open("GET","getUserClicks.php?clicks="+count+"&username="+username,true);
xmlhttp.send();

PHP (ここでは getUserClicks.php という名前のファイルです)

<?php
if(!isset($_GET['username']) || !isset($_GET['clicks']))
    die("Error");

$username = $_GET['username'];
$jsClicks = $_GET['clicks'];
$phpClicks = null;

#I am using the mysqli class to execute the query since mysql is deprecated in PHP5.
$data = mysqli_query("SELECT clicks FROM customerdetails WHERE customer_username='$username'"); 

while($row = mysqli_fetch_array($data))
{
    $phpClicks = $row['clicks'];
}

#If your "IF" only contains one line, you don't need brackets.
#Otherwise they are needed.

if($phpClicks == null)
    die("Could not get the number of clicks of the desired username");

#This is the string PHP will send to Javascript.
$response = "Same number of clicks!";

#If phpClicks is different and has the same type as jsClicks...
if($phpClicks !== $jsClicks)
{
    $response = "Number of clicks changed!";
    if($jsClicks > $phpClicks)
    {
        #Updates the number of clicks the user has done.
        $mysqli_result = mysqli_query("UPDATE customerdetails SET clicks=$jsClicks WHERE customer_username='$username';"); 
    }
}

echo json_encode(array('response'=>$response));

?>

関数やメソッドが何をするかわからない場合は、必ず調査してください (例: isset)。

于 2013-01-07T15:29:16.360 に答える