下拉框值的默认值显示了保存在数据库中的内容。

时间:2018-09-04 06:07:10

标签: php laravel-5

我有一个下拉框,这是index.html

的格式
create.blade.php

我想对<div class="col-sm-6"> <label for="order_mode">Order Mode</label> <select class="form-control" id="order_mode" name="order_mode"> <option value="fcfs">First Come, First Serve</option> <option value="pre-selling">Pre-Selling</option> <option value="purchase-order">Purchase Order</option> </select> </div> 使用相同的格式,但是我想显示所选值是默认值,并且当我更改它并单击update时,更改将被保存。

edit.blade.php的值由order_mode

表示

1 个答案:

答案 0 :(得分:0)

您可以使用AJAX来将变量POST添加到 edit.blade.php 文件中。就我个人而言,我使用jQuery AJAX只是因为它易于阅读和理解。我还将AJAX函数封装到另一个函数中,您可以通过onclick更新按钮中调用它。但是,您也可以通过 onclick事件将该功能直接添加到AJAX函数中,但是请注意,在这种情况下,您需要将其放入 document.ready 函数,因此我认为将函数封装起来可以更容易理解。

请注意,您需要包括一个jQuery库,此示例才能正常工作。但是,它与包含任何其他JS文件或类似文件没有什么不同。

示例:

<script src="/js/jquery.min.js" type="text/javascript"></script>

/js/是目录中的 JavaScript 文件夹。

function updateSelection()
{
    $.ajax({
        type : "POST",
        url : "/edit.blade.php",
        data : {
                selection: $("#order_mode")val()
        },
        success: function (html) {
            /* here you can do something on success if you want.
               I.e. redirect to another page etc. */
        }
    })
}

关于更新值,我假设您正在将数据存储到数据库中?如果不是,那么就必须这样做,否则就无法知道将来选择了什么。因此,如果您实际上将所选数据存储到数据库中,您的 edit.blade.php 文件将需要获取解析后的值(我将其命名为 selection 在这种情况下),并将其存储在数据库中。

<?php
/* Note that we used a "POST" method, so in order to 
   retrieve our parsed variable, we'll have to use $_POST. */

$selected=$_POST['selection'];

/* We then need to store it into the database.
   Note that I don't know what mysql extension you use (mysql_*, mysqli_* or PDO). 
   I will use mysqli_* in my example, and $conn is your
   database connection variable. */

/* Note that you will also need the user ID in order to know which user
   updated their selected value. You will also need to check if the selection
   already exists or not, because if it doesn't, you will have to perform an insert,
   and if it does, you will have to perform an update in your query statement. */

//check if user selection already exists, or whether it's the users first selection.
$sql = "SELECT COUNT(column_name_for_user_id) FROM your_table_name
        WHERE user_id_column='$your_user_id_variable'";
$result_set = mysqli_query($conn, $sql);
$check = mysqli_fetch_array($conn, $result_set )[0];

if($check > 0)
{
    $sql = "UPDATE your_table_name SET column_name_for_selection='$selected'
            WHERE column_name_for_user_id='$your_user_id_variable'";
}
else
{
    $sql = "INSERT INTO your_table_name SET column_name_for_selection='$selected'
            AND column_name_for_user_id='$your_user_id_variable'";
}

mysqli_query($conn, $sql);

/* I would recommend that you look into
   prepared statements and/or sanitizing inputs */
?>

重要提示: 关于用户ID,我建议通过AJAX对其进行解析,因为它是客户端处理的内容端,表示客户端可以通过浏览器的开发工具对其进行完全编辑。而是使用 session

会话变量示例:

<?php
session_start(); //starts the session on the page.

$your_user_id_session_variable = $_SESSION['$your_logged_in_users_user_id'];
?>

您将需要在用户登录时设置此会话,在登录成功后在此获取用户数据,并设置会话变量。

现在返回您的<select>。我们将不得不检查选择了什么。您将必须使用用户的用户ID来从数据库中检索选定的值。 记住我提到的关于 sessions 的内容。

示例:

<?php
//$conn is your connection variable

$sql = "SELECT column_name_for_selection FROM your_table_name
        WHERE user_id_column='$your_user_id_sessin_variable'";
$result_set = mysqli_query($conn, $sql);
$selected = mysqli_fetch_array($conn, $result_set )[0];
?>

现在,您可以使用$selected变量来检查用户选择的内容,并且始终将其作为默认选择。

<select class="form-control" id="order_mode" name="order_mode">
   <option value="fcfs" <?php if($selected == "fcfs"){ echo 'selected="selected"'; } ?> >First Come, First Serve</option>
   <option value="pre-selling" <?php if($selected == "pre-selling"){ echo 'selected="selected"'; } ?> >Pre-Selling</option>
   <option value="purchase-order" <?php if($selected == "purchase-order"){ echo 'selected="selected"'; } ?> >Purchase Order</option>
</select>

请注意,您需要声明:

<?php
session_start();
?>

在每个要使用 session 的文件的开头。

现在,最后一点是您的更新按钮

<button id="updateButton" name="updateButton" onclick="updateSelection();">Update</button>

长篇文章...但是我希望它能对您有所帮助,或者至少让您对如何完成工作有所了解。