2015-01-30 3 views
0

Я начинающий PHP и строить свой собственный проект практики (я думал, что это что-то вроде подержанного автомобиля продажи сайта онлайн) Моей проблемы очень похожа на multiple file upload sql/php и Multiple file upload in phpPHP загрузить несколько файлов и сохранять имена в базе данных

Вот список моих проблем Я хочу загрузить изображение в каталог и сохранить его имя в базе данных. Пока код ниже работает нормально (если я загружаю 1 файл). Я пытаюсь добавить еще 3 варианта ввода файлов, чтобы пользователь мог загружать до 4 изображений.

До сих пор, пытаясь использовать разные коды в stackoverflow и других онлайн-сайтах, я смог по крайней мере загрузить несколько файлов в свой каталог. Но реальная проблема заключается в том, что я не знаю, как сохранить имя файла в базе данных.

(В большинстве учебных пособий и предложений я обнаружил, что должен использовать один тип входного файла с несколькими атрибутами или именем, равным массиву, например file [], и запускать цикл foreach. Но я не мог понять, как идти дальше и получить имя файла каждого входа и сохранить его в базе данных.

Ниже мой код ссылки.

//this is my form.addVehicle.php file to process the form 

    <?php 
define("UPLOAD_DIR", "../uploads/"); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $name = "default.jpg"; 
    if (is_uploaded_file($_FILES["myFile"]['tmp_name'])) { 
     $myFile = $_FILES["myFile"]; 
     if ($myFile["error"] !== UPLOAD_ERR_OK) { 
      echo "<p>An error occurred.</p>"; 
      exit; 
     } 
     // ensure a safe filename 
     $name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]); 
     // don't overwrite an existing file 
     $i = 0; 
     $parts = pathinfo($name); 
     while (file_exists(UPLOAD_DIR . $name)) { 
      $i++; 
      $name = $parts["filename"] . "-" . $i . "." . $parts["extension"]; 
     } 
     // preserve file from temporary directory 
     $success = move_uploaded_file($myFile["tmp_name"], 
      UPLOAD_DIR . $name); 
     if (!$success) { 
      echo "<p>Unable to save file.</p>"; 
      exit; 
     } 
     // set proper permissions on the new file 
     chmod(UPLOAD_DIR . $name, 0644); 
    } 
    include_once ('../class/class.Vehicle.php'); 

    $vehicle = new Vehicle(
     $_POST['make_id'], 
     $_POST['yearMade'], 
     $_POST['mileage'], 
     $_POST['transmission'], 
     $_POST['price'], 
     $_POST['zone_name'], 
     $name, 
     $_POST['description'] 
    ); 
} 
?>  
    //To give a try, tested is_uploaded_file condition four different times with //different file name id like myFile1,myFile2...and path variable as $name1, //$name2...and it works as I want it to be...but I'm sure that' not the correct //way to do it.. 

    //This is my class file with name class.Vehicle.php 

    include_once('class.pdoDbConnnection.php'); 

    class Vehicle{ 
     private $make_id; 
     private $yearMade; 
     private $mileage; 
     private $transmission; 
     private $price; 
     private $zone_name; 
     private $image_path; 
     private $description; 

     public function __construct($make_id, $yearMade, $mileage, $transmission, $price, $zone_name, $image_path, $description){ 

      $this->make_id = $make_id; 
      $this->yearMade = $yearMade; 
      $this->mileage = $mileage; 
      $this->transmission= $transmission; 
      $this->price = $price; 
      $this->zone_name = $zone_name; 
      $this->image_path = $image_path; 
      $this->description = $description; 

      try{ 
       $sql = "INSERT INTO cars (car_id, make_id, yearmade, mileage, transmission, price, zone_name,image_path, description) VALUES (?,?,?,?,?,?,?,?,?)"; 
       $pdo = new DBConnection(); 
       $stmt = $pdo->prepare($sql); 
       $stmt->execute(array(NULL,$this->make_id,$this->yearMade,$this->mileage,$this->transmission,$this->price,$this->zone_name,$this->image_path,$this->description)); 

      } 
      catch (PDOException $e) 
      { 
       echo $e->getMessage(); 
      } 
     } 
    } 

    Here are my mySql table columns (I want to insert file names in the column..while displaying it in the client side, I'm using it this way: <img alt="image" class="img-responsive" src="../uploads/<?php echo $row['image_path'] ?>"> 
    car_id , make_id , zone_id, yearmade, mileage, transmission, price, image_path, image_path1, image_path2, image_path3, description 


    This is my client side form to add new cars.... 
    .................. 
    <form class="form-horizontal" role="form" method="post" action="../includes/form.addVehicle.php" enctype="multipart/form-data"> 
    ..................... 
       <div class="form-group"> 
        <label for="description" class="col-sm-2 control-label">Upload Image</label> 
        <div class="col-sm-4"> 
         <input type="file" class="form-control" id="myFile" name="myFile"> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="description" class="col-sm-2 control-label">Upload Image</label> 
        <div class="col-sm-4"> 
         <input type="file" class="form-control" id="myFile1" name="myFile2"> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="description" class="col-sm-2 control-label">Upload Image</label> 
        <div class="col-sm-4"> 
         <input type="file" class="form-control" id="myFile3" name="myFile3"> 
        </div> 
       </div> 
    .............. 
+0

Так как я начинающий PHP, я был бы признателен, если кто-то комментарии или высказать свое мнение о коде, который не может быть связано с моей issue..for например, правильно ли мой подход или нет, если что-то не так, что я делаю в своем файле класса или логике ... thankyou – Pushpan

ответ

0

Я сделаю пример, вы просто адаптировать его для себя.

<form action="file_reciever.php" enctype="multipart/form-data" method="post"> 
<input type="file" name="files[]" multiple/> 
<input type="submit" name="submission" value="Upload"/> 
</form> 

РНР идет (file_reciever.php):

<?php 
    if (isset($_POST['submission'] && $_POST['submission'] != null) { 
     for ($i = 0; $i < count($_FILES['files']['name']); $i++) { 
      //Get the temp file path 
      $tmpFilePath = $_FILES['files']['tmp_name'][$i]; 

      //Make sure we have a filepath 
      if ($tmpFilePath != "") { 
       //Setup our new file path 
       $newFilePath = "./uploadFiles/" . $_FILES['files']['name'][$i]; 

       //Upload the file into the temp dir 
       if (move_uploaded_file($tmpFilePath, $newFilePath)) { 

        //Handle other code here 

       } 
      } 
     } 
    } 
?> 
+0

@ CJ: Большое спасибо за ценное понимание. – Pushpan

0

Наконец я закончил с помощью следующего кода.

P.S. Благодаря @Andy-Brahman прозрения в Multiple file upload in php

<?php 
if(isset($_POST['submit'])){ 
$uploads_dir = '../test_uploads'; 
foreach ($_FILES["pictures"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
     $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
     $name = $_FILES["pictures"]["name"][$key]; 
     // I don't want to overwrite the existing file 
     $i = 0; 
     $parts = pathinfo($name); 
     while (file_exists($uploads_dir . "/" . $name)) { 
      $i++; 
      $name = $parts["filename"] . "-" . $i . "." . $parts["extension"]; 
     } 
     move_uploaded_file($tmp_name, "$uploads_dir/$name"); 
    } 
} 
    // Test to see if I get the uploaded file name which i want to insert into database table column. 
    echo "<pre>"; 
    print_r($_FILES['pictures']['name'][0]); 
    echo"</br></br>"; 
    print_r($_FILES['pictures']['name'][1]); 
    echo"</br></br>"; 
    print_r($_FILES['pictures']['name'][2]); 
    echo"</br></br>"; 
    print_r($_FILES['pictures']['name'][3]); 
    echo"</br></br>"; 
    echo "</pre>"; 
    // test succeeds . Now I guess I can do something like $picture0 = $_FILES['pictures']['name'][0]); 
    // and insert $picture0,$picture1...into database.. 
    // Am I doing everything correctly? 


} 
Смежные вопросы