首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下拉框的值默认值显示保存在数据库中的内容。

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

Stack Overflow用户
提问于 2018-09-04 14:07:10
回答 1查看 146关注 0票数 0

我有一个下拉框,这是create.blade.php的格式

代码语言:javascript
复制
<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>

我想对edit.blade.php使用相同的格式,但我想显示选定的值是什么作为默认值,当我更改它并单击update时,更改将被保存。

order_mode的值由value="{{ $product->order_mode }}"表示

EN

回答 1

Stack Overflow用户

发布于 2018-09-04 15:27:37

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

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

示例:

代码语言:javascript
复制
<script src="/js/jquery.min.js" type="text/javascript"></script>

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

代码语言: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 ),并将其存储在数据库中。

代码语言:javascript
复制
<?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解析它,因为它是由客户端处理的,这意味着它完全可以由客户端通过浏览器的开发工具进行编辑。取而代之的是使用会话。

会话变量示例:

代码语言:javascript
复制
<?php
session_start(); //starts the session on the page.

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

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

现在回到你的<select>。我们将不得不检查所选择的内容。您必须使用用户的用户ID从数据库中检索所选值。记住我提到的关于会话的内容。

示例:

代码语言:javascript
复制
<?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变量来检查用户选择了什么,并且它将始终将其作为默认选择。

代码语言:javascript
复制
<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>

请注意,您需要声明:

代码语言:javascript
复制
<?php
session_start();
?>

在您希望使用会话的每个文件的开头。

现在是最后一步,你的更新按钮。

代码语言:javascript
复制
<button id="updateButton" name="updateButton" onclick="updateSelection();">Update</button>

长文...但我希望它能有所帮助,或者至少能让我对如何做到这一点有所了解。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52159774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档