根据用户输入查询 SQL 表以返回同一行的值

Posted

技术标签:

【中文标题】根据用户输入查询 SQL 表以返回同一行的值【英文标题】:Query an SQL table to return the value of the same row based on user input 【发布时间】:2017-03-09 16:49:44 【问题描述】:

假设我有以下 SQL 表:

DATE1      |    DATE2
--------------------------
4/21/2012  |  3/SHAVAT/5777
4/22/2012  |  4/SHAVAT/5777
4/23/2012  |  5/SHAVAT/5777 etc...

我想要做的是 - 根据来自表单的用户输入自动填写第二个字段。无论他们先做字段 1 还是字段 2。

所以我开始这样做了:

<input type="text" id="dname" name="dname" value="<?php echo $myrow['DATE1']?>"
<input type="text" id="dname" name="dname" value="<?php echo $myrow['DATE2']?>"

我尝试使用的 PhP 是

<?php
$myrows = $wpdb->get_results( "SELECT heb_date, greg_date FROM calendar" )
?>

这就是我所了解的。我希望它检查表格,找到任一字段的输入日期,然后用该结果填充 OTHER 字段。本质上,如果 Timmy 输入 2007 年 4 月 12 日,它会侦听并检查数据库,然后在同一行但在第二列中的任何日期,将其返回到另一个字段,反之亦然。

【问题讨论】:

【参考方案1】:

您需要在这里使用WHERE 子句:

SELECT heb_date
FROM calendar
WHERE greg_date = '2007-12-04'

您可能还需要处理无法找到heb_date 的情况,但理想情况下,您的日历表中不应有任何漏洞。

【讨论】:

可以写成包含 users 变量吗?比如 SELECT heb_date FROM calendar WHERE greg_date = '$date1' @SeanRawles 是的,这应该可行,但您应该考虑使用参数化查询。如果您直接将 $date1 嵌入到您的 WHERE 子句中,则为 SQL 注入留下了机会(不良用户会找到技巧来获取他们不应该拥有的信息,甚至尝试删除您的数据库)。【参考方案2】:

以下代码的作用是为您提供一个允许您填写日期的表格。然后,它将使用该日期更新您的表格,并将其设置为 heb_dategreg_date 如果其中任一列与输入的日期匹配。

你的 html

<!-- Form -->
<form method="POST" action="<?= $_SERVER['PHP_SELF']; ?>">
    <input type="text" name="dname" id="dname" value="<?= $row['greg_date']; ?>" />
</form>

你的 PHP/SQL

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
    $date = $_POST['dname'];

    $stmt = "UPDATE calendar
    SET heb_date='".$date."',
    SET greg_date='".$date."'
    WHERE heb_date='".$date."'
    OR greg_date='".$date."'
    ";

    // if you would like to select the dates however
    $stmt = "SELECT
    heb_date,
    greg_date
    FROM calendar
    WHERE greg_date = '".$date."'
    OR heb_date = '".$date."'
    ";

更新

这对我来说并不完全清楚。如果您的意思是要将日期与行匹配并返回另一个日期,请执行以下操作。

// Do the following if the form submits
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
    $date = $_POST['dname'];

    $stmt = "SELECT
    heb_date,
    greg_date
    FROM calendar
    WHERE greg_date = '".$date."'
    OR heb_date = '".$date."'
    ";

    $myrows = $wpdb->get_results($stmt);

    // Not sure if its an array that is returned, but this will get the first value.
    $row = current($myrows);

    // Let's check which date is different
    if ($date != $row['greg_date']) 
        $date = $row['greg_date'];
     else 
        $date = $row['heb_date'];
    

?>

<!-- Form -->
<form method="POST" action="<?= $_SERVER['PHP_SELF']; ?>">
    <input type="text" name="dname" id="dname" value="<?= $date; ?>" />
</form>

使用 AJAX 更新

index.html

<!-- Form -->
<form method="POST" action="<?= $_SERVER['PHP_SELF']; ?>">
    <input type="text" name="dname" id="dname" value="<?= $date; ?>" />
</form>

<!-- jQuery -->
<script src="//code.jquery.com/jquery.js"></script>
<script type="text/javascript">
jQuery(document).ready(function($) 
    $(document).on('focusout', '#dname', function () 
        var dname = $(this).val();
        $.ajax(
            url: 'getdate.php',
            data: 
                'dname': dname
            ,
            success:function(data) 
                // This outputs the result of the ajax request
                $('#dname').val(data);
            ,
            error: function(errorThrown)
                console.log(errorThrown);
            
        );
    );
);
</script>

getdate.php

// Do the following if the form submits
if (isset($_REQUEST['dname'])) 
    $date = $_REQUEST['dname'];

    $stmt = "SELECT
    heb_date,
    greg_date
    FROM calendar
    WHERE greg_date = '".$date."'
    OR heb_date = '".$date."'
    ";

    $myrows = $wpdb->get_results($stmt);

    // Not sure if its an array that is returned, but this will get the first value.
    $row = current($myrows);

    // Let's check which date is different
    if ($date != $row['greg_date']) 
        $date = $row['greg_date'];
     else 
        $date = $row['heb_date'];
    

    echo $date;
 else 
    echo 'error';

?>

【讨论】:

如果输入已经在执行不同操作的表单中怎么办? 没问题。表格只是一个例子。 对不起,我只是在学习这些东西。所以我将它添加到 PhP 并忽略我已经拥有的内容?我假设“.$date”。字段应该是表单名称? if ($_SERVER['REQUEST_METHOD'] == 'POST') 意味着它只在提交时发生,是吗?不是当用户关闭标签或什么的时候?如果我不清楚,我很抱歉。前端的家伙不得不在枪下做繁重的工作。 你是对的。如果您提交表单,$_SERVER['REQUEST_METHOD'] 是 POST。

以上是关于根据用户输入查询 SQL 表以返回同一行的值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-如何根据不同列但同一行中的值选择列? [关闭]

根据时间范围对用户活动进行分组的 SQL 查询

使用 SQL 查询从 BigQuery 用户定义函数返回值

在 SQL Server 中计算同一行中的值

SQL Server 查询以根据用户提供的 id 获取嵌套的子记录

SQL 查询未返回正确的值