Php 使用两种不同的函数访问sql数据库

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

我正在为一个项目制作一个电影评级网站,如何做评级系统让我一片空白。如果你知道的话,请告诉我一个正确的方法

这将从url获取电影编号,并在页面中显示相关信息

<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传递回第二个脚本应该抛出错误。是的,这非常有效!非常感谢您的描述和清晰的解释。:)
<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;
}