2016-05-27 7 views
0

ich einen Fehler in Verbindung genrated bekommen, wenn geholt von Datenbank image of errorDateiname auf MYSQL gespeichert ist falsch aus irgendeinem Grunde

hier Code zum Abrufen von Bild

echo "<img src='uploads/$row[img].jpg' height='150px' width='300px'>"; 

unten geholt wird beign ist der Code der Datei in der Datenbank

<?php 
$servername = "localhost"; 
$dbUsername = "root"; 
$dbname = "property"; 
$dbPassword = ""; 
$location = $_POST["location"]; 
$street = $_POST["street"]; 
$city = $_POST["city"]; 
$province = $_POST["province"]; 
$type = $_POST["type"]; 
$price = $_POST["price"]; 
$beds = $_POST["beds"]; 
$isforsale = $_POST["isforsale"]; 
$flag = ""; 
$last_id=""; 
$target_dir = "uploads/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["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; 
    } 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"] > 500000) { 
    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."; 
     $image=basename($_FILES["fileToUpload"]["name"],".jpg"); 
     $conn = new mysqli($servername, $dbUsername, $dbPassword, $dbname); 
     if ($isforsale=="false"){ 
      $flag = 0; 
     }else{ 
      $flag = 1; 
     } 
     $sql = "INSERT INTO Property (Location, Street, City, Province, PStatus, PType,isForSale,Price,Beds, img)VALUES ('$location','$street','$city','$province',0,'$type','$flag','$price','$beds',' $image')"; 
     $retval = mysqli_query($conn,$sql); 
     $last_id = mysqli_insert_id($conn); 
     session_start(); 
     $userid = $_SESSION["id"]; 
     if ($retval === TRUE){ 
      $sql = "INSERT INTO OwnersProperty (PropertyNo,OwnerId) VALUES ('$last_id','$userid')"; 
      $retval = mysqli_query($conn,$sql); 
      if($retval === TRUE){ 
         header("Location: dashboard.php"); 
         exit; 
       } 
     } else { 
      echo "Error: " . $sql . "<br>" . $conn->error; 
     } 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
?> 

Dies ist Dateicode enthält Bild, das zu laden und zu speichern Bild für das hochladen und in die dat Speicher erniedrigen.

+0

Die Dateigröße ist in '$ _FILES [ 'fileToUpload'] [ 'size' ] 'warum sich mit' getimagesize' beschäftigen – RiggsFolly

+0

@RiggsFolly Ich sehe nicht, wie diese beiden zusammenhängen –

+1

Sie fügen auch '.jpg' als Dateiendung in' $ image = Basisname ($ _FILES ["fileToUpload"] [" name "],". jpg ");' aber du erlaubst '.jpg, .png und .gif 'vielleicht nimmst du die Erweiterung eines '.png' Datei oder eine' .gif' Datei – RiggsFolly

Antwort

1

Sie haben eine "% 20" in Ihrer Bild-URL nach "Uploads", was einem Leerzeichen in der URL entspricht. Sie erhalten ein Leerzeichen vor dem Bildnamen in der folgenden Abfrage, durch die Ihr Bild hochgeladen wird, sodass alle Ihre hochgeladenen Bilderamen am Anfang ihrer Namen ein Leerzeichen enthalten. Entfernen Sie das Leerzeichen vor dem '$ image' (siehe unten in der Abfrage) und das war's.

$sql = "INSERT INTO Property 
     (Location, Street, City, Province, PStatus, 
     PType,isForSale,Price,Beds, img) 
     VALUES ('$location','$street','$city','$province',0, 
     '$type','$flag','$price','$beds',' $image')"; 
             ^
              ^^^ 
             ^^^^^ 
+0

Ich weiß, das ist Platz, aber woher kann ich es entfernen? Kannst du mich bitte führen? –

+0

Sie haben ein Leerzeichen in Ihrer Abfrage '', $ image'' –

+0

$ sql =" INSERT INTO-Eigenschaft (Ort, Straße, Stadt, Provinz, PStatus, PType, isForSale, Preis, Betten, img) VALUES (' $ location ',' $ street ',' $ city ',' $ province ', 0,' $ type ',' $ flag ',' $ price ',' $ betten ',' $ image ') "; Du hast hier Platz vor $ image. –

4

Diese Linie hat einen Raum zwischen dem Apostroph und der Variablennamen ' $image' Also, wenn es auf der Datenbank gespeichert wird der Dateiname mit einem Leerzeichen beginnen %20

$sql = "INSERT INTO Property 
      (Location, Street, City, Province, PStatus, 
      PType,isForSale,Price,Beds, img) 
      VALUES ('$location','$street','$city','$province',0, 
      '$type','$flag','$price','$beds',' $image')"; 
              ^
               ^^^ 
              ^^^^^ 

es entfernen und alles wird Gut.

Ihr Skript in Gefahr SQL Injection Attack ist Werfen Sie einen Blick auf das, was passiert Little Bobby Tables Selbst if you are escaping inputs, its not safe! Verwenden prepared statement and parameterized queries

+0

Auch die Verwendung der parametrisierten Abfrage hätte dieses Problem vermieden. – chris85

Verwandte Themen