【问题标题】:Filter SQL with button使用按钮过滤 SQL
【发布时间】:2016-01-31 02:50:11
【问题描述】:

我正在制作一个网站,让您可以将信息提交到表单中并在单独的页面上查看。在该页面上,我希望用户能够按语言过滤数据。 带有下拉菜单的按钮选择一种语言:

    <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">
      Select a language <span class="caret"></span>
    </button>

    <ul class="dropdown-menu">
      <li><a class="selectlang" id="arabic" data-language="arabic" href="#">Arabic</a></li>
      ...
      ...
      <li><a class="selectlang" id="spanish" data-language="spanish" href="#">Spanish</a></li>
    </ul>

  </div>

这是我必须这样做的 jQuery:

          $(".selectlang").click( function() {
            var language = $(this).data('language'); //this gets the selected language from the dropdown. I want to use this var in the PHP to complete the query "SELECT * FROM slangdata WHERE language = ?"

            $.ajax({
              url:  "test.php",
              type: "post",
              data: language,
              success: function() {
                $("#fill").load("test.php");
              }
            });
          });

在 PHP 方面 (test.php),我真的不知道从哪里开始。我发现这个页面我认为可能会有所帮助 (PHP: Filtering SQL query with select options),但我不知道如何开始实施它。

这是我到目前为止所写的——它是从另一个示例中复制的,该示例使用一个函数来清理 PHP,并且最初有一个表,所以我尝试将它转换为与我的代码一起使用,但我真的不知道我在做什么' 这样做只是一团糟。

<?php include 'database.php'; ?>


<?php
function sanitizeMySQL($conn, $var) {
    $var = strip_tags($var);
    $var = mysqli_real_escape_string($conn, $var);
    return $var;
}
if ( isset($_POST['language']) ) {
?>

<?php
    $language = sanitizeMySQL($conn, $_POST['language']);
    $query = "SELECT * FROM slangdata WHERE language = ?";
    // code runs only if the statement was prepared
    if ($stmt = mysqli_prepare($conn, $query)) {
        mysqli_stmt_bind_param($stmt, 's', $language); 
        mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($stmt, $id, $language, $word, $pronunciation, $translation, $notes, $example, $nsfw);
        // handle the data we fetched with the SELECT statement ...
        while (mysqli_stmt_fetch($stmt)) {

                printf ("<div class='%s'>", $nsfw);
                printf ("<p><span class='word'>%s</span>", stripslashes($word));
                printf ("<span class='pronounce'> %s </span></p>", stripslashes($pronunciation));
                printf ("<p class='translation'>%s</p>", stripslashes($translation));
                printf ("<p id='notes'>%s</p>", stripslashes($notes));
                printf ("<p id='ex'>%s</p>", stripslashes($example));
                printf ("<p class='%s'></p><hr></div>", $nsfw);
        } // end while-loop

        mysqli_stmt_close($stmt);
    }
    mysqli_close($conn);
} else {
?>


<p>Error</p>


<?php
}  // end of if-else isset
?>

(或者,我有这段代码,我认为它可以替换我已经拥有的 while 循环 - 不确定哪个更好):

        <?php while( $row = mysqli_fetch_assoc($run)) :  ?>

        <div class="<?php echo stripslashes($row['nsfw']); ?> entry <?php echo stripslashes($row['language']); ?>">
          <p><span class="word"><?php echo stripslashes($row['word']); ?></span> <span class="pronounce"> <?php echo stripslashes($row['pronunciation']); ?> </span></p>
          <p class="translation"><?php echo stripslashes($row['translation']); ?></p>
          <p id="notes"><?php echo stripslashes($row['notes']); ?></p>
          <p id="ex"><?php echo stripslashes($row['example']); ?></p>
          <p class="<?php echo stripslashes($row['nsfw']); ?>"></p>
        </div>

         <?php endwhile;  ?>

现在,当我选择一种语言时,它只是返回错误。很抱歉,这是一个很长的帖子,但我已经坚持了两天,真的不知道该怎么做。我怎样才能编写 PHP 让它做我想做的事?

编辑:删除的 cmets

【问题讨论】:

  • “当我选择一种语言时,它只会返回错误。” - 究竟是什么?
  • 顺便说一句,你的脚本评论太多了
  • 要在网页上显示详细的错误,请在代码开头添加error_reporting(E_ALL); ini_set('display_errors', 'on');。否则,可以检查您的 apache 错误日志。
  • @Devashish 但对于初学者来说,这可能很有用
  • @Fred-ii- 我的意思是它正在运行我的 PHP 的“else”部分,告诉它显示

    Error

标签: php jquery mysqli


【解决方案1】:

在客户端你可以这样使用

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="combo">
  <option value="english">English</option>
  <option value="arabic">Arabic</option>
</select>
<input id="button1" type="button" value="Click Me!" />

和 jquery 一样

$(document).ready(function(){ 
  $('#button1').click(function(){     
    $.post("somepage.php",
    {
        language: $('#combo :selected').text(),
    },
    function(data, status){
        alert("Data: " + data + "\nStatus: " + status);
    });

  });
});

在服务器端代码中你可以使用它

<?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDB";        
    $conn = new mysqli($servername, $username, $password, $dbname);
    $language = $_POST['language'];
    $sql = "SELECT * FROM slangdata WHERE language = '$language'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row or whatever you want to do
    }
?>

【讨论】:

  • 我试过了,它会弹出一个警告说:本地主机说:数据:状态:成功。知道这意味着什么吗?
  • @AdrianaBarbat 这是你的 jQuery 代码的结果(看看function(data, status))。对不起,但你不会通过随机复制和粘贴得到任何东西。此外,一次学习三种语言(javascript、php、sql)真的很难。我建议你休息一下并从一些tutorial 重新开始(一步一步,而不是通过复制和粘贴)...
  • 这意味着我的代码运行良好——但你需要学习这些语言——没有基础知识就不要复制粘贴
【解决方案2】:

在您的 ajax 中,设置如下语言:data: { language: language },因为 $_POST var 需要密钥 language
在您的test.php 中,只需回显有关语言的内容并将其设置在您的success 函数中:

success: function(response) {
    $("#fill").html(response);
}

希望这会有所帮助(:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2020-02-17
    • 2017-03-26
    相关资源
    最近更新 更多