使用按钮筛选 SQL



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

    <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:使用选择选项过滤SQL查询(,但我不知道如何开始实现它。

这就是我到目前为止所写的 - 它是从另一个示例复制的,该示例使用函数来清理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来让它做我想做的事?

编辑:删除的评论

在客户端你可以这样使用

<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
    }
?>

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

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

希望这有帮助(:

最新更新