根据用户输入查询 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_date
和 greg_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 表以返回同一行的值的主要内容,如果未能解决你的问题,请参考以下文章