【问题标题】:Displaying MYSQL data filtered for value of input field using PHP script使用 PHP 脚本显示过滤输入字段值的 MYSQL 数据
【发布时间】:2018-10-13 14:57:58
【问题描述】:

我是新来的,欢迎提出任何建议。

我有一种情况,我正在使用 javascript 过滤器函数来为输入字段选择一个值。提交时,会运行一个 php 脚本,该脚本会根据相关输入字段的值进行过滤。由于某种原因,这不起作用,因为我是新手,我认为这是一个常见错误。显然这里有一些小问题,这让我发疯。我想改进这一点并在此处获得最佳实践解决方案。

在下面找到相关代码:

HTML:

<div class="searchContainer">
    <div id="productDiv">
        <form autocomplete="off" onsubmit="search(this.value)">
            <div class="autocomplete">  
                <input id="myInput" type="text" placeholder="Search...">
            </div>
            <button type="submit">Go</button>
        </form>
    </div>
</div>

Javascript:

function search(str) {
        if (str == "") {
            document.getElementById("myInput").value = "";
            return;
        }
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else { // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("products").value = this.responseText;
            }
        }
        xmlhttp.open("GET", "filterMerchant.php?q=" + str, true);
        xmlhttp.send();
    }

PHP - (filterMerchant.php):

<?php
include('dbconnect.php');

$q = intval($_GET['q']);

mysqli_select_db($mysqli,"theDB");
$search="SELECT * FROM thetable WHERE ref = '".$q."'";
$result = mysqli_query($mysqli,$search);

while($row = mysqli_fetch_array($result)) {

echo "<a class=\"merchantOutput\">" . $row['merch'] . "</a>";
echo "<a class=\"priceOutput\"><strong>" . $row['cost'] . "</strong></a>";
echo "<img src=\"img.png\" style=\"height:42px;width:42px;\" 
onclick=\"showMerchant(this.value)\" value=\"TestProfile\" 
class=\"merchantLink\">";       
}

mysqli_close($mysqli);
?>

【问题讨论】:

  • 查看突出显示。一个" 没有被转义。
  • “最佳实践”对整个项目都是可靠的。如果您的应用程序很小并且现在很容易管理,那么您为什么要寻找其他做法呢?好的:使用 slim framework (slimframework.com/docs) ,使用 eloquent orm 和它 (slimframework.com/docs/v3/cookbook/database-eloquent.html) ,在前端放置你喜欢的 jquery、angular 等。看,这是第一次变得复杂(:
  • @u_mulder 在这里可能很愚蠢,但是要突出显示?
  • @NickSF 代码块中的颜色。
  • 这就是为什么我尽量避免在字符串中使用与字符串分隔符本身相同类型的引号。 PHP 和 HTML 都允许你使用单引号或双引号,所以如果你在 PHP 中使用双引号,在 HTML 中使用单引号,那么你通常不需要转义任何东西。

标签: javascript php mysqli


【解决方案1】:

您需要阻止默认表单提交。您可以通过从 onsubmit 代码返回 false 来做到这一点。

<form autocomplete="off" onsubmit="search(this.value);return false">

【讨论】:

  • 谢谢! :) 我会检查一下!
  • 这实际上并没有解决任何问题?返回false只是避免了表单的提交和php过滤脚本的运行?
  • 当您提交表单时,JavaScript 会停止执行,并且您永远不会看到 PHP 脚本的结果。而是刷新页面。
  • 需要 Javascript 以使 PHP 脚本(在本例中为 filterMerchant.php)按照上述代码执行?还是我对此感到困惑?我真的很想解决这个问题,因为这似乎是其他人可能遇到的问题
  • 如果你想在DIV中显示搜索结果而不需要重新加载页面,你需要JavaScript。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2013-04-25
相关资源
最近更新 更多