document.getElementById() 作为 PHP SQL 查询参数

Posted

技术标签:

【中文标题】document.getElementById() 作为 PHP SQL 查询参数【英文标题】:document.getElementById() as PHP SQL Query parameter 【发布时间】:2019-12-06 01:20:52 【问题描述】:

我有一个问题,是否可以使用存储在document.getElementById().valuegetElementsByName().valuegetElementsByClassName().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") 在同一页面内,不使用&lt;form&gt; 是否可以工作?

这是我的代码

<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】:

您似乎认为&lt;?php $abc = "&lt;script&gt;document.write(abc)&lt;/script&gt;"?&gt; 可能会将运行 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

document.getElementById 与 jQuery $()

哪个更好 - Ext.get() 或 document.getElementById()