我想为从数据库中检索到的每一行都有一个“ Make admin”按钮。此按钮应使指定的用户通过AJAX成为管理员。想法是使每个按钮的ID等于该行提取的电子邮件,并为每个按钮分配一个onclick ajax。 Ajax应该发送附有特征的电子邮件,该电子邮件将更新用户类型列并将其设置为“ ADMIN”。
while($row = mysqli_fetch_array($result)){
//show all data using <td>
$email = $row['email'];
echo "<td><button id=".$row['email'].">Make Admin</button></td>";
echo "<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>";
echo "<script type='text/javascript'>
$(document).ready(function(){
$('#$email').click(function(){
$.ajax({
type: 'GET',
url: 'makeadmin.php',
data: ({email: '".$row['email']."'}),
datatype: 'html',
success: function(response){
$('#makeadmin').html(response);
//alert(response);
},
error:function(exception){alert('Exeption:'+exception);}
});
});
});
</script>";
}
上面的代码在控制台中显示以下错误:
Error: Syntax error, unrecognized expression: #admin@gmail.com
答案 0 :(得分:1)
请尝试制作类似这样的内容 在此行
$('#$email').click(function(){
替换为
$('#".str_replace(array('@', '.'), array('_','-'), $email)."').click(function(){
并对<td>
echo "<td><button id=".str_replace(array('@', '.'), array('_','-'), $row['email']).">Make Admin</button></td>";
答案 1 :(得分:1)
像'#'和'。您不能在命名HTML标签ID或类时使用“ @”。另外,id的值也没有引号。
您可以采取哪些措施解决此问题:
使用自定义HTML标记属性存储电子邮件地址。
将类分配给按钮,并将click事件绑定到该类。这将允许您将js代码放在单独的JS文件中。
因此代码应如下所示:
HTML
while($row = mysqli_fetch_array($result)){
//show all data using <td>
$email = $row['email'];
$id = $row['id'];
echo "<td><button id='user_".$id."' class='make_admin' email='".$email."'>Make Admin</button></td>";
}
JS
$(document).ready(function(){
$('.make_admin').click(function(){
$.ajax({
type: 'GET',
url: 'makeadmin.php',
data: ({email: $(this).attr('email')}),
datatype: 'html',
success: function(response){
// UI changes
//alert(response);
},
error:function(exception){alert('Exeption:'+exception);}
});
});
});