我是php的新手,我在这里尝试做的是每当我按下向上箭头按钮时为特定ID(1,10,30 ....)添加+1。
我需要以某种方式将id值(echo $ row [' id'];)添加到mysqli_query()。 有人可以帮忙吗? :)
<?php include("db.php")?>
<?php
$sql = "SELECT * FROM gifs";
$result = mysqli_query ($db,$sql);
?>
<?php
//Fetch data from database
if ($result -> num_rows >0){
while($row = mysqli_fetch_array($result)){
?>
<div><?php echo $row["name"];?></div>
<p id="<?php echo $row['id'];?>">
<?php echo $row['copygif'];?></p>
$add = $row['id']; //i know this dosnt work...
<i onClick="<?php mysqli_query($db,"UPDATE gifs SET rating = rating + 1 WHERE id= $add ");?>"></i>
我如何将($ row [&#39; id&#39;];)翻译成mysqli_query(id =?)
谢谢
答案 0 :(得分:0)
很快拼凑起来展示如何实现目标。您不能像以前那样简单地嵌入sql查询 - PHP代码在页面加载时运行(它是服务器端代码),因此将在您看到页面上的任何内容之前执行。事件click
是一个客户端事件,因此您需要一些机制将请求从客户端发送到服务器 - 通常可以使用ajax或表单提交。下面的代码没有经过测试,所以你可能会发现很少的错误,但这个想法应该有助于解决问题 - 这只是你可以采用的一种方法。
<?php
/* include db connection */
include('db.php');
/* Process form submission */
if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['id'] ) ){
$id=$_POST['id'];
/* sql query for prepared statement */
$sql='update gifs set rating = rating + 1 where id=?;';
/* prepare the sql query */
$stmt=$db->prepare( $sql );
if( $stmt ){
/* bind the placeholder to the id & execute */
$stmt->bind_param('i',$id);
$result=$stmt->execute();
} else {
exit( 'error: failed to prepare sql' );
}
}
/* select recordset for display */
$sql = "select * from `gifs`;";
$result = $db->query( $sql );
?>
<!doctype html>
<html>
<head>
<meta charset='utf-8' />
<title>gifs</title>
<script>
/* assign event listeners to `i` elements */
document.addEventListener('DOMContentLoaded',function(){
var form=document.forms['gifs'];
var id=form.querySelector('input[type="hidden"][name="id"]');
var col=Array.prototype.slice.call( form.querySelectorAll('i.vote') );
col.forEach(function(node){
node.onclick=function(e){
/* set the value of the hidden field to the data-id value of current `i` */
id.value=this.dataset.id;
form.submit();
}.bind( node );
});
},false );
</script>
</head>
<body>
<!-- add a basic form, using POST -->
<form name='gifs' method='post'>
<!-- hidden field for ID value -->
<input type='hidden' name='id' />
<?php
/* display recordset and create `i` elements that will register vote click */
if( $result->num_rows > 0 ){
while( $row = $result->fetch_object() ){
echo "
<div>{$row->name}</div>
<p id='{$row->id}'>{$row->copygif}</p>
<i class='vote' data-id='{$row->id}'>vote</i>";
}
}
?>
</form>
</body>
</html>
答案 1 :(得分:0)
是的,正如@RamRaider在上面的评论中提到的那样,您可能需要在向上箭头按钮上绑定一个函数并在i中传递$ row [&#39; id&#39;],并点击您可以发送此按钮的按钮id通过ajax到服务器并做你要做的。示例可能看起来像,
<?php while($row = mysqli_fetch_array($result)){
?>
<div><?php echo $row["name"];?></div>
<p id="<?php echo $row['id'];?>">
<?php echo $row['copygif'];?></p>
$add = $row['id'];
<i onClick="upButtonClick($row['id'])"></i>
<?php } ?>