我在学习php和sql,作为练习,我在一个页面上工作,这个页面实际上类似于一个列出电影的网站的管理面板。我使用lampp和phpmyadmin创建了一个简单的数据库,其中包含两个表,movie list和users list。
因为我是初学者,而且我的代码可能很混乱,所以我在描述我试图实现的目标。在login.php页面中,唯一的功能是输入用户名和密码。如果信息和sql表中的信息匹配,则用户继续访问adminpanel.php。
这个页面应该加载一个电影列表,并用这些数据创建一个表。在每一行的末尾我需要两个按钮,编辑和删除。我试图实现的是删除当前行中的删除按钮被点击,为删除按钮。“编辑”按钮应仅为单击按钮的行显示隐藏窗体。此表单将包含一个按钮,在填充表单并单击该按钮后,该按钮将实际更新sql表中的数据(我还没有添加显示表单的功能,我更关心的是在文件末尾添加电影的按钮表单。
这里是adminpanel.php
<html>
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js"
integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
crossorigin="anonymous">
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/core.js"></script>
<script type="text/javascript" src="changes.js"></script>
<script type="text/javascript" src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"></script>
<style type="text/css">
*{text-align: center;}
.skriveni_input{
display: none;
};
</style>
</head>
<?php
require_once('connection.php');
if(!isset($_POST['btnlogin'])){
exit;
}
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT usrname,password FROM usrs WHERE usrname='$username' AND password='$password' ";
$res = mysqli_query($conn,$query);
$rows = mysqli_num_rows($res);
if($rows == 1){
echo "Welcome ".$_POST['username']."<br><br>";
} else {
echo "<script>
alert('Wrong login info');
window.location.href='login.php';
</script>";
exit;
}
$query = "SELECT * FROM movies";
$result = $conn->query($query);
echo "<table align = center cellspacing = 0 border = 0;><thead><tr><th>Name</th><th>Year</th><th>Genre</th></tr></thead><tbody>";
while ($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo '<td id="row_id" style="display:none;" value="'.$row["movie_id"].'">'.$row["movie_id"].'</td>';
echo '<td>'.$row["name"].'</td>';
echo '<td>'.$row["year"].'</td>';
echo '<td>'.$row["genre"].'</td>';
echo '<td><input type="submit" name="edit" value="edit" data-index="' . $row['movie_id'] . '" class="btnedit" id="btnedit"></input></td>';
echo '<td><input type="submit" name="delete" value="delete" class="btndlt" id="btndlt"></input></td>';
echo "</tr>";
echo "<tr>
<td><input type='text' class='hidden_input' id='hidden_name" . $row['movie_id'] . "'placeholder='hidden name'></input></td>
<td><input type='text' class='hidden_input' id='hidden_year" . $row['movie_id'] . "'placeholder='hidden year'></input></td>
<td><input type='text' class='hidden_input' id='hidden_genre" . $row['movie_id'] . "'placeholder='hidden genre'></input></td>
</tr>";
}
echo "</tbody></table>";
?>
<h3>Add movie form: </h3>
<form action="" method="POST">
<label for="movie_name">Movie name : </label>
<input type="text" name="movie_name" id="movie_name">
<br><br>
<label for="movie_year">Year: </label>
<input type="text" name="movie_year" id="movie_year">
<br><br>
<label for="movie_genre">Genre: </label>
<input type="text" name="movie_genre" id="movie_genre">
<br><br>
<input type="submit" name="submit_movie" id="submit_movie" value="Submit">
</form>
</html>
下面是我的带有ajax调用的javascript文件:
$(document).ready(function(e){
$('#submit_movie').click(function(e){
e.preventDefault();
var movie_name = $('#movie_name').val();
var movie_year = $('#movie_year').val();
var movie_genre = $('#movie_genre').val();
$.ajax({
type: 'POST',
data: {movie_name:movie_name, movie_year:movie_year, movie_genre:movie_genre},
url: "insert.php",
success: function(result){
alert('Movie ' + movie_name + ' (' + movie_year + ')' +' added successfully.');
document.location.reload();
}
})
});
$('.btnedit').click(function(e){
var id = $(this).parent().prev().prev().prev().prev().html();
alert(id);
//unfinished function
})
$('.btndlt').click(function(e){
var id = $(this).parent().prev().prev().prev().prev().prev().html();
e.preventDefault();
$.ajax({
type: 'POST',
data: {id:id},
url: 'delete_row.php',
success: function(result){
alert('Successfully deleted.');
document.location.reload();
}
})
})
});
下面是用于添加电影的php页面insert.php(这一个可以工作,发布它只是为了获得更多信息):
<?php
require_once('connection.php');
if($_REQUEST['movie_name']){
$name = $_REQUEST['movie_name'];
$year = $_REQUEST['movie_year'];
$genre = $_REQUEST['movie_genre'];
$sql = "INSERT INTO movies(name, year, genre) VALUES ('$name','$year','$genre')";
$query = mysqli_query($conn, $sql);
}
?>
下面是delete_row.php文件,用于使用delete按钮删除条目:
<?php
require_once('connection.php');
$id = $_REQUEST['id'];
if(isset($_REQUEST['delete'])){
$sql = "DELETE FROM `movies` WHERE movie_id = $id";
$query = mysqli_query($conn, $sql);
}
?>
正如您可能看到的,我到处都在使用php和ajax,因为我试图实现多个解决方案或将它们混合使用来解决问题。在这个阶段,当我单击delete按钮时,我会收到一条警告消息,说擦除成功,adminpanel.php会重新加载电影列表。然而,电影仍然在那里,在sql数据库中。
当我试着调试delete_row.php时,我发现索引“id”每次都是未定义的,尽管我认为我是用ajax调用传递它的。
编辑
我应该说安全性不是我现在关心的问题,我做这个练习只是为了我描述的功能。:)安全是我的下一步,我知道这个代码是不安全的。
1条答案
按热度按时间drnojrws1#
当我试着调试delete_row.php时,我发现索引“id”每次都是未定义的,尽管我认为我是用ajax调用传递它的。
发生这种情况的原因可能是因为您正在访问
delete_row.php
直接通过浏览器提交,而且由于表单没有提交(稍后将通过ajax提交),因此$\u请求变量始终是未定义的。将来调试$\u request(或$\u post)变量时,应该使用postman,在这里您可以实际请求发送自己post参数的php文件。
在您的特定代码上,查询将永远不会运行,因为有以下行:
这是在检查
delete
一开始从未发送的变量,因此将始终解析false
在delete_row.php上使用以下代码: