2015-10-28 4 views
-2

Итак, у меня есть этот код, сначала mkdir работал нормально, пока я не захотел немного настроить его с помощью категории $ и $ random, даже если я отменил его, это не сработает, может быть, вы может мне помочь? Также как сгенерировать $ random code с проверкой, если он уже существует, и сделать цикл, пока он не найдет свободный?PHP mkdir больше не работает

<?php 

require_once('admin/connection.php'); 

$email=$_POST['email']; 
$first_name=$_POST['first_name']; 
$last_name=$_POST['last_name']; 
$description=$_POST['description']; 
$category=$_POST['category']; 
$fileToUpload=$_POST['fileToUpload']; 



    if(isset($_POST['submit'])){ 
    $numbers = range(6, 1); 
      $random = ''; 
      shuffle($numbers); 
      foreach ($numbers as $number) { 
       $random.= $number; 
      } 

if ("SELECT `application_ID` FROM `applications` WHERE `application_ID` = '".$random."'") { 
      $numbers = range(6, 1); 
      $random = ''; 
      shuffle($numbers); 
      foreach ($numbers as $number) { 
       $random.= $number; 
      } 
} 


if (!file_exists("uploads/$category/$random")) { 
    mkdir("uploads/$category/$random", 0777, true); 
} 
$target_dir = "uploads/$category/$random"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// 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."; 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
$filename=basename($_FILES['fileToUpload']['name']); 




     // taking information from inputs and adding it to database tables. 
     $query = "INSERT INTO applications VALUES ($random, '$email', '$first_name', '$last_name', '$description', '$category', NOW());"; 
     if ($conn->query($query) === TRUE) { 
     $query2 = "INSERT INTO `uploads` (`application_ID`, `file`) VALUES ($random, '$filename');"; 
     if ($conn->query($query2) === TRUE) { 
      echo "Good luck! <a href='index.php'>Home page</a>"; 
     } else { 
      echo "Error: " . $query2 . "<br>" . $conn->error; 
     } 
      echo "<br>Order detail success "; 
     } else { 
      echo "Error: " . $query . "<br>" . $conn->error; 
     }  
     } 

?> 

<h3>Upload your application</h3> 


<form method="post" enctype="multipart/form-data"> 
<input type="email" name="email" placeholder="Email" required><br> 
<input type="text" name="first_name" placeholder="First name" required><br> 
<input type="text" name="last_name" placeholder="Last name" required><br> 
<input type="textarea" name="description" placeholder="Description" required><br> 
<select name="category"> 
    <option value="front-end">Front-end developer</option> 
    <option value="back-end">Back-end developer</option> 
    <option value="design">Designer</option> 
</select><br> 
<input type="file" name="fileToUpload" placeholder="CV"><br> 

<button type="submit" name="submit">Submit</button> 
</form> 
+1

введите код – cmorrissey

+0

http://php.net/manual/en/function.error-reporting.php –

+0

'$ target_file = $ target_dir. "/". basename ($ _ FILES ["fileToUpload"] ["name"]); '- отсутствует косая черта. –

ответ

0

Пока я не могу говорить точно, почему mkdir не работает в этом случае, вам нужно сделать несколько изменений в том, как вы развиваете.

Прежде всего, используйте абсолютные URL-адреса. Это добавляет немного накладных расходов в вашей первоначальной разработке, но, несомненно, стоит того. Например:

Если у вас есть дата загрузки каталога в том же каталоге, что и сценарий, вы могли бы сделать что-то вроде этого define('UPLOADS_DIR', realpath('uploads'));

Тогда для категории пути: define('CAT_PATH', realpath(UPLOADS_DIR . "/" . $category));

И продолжать эту тенденцию до ваши каталоги правильно отображены.

Далее, бросить это в верхней части вашего скрипта:

error_reporting(E_ALL);

Почему это?

Потому что вы получите ответ false при попытке установить реальный путь, если этот путь не найден. Это означает, что при попытке создать каталог вы будете ошибаться, вместо того, чтобы создавать каталог в другом месте. При правильной процедуре (например, убедитесь, что эти константы не являются FALSE), вы узнаете до, пытаясь создать каталог. Это, и вы будете знаете, не сомневайтесь, что ваши пути верны. Это бесценная информация для любого разработчика!

Вступайте в привычку развиваться с константами/переменными, которые отображаются на реальные пути. Последнее, что вы хотите, это либо опечатки, либо другая человеческая ошибка, вызывающая ошибки внутри ваших скриптов. Вы устанавливаете путь один раз, и вам больше не придется беспокоиться об ошибках. Повторно используйте константу снова и снова, и будьте уверены, что ваш путь верен.

Отчеты об ошибках поможет вам отладить все проблемы, с которыми вы сталкиваетесь. Ваша цель, когда что-то не работает, должна выяснить, в чем причина. В программировании ничего нет, просто «не работает», скорее, вещи просто не работают еще. Вам решать разобраться в ошибке (-ах) и найти решение (ы).

Теперь - как и для вашей проблемы

if (!file_exists("uploads/$category/$random")) { 
    mkdir("uploads/$category/$random", 0777, true); 
} 

Код выше, имеет несколько врожденных проблем. Во-первых, вы не проверяете, существует ли uploads/$category независимо от $random. Я лично изменил бы это на что-то вроде этого:

if (!file_exists("uploads/$category")) { 
    mkdir("uploads/$category", 0777, true); 
} 

if (!file_exists("uploads/$category/$random")) { 
    mkdir("uploads/$category/$random", 0777, true); 
} 

Теперь вот если бы я хотел сделать очень быстрое решение.В качестве альтернативы, я прохожу через каждый каталог и абсолютно уверен, что каждый каталог по всему пути существовал, если бы я использовал случайные пути, но это только я. Вышеприведенное может работать отлично для ваших нужд.

Вам нужна некоторая отладка - похоже, вы не используете остановки внутри хорошей среды IDE. Если это так, просто бросить некоторую отладочную информацию в этом вы можете позже отбрасывают/комментарий:

if (!file_exists("uploads/$category")) { 
    mkdir("uploads/$category", 0777, true); 
} else { 
    echo "{$category} exists...<br>"; 
} 

if (!file_exists("uploads/$category/$random")) { 
    mkdir("uploads/$category/$random", 0777, true); 
} else { 
    echo "{$category}/{$random} exists...<br>"; 
} 

фигурные скобки не нужны внутри эхо, как вы, наверное, уже знаете, но я привык.

Запустите код. Что происходит? Если он говорит, что оба пути существуют, и вы их не видите, у вас есть ошибки в ваших путях/кодах. Попробуйте что-то вроде этого, чтобы убедиться, что вы на самом деле создание каталогов, где вы думаете, что вы:

if (!file_exists("uploads/$category")) { 
    mkdir("uploads/$category", 0777, true); 
} else { 
    echo realpath("uploads/$category") . " exists...<br>"; 
} 

if (!file_exists("uploads/$category/$random")) { 
    mkdir("uploads/$category/$random", 0777, true); 
} else { 
    echo realpath("uploads/$category/$random") . " exists...<br>"; 
} 

И таким образом, именно поэтому вы создаете константы Realpath основы. Это облегчает необходимость в вышеуказанном коде и полностью успокаивает вас при попытке отладки таких вещей, как mkdir, не функционирует должным образом.

Ваша цель отладочной этот mkdir вопрос очень ясно:

  1. Убедитесь, что пути он ищет/СОЗДАНИЯ являются именно, что вы думаете.
  2. Убедитесь, что с правилом выше, mkdir действительно не создает каталогов.
  3. Убедитесь, что сообщение об ошибках включено, так что если/mkdir не удается, вы знаете почему.
  4. Решите проблему, предотвращающую функционирование, как ожидалось, mkdir.

Я могу с уверенностью уверить вас, что нет проблемы с mkdir в качестве функции PHP. Что-то есть предотвращение это от работы - оно не сломано. Вы должны быть в этом менталитете, чтобы действительно отладить его.

Это все, о чем я действительно могу думать об этом, и я не могу понять ваш второй вопрос. Повторите свой вопрос, чтобы уточнить, и я попытаюсь ответить на второй вопрос.

Удачи вам!