document.getElementById() 作为 PHP SQL 查询参数
Posted
技术标签:
【中文标题】document.getElementById() 作为 PHP SQL 查询参数【英文标题】:document.getElementById() as PHP SQL Query parameter 【发布时间】:2019-12-06 01:20:52 【问题描述】:我有一个问题,是否可以使用存储在document.getElementById().value
、getElementsByName().value
、getElementsByClassName().value
中的值作为通过 php 进行 SQL 查询的参数?
示例。
我有这条线<input type="text" class="myinput" id="myinput" name="myinput" value="999-AAA-000">
然后我将数据存储在这个元素中。
<script>
function myFunction()
var foroutput = document.getElementsByClassName("myinput");
</script>
有没有办法将document.getElementsByClassName("myinput")
或var foroutput
用作通过PHP 进行SQL 查询的参数?
场景:SQL 查询与document.getElementsByClassName("myinput")
在同一页面内,不使用<form>
是否可以工作?
这是我的代码
<input type="text" class="decid" id="decid" name="decid">
// the data passed into this input box will be used as a parameter for SQL Query $id
<table id="example2" class="table table-bordered">
<thead>
<th>Schedule Date</th>
<th>Schedule Name</th>
<th>Recorded In</th>
<th>Recorded Out</th>
<th>Day Count</th>
<th>Day Value</th>
<th>N.D. Value</th>
<th>Leave Count</th>
<th>R.H. Count</th>
<th>R.H. Value</th>
</thead>
<tbody>
<?php
$id=$_POST['id'];
$sql = "SELECT fingerscanno, scheduledate, schedulename, recordin, recordout, noofdays, rate, nightdifferential, leaveday, regularholiday, specialholiday, referenceno
FROM payrollrecords WHERE fingerscanno='$user' and referenceno='$id'";
$query = sqlsrv_query($conn, $sql, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
while($row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC))
echo "
<tr>
<td>".$row['scheduledate']."</td>
<td>".$row['schedulename']."</td>
<td>".$row['recordin']."</td>
<td>".$row['recordout']."</td>
<td>".$row['noofdays']."</td>
<td>".$row['rate']."</td>
<td>".$row['nightdifferential']."</td>
<td>".$row['leaveday']."</td>
<td>".$row['regularholiday']."</td>
<td>".$row['specialholiday']."</td>
</tr>
";
?>
</tbody>
</table>
一个样本会非常棒。谢谢。
编辑:
为什么这不起作用?
<input type="text" class="decid" id="decid" name="decid">
<script type="text/javascript">
var abc = document.getElementById("decid").value;
<?php $abc = "<script>document.write(abc)</script>"?>
</script>
<?php echo $abc;?>
【问题讨论】:
是的,异步发送,例如通过 AJAX。 @Qirel 如果你不介意,你能给我举个例子吗?或者一个链接也许可以学习?我在 AJAX 方面很糟糕。 jQuery Ajax POST example with PHP的可能重复 @LouysPatriceBessette 我的情况是数据被传递到模式中。并且 PHP 代码也在模态框内。 你应该做准备语句来逃避sql注入,看看php中的PDO库 【参考方案1】:您似乎认为<?php $abc = "<script>document.write(abc)</script>"?>
可能会将运行 JavaScript 的结果存储在 PHP 变量中。这是不可能的。 PHP 在服务器上运行并构建 html 以发送到客户端的浏览器。 JavaScript 在被浏览器接收之前不会运行。
服务器端: - 可以运行 PHP 和 mysql - JavaScript 无法运行
客户端: - JavaScript 可以运行 - PHP 不能
在你的例子中
<input type="text" class="decid" id="decid" name="decid">
<script type="text/javascript">
var abc = document.getElementById("decid").value;
<?php $abc = "<script>document.write(abc)</script>"?>
</script>
<?php echo $abc;?>
其实是一样的
<input type="text" class="decid" id="decid" name="decid">
<script type="text/javascript">
var abc = document.getElementById("decid").value;
</script>
<script>document.write(abc)</script>
因为您在变量 $abc 中存储了一个带有脚本标签的字符串,然后在几行之后将该变量回显出来。
有几种方法可以让 JavaScript 与服务器通信。
1)
老式的方法只是用一个查询参数来刷新页面,该参数告诉 PHP myinput 是什么。
window.location.href = 'http://example.com/mypage?myinput=' + abc
然后在 PHP 中,您可以像这样获取输入并在 SQL 查询中使用它。
$abc = $_GET['myinput'] ?? false;
if ($abc)
...
2)
更好的方法是使用 Ajax。 Ajax 允许您向服务器发送请求以获取某些数据,而无需刷新整个页面。如果您使用 jQuery,那么您可以使用 jQuery.get 或 jQuery.load 函数来执行此操作。然后,您将让 PHP 返回您将添加到页面的结果。有很多关于如何做到这一点的教程。
3)
如果您不使用 jQuery,那么还有 2 个附加选项可用于向服务器发送请求。如果你不关心支持 IE 11,那么你可以使用新的Fetch API。另一种选择是使用axios library,它更易于使用,但需要安装第三方库。它们的用途非常相似。
【讨论】:
我正在将我的数据传递给一个模态。请问是否可以将数据直接传递给modal中的PHP代码?$(function() $("body").on('click', '.edit', function (e) e.preventDefault(); $('#edit').modal('show'); var id = $(this).data('id'); getRow(id); );
是的。使用$.post() 将数据发送到 PHP。您需要将数据发送到与 PHP 文件相对应的 URL,该文件使用您提供的数据来执行数据库查询并回显结果。您可以查看任何 Ajax 教程以获取有关如何执行此操作的更多信息。以上是关于document.getElementById() 作为 PHP SQL 查询参数的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 中的 document.getElementById().innerText
打字稿中的 document.getElementById(s).document.getElementsByClassName 错误
为啥不需要 document.getElementById? [复制]
document.getElementById/Name/TagName