首页 > 解决方案 > 如何从 PHP 表单中检索数据

问题描述

我目前正在从事一项涉及大量 php 内容的任务。所以基本上我有一个网站,允许你购买电影票,你创建一个帐户,登录访问电影,选择日期和时间,数量,然后结帐。我目前正试图检索日期和时间。
此代码是用户登录后的 php 页面,当前正在选择他们想要的电影和所有选项。

//Sign In Page
$query = 'SELECT * FROM project_movies ORDER BY title;';
$results = $conn->query($query);
if ($results && $results->num_rows > 0) {
  $n = $results->num_rows;
  echo '<form method="post" action="project_review.php"><table border="1">';
  echo '<tr><th>Movies</th><th>Synopsis</th><th>Day</th><th>Time</th><th>Quantity</th><th>Add to Cart</th></tr>';
  for ($i = 0; $i < $n; $i++) {
    $movies = $results->fetch_assoc();
    echo "<tr><td>$movies[title]<br /><img src='$movies[pathname]'></td><td>$movies[synopsis]</td><td>";
  
    //Select Day of Week
    $days = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
    $length = count($days);
    for ($j = 0; $j < $length; $j++) {
        echo "<input type='checkbox' value='$days[$j]' name='day'>
        <label for='$days[$j]'>$days[$j]</label><br />";
    }
    echo "</td><td>";
    
   //Select Time
   $time = array('12:00','3:00','6:00','9:00');
   $length = count($time);
    for ($m = 0; $m < $length; $m++) {
        echo "<input type='checkbox' value='$time[$m]' name='time'>
        <label for='$time[$m]'>$time[$m]</label><br />";
    }
    echo "</td><td>";
    
    //Select Quantity of Tickets
    echo "Kids $3 <input type='number' value='kids' name='kids' style=;width:35px;'><br />
          Adults $9 <input type='number' value='adult' name='adult' style=;width:35px;'><br />
          Seniors $5 <input type='number' value='senior' name='senior' style=;width:35px;'>";
          
    echo "</td><td><input type='checkbox' name='checkout[]' value='$movies[mid]'";
        
    echo "></td></tr>";
  } 
  echo '</table><input type="submit" value="Checkout"></form>';
}

这部分代码来自评论 php 页面,该页面将向用户显示他们选择的内容。

//Review Page
$_SESSION['checkout'] = $_POST['checkout'];
$_SESSION['day'] = $_POST['day'];
$_SESSION['time'] = $_POST['time'];

echo '<p>Movie tickets in your cart:</p>';
// connect to MySQL server
$conn = new mysqli($hn, $user, $passwd, $db);
if ($conn->connect_error)
  die($conn->connect_error);

$n = count($_SESSION['checkout']);
echo '<ul>';

for ($i = 0; $i < $n; $i++) {
  $mid = $_SESSION['checkout'][$i];
  $day = $_SESSION['day'][$j];
  $time = $_SESSION['time'][$m];
  $query = "SELECT title FROM project_movies WHERE mid = $mid;";
  //echo $query;
  $result = $conn->query($query);
  if ($result && $result->num_rows > 0) {
    $movies = $result->fetch_assoc();
    echo '<li>' .$movies['title'] . '</li>';
    echo '<p> &rarr;' .$day. ' at ' .$time. '</p>';

到目前为止,我所做的只是能够查看选择了哪部电影,可以选择其中的多个并且它们会出现。如果我只为一部电影选择日期和时间,那么它将正确显示。但是,当我选择具有第二组日期和时间选项的第二部电影时,它只会打印出两部电影的日期和时间。
这是页面的链接,我现在设置的登录是
用户:管理员密码
:123456

标签: phpmysql

解决方案


您可以将您的电影选择作为带有名称的复选框checkout[]。这将有效地允许您添加多部电影,我相信这是您的意图。

但是,您的日期/时间仍然只是一个常数date,而不是date[]. date因此,在您的表单中设置名称和最后一个输入元素time将是唯一发送的元素。

尝试将 [] 添加到日期和时间输入的名称中,以通过$_POST. 然后您可以使用$_POST["date"][0](第一部电影)和$_POST["date"][1](第二部电影)访问每个。

编辑

我在您的评论页面上注意到您有

$mid = $_SESSION['checkout'][$i];
$day = $_SESSION['day'][$j];
$time = $_SESSION['time'][$m];

我没有看到它在任何地方指定 $j 和 $m 是什么。而且由于您处于 for 循环中。我认为您需要将这些更改为 $i 因为这是您目前正在经历的循环。

您可能需要执行另一个循环才能获取用户选择的所有时间和日期。

编辑#2 查看您的脚本通过您提供的示例生成的源代码,日期如下:

<label for='Sun'>Sun</label><br /><input type='checkbox' value='Mon' name='day[1]'>
<label for='Mon'>Mon</label><br /><input type='checkbox' value='Tue' name='day[2]'>
<label for='Tue'>Tue</label><br /><input type='checkbox' value='Wed' name='day[3]'>
<label for='Wed'>Wed</label><br /><input type='checkbox' value='Thu' name='day[4]'>
<label for='Thu'>Thu</label><br /><input type='checkbox' value='Fri' name='day[5]'>
<label for='Fri'>Fri</label><br /><input type='checkbox' value='Sat' name='day[6]'>

这是我首先指定的。这对所有电影都是一样的,所以最后一组是通过的最后一组。使它们成为:

<label for='Sun'>Sun</label><br /><input type='checkbox' value='Mon' name='day[][1]'>
<label for='Mon'>Mon</label><br /><input type='checkbox' value='Tue' name='day[][2]'>
<label for='Tue'>Tue</label><br /><input type='checkbox' value='Wed' name='day[][3]'>
<label for='Wed'>Wed</label><br /><input type='checkbox' value='Thu' name='day[][4]'>
<label for='Thu'>Thu</label><br /><input type='checkbox' value='Fri' name='day[][5]'>
<label for='Fri'>Fri</label><br /><input type='checkbox' value='Sat' name='day[][6]'>

然后你可以遍历它们以检索每部电影所需的内容。


推荐阅读