2016-11-29 90 views
0

我是一个PHP新手,我需要帮助。查询每次在页面加载时运行,而不是当我点击我的按钮时运行。mysql_query自动执行,但不是当onClick

<input type="button" name="button" onclick="<?php 
        $temp_id = $row_RecStudent['stu_id']; 
        mysql_query("UPDATE tbl_studentdetail SET stu_queue = 0 WHERE stu_id = $temp_id"); ?>" value="Unqueue" /> 

这是很沮丧,因为我在一个循环中运行这个按钮,但是当我点击它的每一个按钮加载时间,它会自动运行里面没有的mysql_query。

已解决!检查AnthonyB的答案。

+0

您无法将PHP代码附加到javascript onclick事件中。而不是onclick可以触发ajax调用运行更新 –

+0

你可以按照:http://stackoverflow.com/a/372​​70558/7063928 –

+0

这不是这是如何工作的:**所有**的PHP执行**之前**任何内容都被发送到浏览器,并且**所有内容**在执行**之后**所有内容都被发送到浏览器。你应该阅读一些关于web服务器如何工作的教程。你不应该继续使用'mysql'函数,它们已经被弃用,并且在PHP7中被删除。使用'mysqli'或'PDO' –

回答

1

您应该使用AJAX请求,因为没有重定向或重装。 要使用为例下面,你必须包括jQuery

<!-- data-id is the id you got before -->  
<input type="button" data-id="<?php echo $row_RecStudent['stu_id']; ?>" name="button" class="button-on-click" value="Unqueue" /> 

<script type="text/javascript"> 
    $(function() { 
     //On click on this kind of button 
     $(".button-on-click").on('click', function() { 
      var id = $(this).attr('data-id'); 
      //Send AJAX request on page youraction.php?id=X where X is data-id attribute's value 
      //the ID used in mysql query 
      $.ajax({ 
       url: "youraction.php", 
       method: "GET", 
       data: { 
        id: id 
       } 
      }).done(function() { 
       //Once it is done 
       console.log("OK!"); 
      }); 
     }); 
    }); 
</script> 

在youraction.php

<?php 
//Cast $_GET['id'] to integer to prevent SQL injection. 
//If there is no id given, stop 
if (empty($_GET['id'])) { 
    exit(); 
} 
$id = (int)$_GET['id']; 
mysql_query("UPDATE tbl_studentdetail SET stu_queue = 0 WHERE stu_id = $id"); 

要小心,mysql_ *功能已被弃用。相反,请使用mysqli_*函数或PDO。出于安全原因,你可以使用prepared statement

+0

我非常欣赏这一点。但是在线数据存在一个问题:{ – Kenny

+0

确实我修复了它。由于括号和数据的昏迷而出现错误。现在应该工作。 – AnthonyB

+0

从我的包含ajax示例和警告mysql_ * – e4c5

3

查询每次在页面加载时运行,而不是当我单击我的按钮时运行。

这是因为onclick事件通常在客户端脚本的浏览器中执行,这通常意味着JavaScript。你真正需要的是

<input type="button" name="button" onclick="js_function()" value="Unqueue" /> 

凡js_function是一个JavaScript,这将使一个Ajax请求的页面或者干脆安排将提交表单。你在做什么就是使onclick等于PHP代码片段的结果,这显然发生在服务器端,并且完全没有任何与用户单击按钮有关的事情。

+0

PHP是一种服务器端语言。这意味着它仅在将HTML返回给客户端之前执行一次。 JavaScript在这里是客户端语言。这意味着它由浏览器执行(而不是由服务器执行)。 在你的情况下,PHP执行查询“UPDATE ...”,然后返回html。 正如@ e4c5所说的,你想要做一个Ajax请求来做到这一点。 AJAX请求会向您的服务器发送HTTP请求,并且您的服务器将执行更新查询。 – AnthonyB

+0

谢谢@AnthonyB的评论。e4c6是Caro-Kann,而我的喜好是西西里语 – e4c5

+0

我没有理解国际象棋的参考,但我修正了我的评论。 您可以在服务器端代码中添加AJAX请求示例(可能使用jQuery),以便您的答案更有用。 – AnthonyB

0

请注意,您应该提及onClick事件的Javascript功能。你不能在这里写PHP脚本。

解决此问题的一种方法是创建一个包含查询的单独PHP文件。

// page1.php 

<a href="action.php?stu_id=<?php echo $row_RecStudent['stu_id'] ?>">Unqueue</a> 

// action.php 

<?php 
    $temp_id = $_GET['stu_id']; 
    mysql_query("UPDATE tbl_studentdetail SET stu_queue = 0 WHERE stu_id = $temp_id"); 
    header("Location:page1.php"); 
?>" 
+0

使用链接不是一个坏主意,而不是使用AJAX请求。但它会导致重新加载页面。如果这不是问题,您可以使用它。但有时候,重装是一个问题。 – AnthonyB