2016-03-30 7 views
0

Ich habe eine Tokenseite ich brauche den Benutzer ein Bild hochladen und wenn fertig, nicht in der Lage, zurück zu gehen, aber wenn ich meine Richtung Seite für nach Fertigstellung Lampe gewonnen ‚t die Aufgabe laden oder ergänzen, aber wenn ich die Seite es vollständig in Ordnung zu entfernen jede Hilfe von der angewandten Logik hier ist der Code des Problem ist, wo die fette Linie in Code ist, dass redirection`php muss den Benutzer auf eine andere Seite nach dem erfolgreichen Abschluss einer Aufgabe leiten

<?PHP 
session_start(); 
if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) { 
    header ("Location: index.php"); 
} 
?> 
<?php 
$target_dir = "uploads/"; 
$jobnumber="try_"; 
$random_digit=rand(0000,9999).$jobnumber; 

//combine random digit to you file name to create new file name 
//use dot (.) to combile these two variables 

$new_file_name=$random_digit. basename($_FILES["fileToUpload"]["name"]); 
$target_file = $target_dir .$new_file_name; 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    require_once("mysql_connect.php"); 

    $sql = "INSERT INTO imagepath (jobnumber,imagepath) 
VALUES ('$_POST[Name]','$target_file')"; 

$result = mysqli_query($connection, $sql); 
     **header("location:logout.php");** 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 
// Check if file already exists 
if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
} 
// Check file size 
if ($_FILES["fileToUpload"]["size"] > 2000000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" 
&& $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { 
     echo "The file ". basename($_FILES["fileToUpload"]["name"]). " has been uploaded."; 

    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 

} 

?>` 
+0

Eine Lösung ist 'output buffering', die bei Redirect-Headern hilft. Hier ist ein Link mit Informationen, wenn Sie keine andere passende Antwort erhalten. [Ausgabe-Pufferung] (http://stackoverflow.com/questions/2832010/what-is-output-buffering) – lovermanthing

Antwort

1

Sie werden nicht in der Lage sein, eine header zu tun, wenn Sie etwas an den Browser ausgegeben haben. Also hier:

if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) { 
    header ("Location: index.php"); 
} 
?> 
<?php 
$target_dir = "uploads/"; 

Es gibt keine Notwendigkeit für Ihre ?> <?php (es sendet nur einen Zeilenumbruch an den Browser, ruinieren Ihre header Optionen), um diese Zeilen zu entfernen. Dann wäre eine grobe Lösung, überall echo Sie ein Ergebnis, sondern stecken es in den $_SESSION, wie zum Beispiel:

$_SESSION['upload_error'] = 'File is not an image.'; 

Dann würden Sie wollen Ihre Logik ändern, so dass, wenn $uploadOk == 0 Sie sie umleiten zurück auf der Upload-Seite und auf die Seite, wenn $_SESSION['upload_error'] nicht leer ist, zeigen Sie es an. Andernfalls leiten Sie sie woanders um. Wenn Sie Hilfe bei dieser speziellen Logik benötigen, lassen Sie es mich wissen.


Eine grobe und schnelle Lösung mit minimalem-ish Änderungen aus Gründen der Zeit. Es gibt definitiv einige Optimierungen, die Sie tun könnten, aber dies sollte für Ihre Bedürfnisse funktionieren.

ist die Bildhandhabungs Datei upload.php ist Lassen Sie sagen, und das Formular auf etwas anderes angezeigt wird, wie, index.php

<?php 

    session_start(); 

    if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) { 
     header ("Location: index.php"); 
    } 

    $_SESSION['upload_error'] = null; 
    $_SESSION['upload_success'] = null; 

    $target_dir = "uploads/"; 
    $jobnumber="try_"; 
    $random_digit=rand(0000,9999).$jobnumber; 

    //combine random digit to you file name to create new file name 
    //use dot (.) to combile these two variables 

    $new_file_name=$random_digit . basename($_FILES["fileToUpload"]["name"]); 
    $target_file = $target_dir . $new_file_name; 
    $uploadOk = 1; 
    $imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 

    // Check if image file is a actual image or fake image 
    if (isset($_POST["submit"])) { 
     $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
     if ($check === false) { 
      $_SESSION['upload_error'] = "File is not an image."; 
      $uploadOk = 0; 
     } 
    } 

    // Check if file already exists 
    if (file_exists($target_file)) { 
     $_SESSION['upload_error'] = "File already exists."; 
     $uploadOk = 0; 
    } 

    // Check file size 
    if ($_FILES["fileToUpload"]["size"] > 2000000) { 
     $_SESSION['upload_error'] = "Your file is too large."; 
     $uploadOk = 0; 
    } 

    // Allow certain file formats 
    if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") { 
     $_SESSION['upload_error'] = "Only JPG, JPEG, PNG & GIF files are allowed."; 
     $uploadOk = 0; 
    } 

    if ($uploadOk == 1) { 
     if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { 
      $_SESSION['upload_success'] = "The file " . basename($_FILES["fileToUpload"]["name"]) . " has been uploaded."; 
     } else { 
      $uploadOk = 0; 
     } 
    } 

    // Check if $uploadOk is set to 0 by an error 
    if ($uploadOk == 1) { 
     # This is where I make an obligatory comment about how you should not use user-provided data ($_POST['Name']) directly in a query, 
     # which is 100% true, but is a topic for another question 
     require_once("mysql_connect.php"); 
     $sql = "INSERT INTO imagepath (jobnumber, imagepath) VALUES ('" . $_POST['Name'] . "', '$target_file')"; 
     $result = mysqli_query($connection, $sql); 

     header("Location: success.php"); 
    } else { 
     header("Location: index.php"); // send them back to the form, where you will display your error message 
    } 

?> 

Und das sehr nackte Skelett index.php wäre:

<?php 

    session_start(); 

    # This will vary a lot depending on if you're in an MVC setup and/or using a templating engine, etc, but basically: 

    // display HTML things like a header, etc 

    if (!empty($_SESSION['upload_error'])) { 
     echo "Sorry, your file was not uploaded: " . $_SESSION['upload_error']; 
    } 

    // display the rest of your HTML 

?> 

success.php wäre ähnlich, aber offensichtlich würden Sie eine Erfolgsmeldung anzeigen; Sie könnten dies auf index.php stattdessen tun, in dieser Datei einchecken, dass !empty($_SESSION['upload_success']) und es anzeigen, wenn es nicht ist.

+0

Dank Davis die tatsächliche Logik wird große Richtung sein Dank im Voraus – Tim

+0

@Tim, überprüfen Sie meine Bearbeitung für Details. Bitte achten Sie darauf, die Antwort zu akzeptieren, wenn es für Sie funktioniert. Lassen Sie mich wissen, wenn Sie irgendwelche Probleme haben. – Davis

+0

danke mann das war hilfreich – Tim

Verwandte Themen