#php #jquery #file-handling
Вопрос:
Я прикрепил свою страницу PHP здесь: Это страница после входа в систему:
<?php
session_start();
$url = "../../signin.html";
$font = "Montserrat";
$logout = "logout.php";
$name = $_SESSION["username"];
$index = strpos($name,"@");
$user = substr($name,0,$index);
$file="";
$target = "uploads/";
$log = $_SESSION['loggedin'];
if(isset($_FILES["file"]["name"])){
if($_SESSION["loggedin"]==1){
$ext = pathinfo($_FILES["file"]["name"],PATHINFO_EXTENSION);
if($_FILES["file"]["size"]>80000000){
echo "<script>alert('Select files less than 10mb.')</script>";
}
elseif($ext=="pptx"){
$target = "uploads/ppt/";
$file = $target . basename($_FILES["file"]["name"]);
}
elseif($ext=="txt"){
$target = "uploads/txt/";
$file = $target . basename($_FILES["file"]["name"]);
}
elseif($ext=="jpg"||$ext=="jpeg"){
$target = "uploads/jpg/";
$file = $target . basename($_FILES["file"]["name"]);
}
elseif($ext=="docx"){
$target = "uploads/word/";
$file = $target . basename($_FILES["file"]["name"]);
}
elseif($ext=="exe"){
$target = "uploads/exe/";
$file = $target . basename($_FILES["file"]["name"]);
}
elseif($ext=="pdf"){
$target = "uploads/pdf/";
$file = $target . basename($_FILES["file"]["name"]);
}
elseif($ext=="mp4"){
$target = "uploads/mp4/";
$file = $target . basename($_FILES["file"]["name"]);
}
elseif($ext=="mp3"||$ext=="wav"){
$target = "uploads/music/";
$file = $target . basename($_FILES["file"]["name"]);
}
elseif($ext=="xlsx"){
$target = "uploads/excel/";
$file = $target . basename($_FILES["file"]["name"]);
}
else{
$target = "uploads/others/";
$file = $target . basename($_FILES["file"]["name"]);
}
if(move_uploaded_file($_FILES["file"]["tmp_name"], $file)){
echo "<script>alert('File uploaded successfully.')</script>";
}
elseif($_FILES["file"]["size"]==0){
echo "<script>alert('No Files Selected.')</script>";
}
else{
echo "<script>alert('File already exists.')</script>";
}
}
}
if ($_SESSION["loggedin"]!=1) {
header("Location: $url");
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Personal Drive</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP u1T9qYdvdihz0PPSiiqn/ /3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" integrity="sha512-1ycn6IcaQQ40/MKBW2W4Rhis/DbILU74C1vSrLJxCq57o941Ym01SwNsOMqvEBFlcgUa6xLiPY/NS5R E6ztJQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,500;1,600;1,700;1,800;1,900amp;display=swap" rel="stylesheet">
<link rel="stylesheet" href="../../drive.css">
</head>
<body>
<div class="d-flex" class="mynav">
<div class="p-2 ml-auto header" >Welcome <?php echo $user; ?></div>
<div class="p-2 ml-auto" id="logout" onclick="login()"><i class="fas fa-sign-out-alt" id="logout_btn"></i><br><span id="logout_span">Logout</span></div>
</div>
</div>
<div class="container" id="alert">
<div class="alert alert-success alert-dismissible fade show" style="padding-left:20px;font-size:18px;">
<button type="button" class="close" data-dismiss="alert">amp;times;</button>
<strong style="margin-right:05px;">Alert! </strong> Logout from your account before closing the tab.
</div>
</div>
<form method="" action="" enctype="multipart/form-data">
<div id="upload_btn">
<label for="file" id="file-btn"><i class="fas fa-plus"></i> Add File</label>
<div id="filename">No files selected..</div>
<input type="file" id="file" style="display:none;" oninput="myfile()" name="file">
<button type="button" id="up_btn" name="upload" class="btn btn-primary"><i class="fas fa-cloud-upload-alt"></i> Upload</button>
</div>
</form>
<script>
$("button").click(function() {
var fd = new FormData();
var files = $('#file')[0].files[0];
fd.append('file', files);
$.ajax({
url: '',
type: 'post',
data: fd,
contentType: false,
processData: false,
success: function(e){
$("body").html("<div>" e "</div>");
},
});
});
function myfile(){
$.post(
"../../upload.php",
{view:$("#file").val()},
function(e){
$("#filename").html("<span style='font-weight:600; font-size:20px;'>" e "</span>");
}
);
}
function login(){
<?php
session_destroy();
?>
window.location.href = "../../signin.html";
}
</script>
</body>
</html>
В моем коде, когда я загружаю файл , страница теряет сеанс, я так думаю, но я не знаю настоящей причины. Предложите способ завершить мою работу..
Моя цель-разрешить пользователю загружать свои файлы до тех пор, пока он не нажмет кнопку «Выход». И по соображениям безопасности доступ могут получить только подписанные пользователи, поэтому я использовал сеанс. Но когда я загружаю файл, страница возвращается на signin.html.
При входе в систему signin.html
signin.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Database Signin</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.0/css/bootstrap.min.css" integrity="sha512-F7WyTLiiiPqvu2pGumDR15med0MDkUIo5VTVyyfECR5DZmCnDhti9q5VID02ItWjq6fvDfMaBaDl2J3WdL1uxA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<link rel="stylesheet" href="style.css">
</head>
<body>
<form action="signin.php">
<header>Database Login</header>
<br>
<label for="username">Enter Email</label><br>
<input type="email" name="email" id="email"/><br>
<span class="error_viewer" id="em_err"></span>
<br>
<label for="pass">Enter Password</label><br>
<input type="password" name="pass" id="pass"><br>
<span class="error_viewer" id="pass_err"></span><br>
<button type="button" class="btn btn-primary" id="signin_btn">Login</button><br>
<a href="index.html" style="margin-left: 25px;">New user? Register</a>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.0/js/bootstrap.min.js" integrity="sha512-NWNl2ZLgVBoi6lTcMsHgCQyrZVFnSmcaa3zRv0L3aoGXshwoxkGs3esa9zwQHsChGRL4aLDnJjJJeP6MjPX46Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP u1T9qYdvdihz0PPSiiqn/ /3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="validator.js"></script>
<script>
$("input").focus(e=>{
$(".error_viewer").text("");
});
$("#signin_btn").click(e=>{
if(ValidateEmail($("#email").val())==false){
$("#em_err").text('Enter Valid email');
}
if($('#email').val()==""){
$("#em_err").text('Enter email');
}
if($("#pass").val()==""){
$("#pass_err").text("Enter Password");
}
else{
$.post(
"signin.php",
{
em:$("#email").val(),
pass:$("#pass").val()
},
function(e){
if(e=="0"){
$("#em_err").text("Username didn't exist")
}
else if(e=="-1"){
$("#pass_err").text("Incorrect Password");
$("#pass").val('');
}
else{
location.href = e;
}
}
);
}
});
</script>
</body>
</html>
Комментарии:
1. Пожалуйста, поделитесь минимальным количеством кода. Страница входа не содержит процесса уничтожения сеанса. Проверьте наличие функции session_destroy (); ., которая используется для уничтожения целых сеансов.
2. Спасибо, я постараюсь это сделать
3. Но если я уничтожу сеанс при самой регистрации, это не позволит перейти на нужную страницу.