1

*更新

问题是有多个变量,我无法通过 php echo。由于“冲突”,我不能只在 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

正如其他人所提到的,您不能直接在 HTML 中使用 PHP,因此您需要在 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)与动态代码分开可能是一件好事。一个很大的优点是您不必像您一样担心转义引号,尽管缺点是有相当数量的<?php>块。

另请注意,您正在为所有这些 div 设置 id='id' ,这将不起作用,因为当 id 在给定页面上需要唯一时,它们都将共享一个 id。你可能也想去echo $id那里。

同样,没有理由将其echo"</div></div></div></div>";移到 PHP 块之外,并将其保留为 HTML。

最后,在您的 javascript 中,您的 data 参数是文字字符串:

"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

尝试这个 :

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

问候;

咪咪

于 2012-08-16T22:13:22.383 回答
0

尝试改变这个:

type: "POST",

为了这:

type: "GET",

您应该通过 GET 传递变量并在 PHP 代码中接收它们,因为它是通过 url 传递的。

于 2012-08-16T22:19:13.930 回答
-1

addHit('$id,$first,$last,$classname,$day,$times,$date') 必须为 addHit($id,$first,$last,$classname,$day,$times,$date)

(tnx 给穆萨)

数据:"id=id&first=first&last=last&classname=classname&day=day×=times&date=date" 必须是数据:"id=$id&first=$first&last=$last&classname=$classname&day=$day×=$times&date=$date"

于 2012-08-16T22:15:32.377 回答