【发布时间】:2019-07-15 02:23:14
【问题描述】:
所以我尝试使用 ajax 显示数据并按值过滤它... 当我只显示所有数据时它就起作用了 但我想让显示数据按下拉值过滤,并且需要发布以获取下拉选择值
然后当我完成后,我可以让 POST 功能在控制台上运行,我得到的响应根本没有问题 但查看数据的获取功能不起作用 所以数据不会加载...
prepro.php 用于下拉功能(似乎完全没有问题)
<select id="data_latih">
<option value="" selected="selected">Pilih Dokumen keberapa</option>
<?php
$sql = "SELECT DISTINCT dokumen FROM dt_latih ";
$resultset = mysqli_query($connection, $sql) or die("database error:". mysqli_error($connection));
while( $rows = mysqli_fetch_assoc($resultset) ) {
?>
<option value="<?php echo $rows["dokumen"]; ?>"><?php echo $rows["dokumen"]; ?></option>
<?php } ?>
</select>
关于 ajax 函数的 prepro.php
function viewData(){
$.ajax({
url: 'proseslabel.php?p=view',
method: 'GET'
}).done(function(data){
$('tbody').html(data)
tableData()
})
}
function tableData(){
$('#tabledit').Tabledit({
url: 'proseslabel.php',
eventType: 'dblclick',
editButton: true,
deleteButton: false,
hideIdentifier: false,
buttons: {
edit: {
class: 'btn btn-sm btn-warning',
html: '<span class="glyphicon glyphicon-pencil"></span> Edit',
action: 'edit'
},
save: {
class: 'btn btn-sm btn-success',
html: 'Save'
}
},
columns: {
identifier: [0, 'id_latih'],
editable: [[16, 'label', '{"1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6"}']]
},
onSuccess: function(data, textStatus, jqXHR) {
viewData()
},
onFail: function(jqXHR, textStatus, errorThrown) {
console.log('onFail(jqXHR, textStatus, errorThrown)');
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
},
onAjax: function(action, serialize) {
console.log('onAjax(action, serialize)');
console.log(action);
console.log(serialize);
}
});
}
$("#data_latih").change(function() {
var id = $(this).find(":selected").val();
$.ajax({
url: 'proseslabel.php?p=view',
method:"POST",
data: {id:id},
dataType: "json",
cache: false,
success: function(data) {
console.log(data);
$('tbody').html(data);
viewData;
tableData();
}
});
});
</script>
proseslabel.php 用于显示数据
$page = isset($_GET['p'])? $_GET['p'] : '' ;
if($page=='view'){
if(isset($_POST["id"]))
{
$result = $mysqli->query("SELECT * FROM dt_latih ");
while($row = $result->fetch_assoc()){
?>
<tr>
<td><?php echo $row['id_latih'] ?></td>
<td><?php echo $row['kalimat'] ?></td>
<td><?php echo $row['x1'] ?></td>
<td><?php echo $row['x2'] ?></td>
<td><?php echo $row['x3'] ?></td>
<td><?php echo $row['x4'] ?></td>
<td><?php echo $row['x5'] ?></td>
<td><?php echo $row['x6'] ?></td>
<td><?php echo $row['x7'] ?></td>
<td><?php echo $row['x8'] ?></td>
<td><?php echo $row['x9'] ?></td>
<td><?php echo $row['x10'] ?></td>
<td><?php echo $row['x11'] ?></td>
<td><?php echo $row['x12'] ?></td>
<td><?php echo $row['x13'] ?></td>
<td><?php echo $row['x14'] ?></td>
<td><?php echo $row['label'] ?></td>
</tr>
<?php
}
}
} else{
// Basic example of PHP script to handle with jQuery-Tabledit plug-in.
// Note that is just an example. Should take precautions such as filtering the input data.
header('Content-Type: application/json');
$input = filter_input_array(INPUT_POST);
if ($input['action'] == 'edit') {
$mysqli->query("UPDATE dt_latih SET label='" . $input['label'] . "' WHERE id_latih='" . $input['id_latih'] . "'");
} else if ($input['action'] == 'delete') {
$mysqli->query("UPDATE tabledit SET deleted=1 WHERE id_latih='" . $input['id_latih'] . "'");
} else if ($input['action'] == 'restore') {
$mysqli->query("UPDATE tabledit SET deleted=0 WHERE id_latih='" . $input['id_latih'] . "'");
}
mysqli_close($mysqli);
echo json_encode($input);
}
数据只是不会加载,但在控制台检查元素中,我得到了我想要回显的所有值
【问题讨论】:
-
警告:您容易受到 SQL 注入攻击! 攻击者可以轻松地对您的数据库运行任意代码。您应该强烈考虑使用prepared statements 和参数化查询。您可以使用 PDO 或 MySQLi 执行此操作。 永远不要相信输入,尤其是来自客户端的输入。即使只有受信任的用户使用您的系统,there is still the chance of corrupting your database。
-
@Hoppeduppeanut 谢谢你提醒我,没关系,因为我的应用程序都在本地主机中
-
即便如此,您仍然应该考虑使用准备好的语句。强制执行以防止应用中相当严重的漏洞是一个好习惯,即使它仅在本地环境中也是如此。
-
当你说“但是在控制台检查元素中,我得到了我想要回显的所有值”,你的意思是你可以看到你的 ajax 调用正在控制台网络选项卡中返回正确的数据吗?