MySQL 在提交查询时无法识别变量的值#PHP

问题描述 投票:0回答:1

每当我尝试发布 MySQL 查询时,我都会检索除

$your_model
之外的所有变量值...这是我在创建 HTML 下拉列表后收到的值,该下拉列表在属于当前用户的数据库中检索汽车模型已登录。

如果我在检查

if(isset($_POST['odo']))
的“IF”语句之前和之后进行回显,我就能够看到
$your_model
的值...但是一旦我提交或发布我的里程表读数,MySQL就会看到
$odo
值、
$time
值,但不是
$your_model
值。

我尝试在我的代码之前和之后编写那段 MySQL 代码。我尝试将其嵌套到代码中的不同区域,甚至将其嵌套在我正在执行 if num_of_cars > 0

的位置

我尝试将

$your_model
放在引号
"$your_model"
、单引号
'$your_model'
中、用带或不带引号的大括号括起来
{$your_model}
'{$your_model}'

我也尝试过

'".$your_model."'
,但这不允许MySQL知道变量中的内容

我确实尝试了所有我能想到的方法,并在互联网上进行了搜索。我看到几个论坛有类似的问题...一个没有解决,另一个通过在变量周围加上大括号以便 MySQL 可以识别它来解决。

我真的相信它与

$_POST
命令有关...我想知道一旦我提交里程表读数来查询数据库,如果不知何故因为页面刷新,MySQL丢失了
$your_model
变量的值?

<?php
        require_once 'header.php';

        if (!$loggedin) die("</div></body></html>");

        if (isset($_GET['view'])) $view = sanitizeString($_GET['view']);
        else $view = $user;

        if ($view != "")
        {
                if ($view == $user) $name1 = $name2 = "Your";
                else
                {
                        $name1 = "<a href='members.php?view=$view'>$view</a>'s";
                        $name2 = "$view's";
                }

                echo "<h4>$name1 Car Portal</h4>";
                showProfile($view);

                echo "<br><br>";

                $car_query = "SELECT model FROM cars WHERE user='$user'";
                $car_result = queryMysql($car_query);
                $num_of_cars = $car_result->num_rows;

                if ($num_of_cars > 0) {
                        while ($row = mysqli_fetch_assoc($car_result)) {
                                $selectedModels[] = $row['model'];
                        }

                }

                if (isset($_POST['selectAModel'])) $your_model = sanitizeString($_POST['selectAModel']);


                echo <<<_END
                        <form method='post' action='car_test.php?view=$view'>
                                <select name="selectAModel">
                                <option value='Select Model'>Select A Model </option>
                _END;
                                foreach($selectedModels as $modelName) {
                                        echo "<option name='$modelName' value='$modelName'> $modelName      </option>";
                                }

                echo <<<_END
                                </select>
                                <input type='submit' name='post_car' value='Submit Car Model'>
                        </form>
                _END;

                echo "<br><br>";
                echo "<div style='text-align:center;'><h3>Your $your_model Odometer Reading</h3></div>";

                if (!isset($_POST['odo']))
                {
                        echo "<span class='info' style='color:red'>You have not entered your $your_model current odometer reading yet</span><br>";
                }

                if (isset($_POST['odo']) && isset($_POST['selectAModel']))
                {
                        $odo = sanitizeString($_POST['odo']);
                        if ($odo != "")
                        {
                                $time = time();
                                queryMysql("UPDATE cars SET odo = '$odo', time = '$time' WHERE user = '$user' AND model = '$your_model'");
                        }

                }

                echo <<<_END
                        <form method='post' action='car_test.php?view=$view'>
                                <input type='text' id='odo' name='odo'>
                                <label for='odo'>Current Odometer Reading</label><br>
                                <input data-transition='slide' type='submit' value='Submit Odometer Reading'>
                        </form>
                _END;

                echo "<br>";

                date_default_timezone_get();

                if (isset($_GET['erase']))
                {
                        $erase = sanitizeString($_GET['erase']);
                        queryMysql("DELETE FROM car WHERE odo='$erase' AND user='$user'");
                }

                $query = "SELECT * FROM car WHERE user='$view' ORDER BY time DESC";
                $result = queryMysql($query);
                $num = $result->num_rows;

                for ($j = 0; $j < $num; ++$j)
                {

                        $row = $result->fetch_array(MYSQLI_ASSOC);

                        if ($row['odo'] != "" && $row['user'] == $user)
                        {
                                echo date('M jS \'y g:ia:', $row['time']);
                                echo "<br><br>";
                                echo "<a href='car.php?view=" . $row['user'] . "'>" . $row['user']. "</a>";
                                echo "<br>";
                                echo "last oil change was at: " . $row['odo'] . "<br>";

                                $current_odo = ((int) $row['odo']);

                                $eight_thousand = 8000;

                                $next_change = $current_odo + $eight_thousand;

                                echo "your next oil change is at: $next_change";

                                if ($row['user'] == $user)
                                        echo "<br><br>[<a href='car.php?view=$view" . "&erase=" . $row['odo'] . "'>erase</a>]";

                                echo "<br><br><br>";
                        }
                }

        }

?>
        </div><br>
        </body>
        </html>
php html variables post
1个回答
0
投票

Web 请求是无状态的。他们不会自动记住从一个请求到下一个请求的任何内容。每次加载页面、发布表单或向服务器发送 AJAX 请求时,PHP 脚本都会从所请求脚本的开头运行,并且就像以前从未运行过一样。这有一些优点,但一个明显的缺点是它不保留任何变量值。

为了解决这个问题,您必须采取特定步骤来保留您想要在请求之间保留的数据,无论是为特定用户还是一般存储,然后在需要时检索它。

在您的场景中,您有两种形式,一种用于模型,一种用于里程表数据。这意味着将有两个单独的请求发送到服务器。因此,如果您在一个请求中提交了包含模型的表单,那么在包含里程表的请求中,将无法读取模型值。

您可以将两个字段放在一个表单中并将它们一起提交,或者采取措施在后续请求中保留/传递模型值 - 例如将其放入会话中然后检索它,或者将模型值放入里程表表单上的隐藏字段中。

这是一个简单的示例,说明如何使用会话来实现此目的:

<?php
session_start(); //remember to use this to enable Session usage in your script
require_once 'header.php';

//...etc, until you get to

if (isset($_POST['selectAModel'])) 
  $your_model = sanitizeString($_POST['selectAModel']);
  $_SESSION["your_model"] = $your_model; //add the model data to the session
}

//then we get to:
//if (isset($_POST['odo']) && isset($_POST['selectAModel'])) - this can't work because both POST values won't exist at the same time. Replace it with:

if (isset($_POST['odo']))
{
  if (isset($_SESSION["your_model"])) {
    $your_model = $_SESSION["your_model"];
  }
  else 
  { 
    die("No valid model value set, cannot proceed to save odometer reading");
  }

  //...etc
© www.soinside.com 2019 - 2024. All rights reserved.