2017-05-16 2 views
0

Ich habe eine Seite erstellt, die neue Datensätze zu meiner Datenbank hinzufügen kann, alles funktioniert gut, aber wenn ich versuche, eine PDF-Datei hochzuladen, wird sie nicht im richtigen Ordner gespeichert. Es sollte in meinen "Uploads" gespeichert werden. Wenn ich meine Datenbank überprüfen, tut es Link richtig sollte es statt example.pdf ../uploads/example.pdf werden nurDateien, die nicht im richtigen Ordner gespeichert werden

<?php 

require('db.php'); 
include("auth.php"); 

$status = ""; 
if(isset($_POST['new']) && $_POST['new']==1) 
{ 
$trn_date = date("Y-m-d H:i:s"); 
$fname =$_REQUEST['fname']; 
$lname = $_REQUEST['lname']; 
$memo = $_REQUEST['memo']; 
$file = $_REQUEST['file']; 
$submittedby = $_SESSION["username"]; 
$ins_query="insert into user (`trn_date`,`fname`,`lname`,`memo`,`submittedby`,`file`) values ('$trn_date','$fname','$lname','$memo','$submittedby','$file')"; 
mysqli_query($con,$ins_query) or die(mysql_error()); 
$status = "New Record Inserted Successfully.</br></br><a href='view.php'>View Inserted Record</a>"; 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Insert New Record</title> 
<link rel="stylesheet" href="css/style.css" /> 
</head> 
<body> 
<div class="form"> 
<p><a href="dashboard.php">Dashboard</a> | <a href="view.php">View Records</a> | <a href="logout.php">Logout</a></p> 

<div> 
<h1>Insert New Record</h1> 
<form name="form" method="post" action=""> 
<input type="hidden" name="new" value="1" /> 
<p><input type="text" name="fname" placeholder="Enter Date" required /></p> 
<p><input type="text" name="memo" placeholder="Enter Memorandum" required /></p> 
<p><input type="text" name="lname" placeholder="Enter Title" required /></p> 
<form action="" method="POST" enctype="multipart/form-data"> 
     <input type="file" name="file" /> 
     <input type="submit"/> 
     </form> 
<?php 
    if(isset($_FILES['file'])){ 
     $errors= array(); 
     $file_name = $_FILES['file']['name']; 
     $file_size =$_FILES['file']['size']; 
     $file_tmp =$_FILES['file']['tmp_name']; 
     $file_type=$_FILES['file']['type']; 
     $file_ext=strtolower(end(explode('.',$_FILES['file']['name']))); 

     $expensions= array("pdf"); 

     if(in_array($file_ext,$expensions)=== false){ 
     $errors[]="extension not allowed, please choose a pdf file."; 
     } 

     if($file_size > 2097152){ 
     $errors[]='File size must not exceed 2 MB'; 
     } 

     if(empty($errors)==true){ 
     move_uploaded_file($file_tmp,"../uploads/".$file_name); 
     echo "Success"; 
     }else{ 
     print_r($errors); 
     } 
    } 
?> 

<p><input name="submit" type="submit" value="Submit" /></p> 
</form> 

<p style="color:#FF0000;"><?php echo $status; ?></p> 
</div> 
</div> 
</body> 
</html> 

Antwort

0

Das ist, weil Sie nur dann gesetzt Dateinamen

$file = $_REQUEST['file'];

sparen

Stattdessen sollte es

$file = "../uploads/".$_REQUEST['file'];

0

es gibt durchaus ein paar logischen Fehler in Ihrem Code sein.

  1. Sie einen Datensatz in die MySQL-Datenbank vor Einfügen tun Sie Ihre Überprüfung der Dateierweiterung und Dateigröße.

  2. Sie geben einfach den Dateinamen in MySQL ein ($file = $_REQUEST['file'];), daher erscheint dort nur der Dateiname. Der richtige Code wäre:

    $file = "../uploads/".$_FILES['file']['name']; 
    

Ein bisschen mehr nach unten Sie die Datei verschieben Teil anpassen müssen:

move_uploaded_file($file_tmp, $file); 
  1. Im Fehlerprüfung nach dem sQL fügen Sie mysql_error() verwenden, nicht mysqli_error($con)

  2. Sie überprüfen nicht, ob der move_uploaded_file($file_tmp,"../uploads/".$file_name); Aufruf erfolgreich war d Die Datei wurde an ihren endgültigen Speicherort verschoben.

  3. Verwenden Sie auch vorbereitete Anweisungen zu prevent sql injection attacks.

+0

Ich habe bereits die $ file = $ _REQUEST ['file']; in $ file = "../uploads/".$_REQUEST['Datei ']; und mysql zu mysqli, aber es speichert immer noch nicht den richtigen Pfad. Was meinst du mit nicht überprüfen move_uploaded_file ($ file_tmp, "../ uploads /".$ dateiname); Anruf war erfolgreich? –

+0

Es tut mir leid, aber ich bin kein Gedankenleser. Welchen Pfad speichert das geänderte Skript und warum ist es nicht korrekt? In Bezug auf Ihre Frage auf move_uploaded_file(): pls lesen Sie das PHP-Handbuch: http://php.net/manual/en/function.move-uploaded-file.php – Shadow

+0

Weitere Anpassungen an die Antwort hinzugefügt. – Shadow

Verwandte Themen