1

*更新しました

問題は、複数の変数があり、php エコーを渡すことができないことです。「競合のため、php内でスクリプトを実行することはできません

<?php
.....other stuff

 $i=0;
 while ($i < $num) {

$id=mysql_result($result,$i, "StudentID");
$first=mysql_result($result,$i,"First");
$last=mysql_result($result,$i,"Last");
$date= date("Y.m.d");
echo "<div id=\"list\"><div id=\"id\">$id</div><div id=\"name\"> $first $last  
<button onclick=\"addHit($id,$first,$last,$classname,$day,$times,$date)\">Checkin</button></div></div>  ";

$i++;
}

echo"</div></div></div></div>";

?>
<script>
function addHit(id, first, last, classname, day, times, date)
{
$.ajax({
   type: "POST",
   url: "checkinuser.php",
   data: "id=id&first=first&last=last&classname=classname&day=day&times=times&date=date",
   success: function(msg){
     alert( "Data Saved: " + msg ); //Anything you want
   }
 });
}
</script>
4

6 に答える 6

3

他の人が述べたように、PHP を HTML に直接含めることはできないため、PHP コード ブロックでこれらすべての変数をエスケープする必要があります。ただし、これが私のコードである場合は、JSON エンコードされたパラメーターを使用できるように、少しリファクタリングすることを検討します。

<?php
    $rawData = array('id'=>$id, 'first'=>$first, 'last'=>$last, ... );
    $hitData = json_encode($rawData);
?>

<button onclick="addHit(<?php echo $hitData ?>)">Checkin</button>

function addHit(inputData)
{
    $.ajax({
        type: "POST",
        url: "checkinuser.php",
        data: inputData
        success: function(msg) {
            alert( "Checked In! " + msg ); 
        }
    });
}

あなたの編集に応じて、パラメーターをそのままにしたい場合は、while ループを変更します。

<?php
$i=0;
while ($i < $num) {

    $id=mysql_result($result,$i, "StudentID");
    $first=mysql_result($result,$i,"First");
    $last=mysql_result($result,$i,"Last");
    $date= date("Y.m.d");
?>
<div id='list'>
    <div id='id'>
        <?php echo $id?>
    </div>
    <div id='name'>
        <?php echo "$first $last" ?>
        <button onclick='addHit( <?php echo "$id,$first,$last,$classname,$day,$times,$date" ?> )'
            Checkin
        </button>
    </div>
</div>

<?php 
    $i++;
}
?>

ここでの目標は、読み書きを容易にすることです。そのため、静的コード (HTML など) を動的コードからできるだけ分離することは良いことです。大きな利点の 1 つは、引用符のエスケープについて心配する必要がないことですが、欠点はかなりの数の<?php>ブロックがあることです。

また、これらすべての div に id='id' を設定していることにも注意してください。これは、特定のページで ID を一意にする必要がある場合にすべての ID を共有するため、機能しません。あなたもそこに行きたいと思うでしょうecho $id

同様に、これをecho"</div></div></div></div>";PHP ブロックの外に移動し、HTML のままにしておく必要はありません。

最後に、JavaScript では、データ パラメータはリテラル文字列です。

"id=id&first=first&last=last&classname=classname&day=day&times=times&date=date"

id は文字通り「id」、first は「first」などになるため、これは機能しません。

上記のメソッド (パラメーター全体を渡す) を使用するか、データ パラメーターとして渡すオブジェクトを構築する必要があります。 .ajax()オブジェクトを取るので、それをオブジェクトにして渡します。

function addHit(id, first, last, classname, day, times, date)
{
inputData = { id: id, first: first, etc, etc}
$.ajax({
   type: "POST",
   url: "checkinuser.php",
   data: inputData,
   success: function(msg){
     alert( "Data Saved: " + msg ); //Anything you want
   }
 });
}
于 2012-08-16T22:25:44.993 に答える
2

データが似ているべきではありません:

data: "id="+id+"&first="+first+"&last="+last+"&classname="+classname+"&day="+day+"&times="+times+"&date="+date,

次の形式も使用できます。

data : { id : id, first : first, last : last, classname : classname, day : day, times : times, date : date }

プラス mimiz が言ったこと。

于 2012-08-16T22:15:07.787 に答える
0

PHP変数を他のコードに直接挿入することはできません。それらを試してみてくださいecho

<button onclick=\"addHit('<?php echo $id.","$first.",".$last.",",$classname.",".$day.",".$times.",".$date; ?>')\">Checkin</button>
于 2012-08-16T22:11:52.580 に答える
0

これを変更してみてください:

type: "POST",

このため:

type: "GET",

URL で渡されるため、変数を渡して GET によって PHP コードで受け取る必要があります。

于 2012-08-16T22:19:13.930 に答える
0

これを試して :

<button onclick=\"addHit(<?php echo " '$id', '$first' ,'$last','$classname','$day', '$times','$date'"; ?>)\">Checkin</button>

よろしく;

ミミズ

于 2012-08-16T22:13:22.383 に答える
-1

addHit('$id,$first,$last,$classname,$day,$times,$date') は addHit($id,$first,$last,$classname,$day,$times,$date) でなければなりません

(ムサにtnx)

data: "id=id&first=first&last=last&classname=classname&day=day×=times&date=date" は data: "id=$id&first=$first&last=$last&classname=$classname&day=$day×=$times&date=$date" でなければなりません

于 2012-08-16T22:15:32.377 に答える