Php 使用两种不同的函数访问sql数据库
我正在为一个项目制作一个电影评级网站,如何做评级系统让我一片空白。如果你知道的话,请告诉我一个正确的方法 这将从url获取电影编号,并在页面中显示相关信息Php 使用两种不同的函数访问sql数据库,php,mysqli,Php,Mysqli,我正在为一个项目制作一个电影评级网站,如何做评级系统让我一片空白。如果你知道的话,请告诉我一个正确的方法 这将从url获取电影编号,并在页面中显示相关信息 <body> <?php global $conn; $conn = mysqli_connect('localhost','root','','filmsdb'); function show() { global $film; global $conn; $film = $_GET['fm']; $sql = "S
<body>
<?php
global $conn;
$conn = mysqli_connect('localhost','root','','filmsdb');
function show()
{
global $film;
global $conn;
$film = $_GET['fm'];
$sql = "SELECT * FROM movies WHERE m_No='$film'";
$ok = mysqli_query($conn,$sql);
$data = mysqli_fetch_array($ok);
$c_r= $data[8];
$c_rc= $data[9];
?>
//displays the movie information and uses radio buttons to get user rating
您的问题是,当页面发回用户评级数据时,DB连接所依赖的两个变量,$conn
和$film
不存在
应用程序的生命周期如下所示:
1) 用户发出初始请求。PHP启动并运行第一个代码块,它向页面回显一些值,页面返回给用户。返回页面后,请求完成,PHP停止执行。由于进程已停止运行,内存中声明的所有变量都将丢失
2) 从PHP脚本返回的页面到达用户的浏览器。用户输入他们的评级并将数据发布回服务器。这是一个全新的要求
3) 新请求到达服务器。PHP再次启动。web本质上是无状态的,因此默认情况下它不记得以前的请求。当然不是任何内存变量中的名称或值——包含它们的进程很久以前就死了,并且与新变量没有关联
因此,如果您有任何值需要在PHP中再次用于第二个请求,您可以再次创建它们,或者在请求数据中接收它们,或者第一个PHP脚本必须将它们存储在可以从中检索它们的持久位置,例如会话变量或cookie或数据库
您发布的代码并不清楚,但可能在第二个请求中,函数act1()
以某种方式被调用,并尝试将数据插入数据库。它失败了,因为在这个新请求中,$film或$conn中都没有任何值
我建议你这样解决:
1) 再次创建您的连接对象,这很容易,并且您需要重新连接到MySQL以满足此请求
2) 您正在评级的电影应该在表单数据中从浏览器传回
这是第一个脚本,用于获取初始电影数据并将分级表呈现到页面
//re-usable function to connect to DB. Maybe move this out to a separate file so all pages can use it.
function getDBConn() {
return mysqli_connect('localhost','root','','filmsdb');
}
function show()
{
$conn = getDBConn();
$film = $_GET['fm'];
$sql = "SELECT * FROM movies WHERE m_No='$film'";
$ok = mysqli_query($conn,$sql);
$data = mysqli_fetch_array($ok);
$c_r= $data[8];
$c_rc= $data[9];
$conn = null;
}
你的最新更新没有显示表单,但我假设它是这样的,有一个额外的电影隐藏字段。周围也应该有合适的表单标签
<input type="radio" value="1" name="rate">
<input type="radio" value="2" name="rate">
<input type="radio" value="3" name="rate">
<input type="radio" value="4" name="rate"><input type="radio" value="5" name="rate">
<input type="hidden" name="film" value="<?php echo $film;?>"/>
<input type="submit" value="Rate" name="rsub">
另外,我知道这只是一个示例项目,但是如果你创建了一个真实的站点,请注意上面关于SQL注入的评论,也不要让你的应用程序和网站以“root”身份登录到你的数据库-只给他们实际需要的特权。说要了解有关SQL注入的语句。即使是这样也不安全!您为INSERT定义了一个函数,但我看不出您在哪里调用该函数。您是否检查了错误日志?`global$film;`$这部电影已经不存在了——它只是在上一页。该执行已完成,您已开始新的执行。您需要将电影ID从HTML传递回第二个脚本函数(而不是类方法)中的code>应该抛出错误。是的,这非常有效!非常感谢您的描述和清晰的解释。:)
<input type="radio" value="1" name="rate">
<input type="radio" value="2" name="rate">
<input type="radio" value="3" name="rate">
<input type="radio" value="4" name="rate"><input type="radio" value="5" name="rate">
<input type="hidden" name="film" value="<?php echo $film;?>"/>
<input type="submit" value="Rate" name="rsub">
function act1()
{
if(isset($_POST['rsub']))
{
$film = $_POST['film']; //get the film ID from the submitted form
$conn = getDBConn(); //assuming this script is in the same .php file as the first block, otherwise you'll need to move getDBConn into a separate php file and then include the file in each script.
$rate = $_POST['rate'];
$sqlr = "UPDATE movies SET rating=rating+$rate, rate_count=rate_count+1 WHERE m_No='$film'";
$output = mysqli_query($conn, $sqlr);
}
if ($output==1)
{
echo 'Data Stored';
}
else
{
echo 'Data Not Stored';
echo mysqli_error($conn);
}
$conn = null;
}