我正在制作一个网站,可以让您将信息提交到表单中并在单独的页面上查看。在该页面上,我希望用户能够按语言过滤数据。带有下拉菜单的按钮用于选择一种语言:
<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);
}
希望这有帮助(: