Запретить заполнение класса пустыми значениями - PullRequest
1 голос
/ 12 декабря 2011

Я написал скрипт загрузки на своем сайте, где пользователи могут загружать заранее определенное количество элементов (12 в моем случае).Пользователь может редактировать свой проект (конечно ...).
Поэтому я также написал скрипт обновления.Проект считывается из базы данных, и пользователь может повторно загрузить или удалить определенные файлы.Но я знаю, что когда пользователь не загружает новый файл, исходный файл перезаписывается пустым значением (имеет смысл, поскольку <input> пусто.
Но я хочу это предотвратить.Как мне это сделать?

Форма :

$activities = Project::getProjectById($_DB, $projectnumber);
if(!empty($activities)) {
    foreach($activities as $k => $v) {
        echo "<input type='text' value='".$v['name']."' name = 'newproject_name' />";
        $i = 1;
        while ($i <= 12) {
        if(!empty($v["photo$i"])) {
           echo "<img src='../files/".$v["photo$i"]."' width='200' height='200'  />";
           echo "<input type='file' name='images[]' />";
        }   
        $i++;
        }
     }
     echo "<input type=submit value='Update' name='submitted'>";
     echo "</form>"; 
}

PHP :

$project = new Project();
$project->name      = $_POST['newproject_name'];

$project->photo1    = $_FILES['images']['name'][0];
$project->photo2    = $_FILES['images']['name'][1];
$project->photo3    = $_FILES['images']['name'][2];
$project->photo4    = $_FILES['images']['name'][3];
$project->photo5    = $_FILES['images']['name'][4];
$project->photo6    = $_FILES['images']['name'][5];
$project->photo7    = $_FILES['images']['name'][6];
$project->photo8    = $_FILES['images']['name'][7];
$project->photo9    = $_FILES['images']['name'][8];
$project->photo10   = $_FILES['images']['name'][9];
$project->photo11   = $_FILES['images']['name'][10];
$project->photo12   = $_FILES['images']['name'][11];

if($project->updateProject($_DB, $projectnummer)) {
   $feedback = "<div class='feedback good'>ok!!</div>";
} else {
   $feedback = "<div class='feedback bad'>NOT ok!</div>";
}   

Вы не делаетенадо беспокоиться о функциях getProjectById и updateProject, они работают просто отлично, но, как вы видите, скрипт загрузит все пустые значения и перезапишет их в базу данных ...
Я бы хотелпредотвратить это! Любой совет?

РЕДАКТИРОВАТЬ :

 if (!empty($_FILES['images']['name'][0])) {
        $project->photo1    = $_FILES['images']['name'][0];
  }
  if (!empty($_FILES['images']['name'][1])) {
    $project->photo2    = $_FILES['images']['name'][1];
  }
  if (!empty($_FILES['images']['name'][2])) {
    $project->photo3    = $_FILES['images']['name'][2];
  }
  if (!empty($_FILES['images']['name'][3])) {
    $project->photo4    = $_FILES['images']['name'][3];
  }
  if (!empty($_FILES['images']['name'][4])) {
    $project->photo5    = $_FILES['images']['name'][4];
  }
  if (!empty($_FILES['images']['name'][5])) {
    $project->photo6    = $_FILES['images']['name'][5];
  }
  if (!empty($_FILES['images']['name'][6])) {
    $project->photo7    = $_FILES['images']['name'][6];
  }
  if (!empty($_FILES['images']['name'][7])) {
    $project->photo8    = $_FILES['images']['name'][7];
  }
  if (!empty($_FILES['images']['name'][8])) {
    $project->photo9    = $_FILES['images']['name'][8];
  }
  if (!empty($_FILES['images']['name'][9])) {
    $project->photo10   = $_FILES['images']['name'][9];
  }
  if (!empty($_FILES['images']['name'][10])) {
    $project->photo11   = $_FILES['images']['name'][10];
  }
  if (!empty($_FILES['images']['name'][11])) {
    $project->photo12   = $_FILES['images']['name'][11];
  }

Ответы [ 2 ]

1 голос
/ 13 декабря 2011
$project->photo1    = $_FILES['images']['name'][0];
$project->photo2    = $_FILES['images']['name'][1];
$project->photo3    = $_FILES['images']['name'][2];
$project->photo4    = $_FILES['images']['name'][3];
$project->photo5    = $_FILES['images']['name'][4];
$project->photo6    = $_FILES['images']['name'][5];
$project->photo7    = $_FILES['images']['name'][6];
$project->photo8    = $_FILES['images']['name'][7];
$project->photo9    = $_FILES['images']['name'][8];
$project->photo10   = $_FILES['images']['name'][9];
$project->photo11   = $_FILES['images']['name'][10];
$project->photo12   = $_FILES['images']['name'][11];

можно переписать как

for ($i = 0; $i <=11; $i++) {
    $photo = 'photo' . ($i + 1);
    $project->$photo   = $_FILES['images']['name'][$i];
}

И вы можете возобновить все ваши изменения с помощью:

for ($i = 0; $i <=11; $i++) {
    $photo = 'photo' . ($i + 1);
    if ( ! empty($_FILES['images']['name'][$i])) {
        $project->$photo = $_FILES['images']['name'][$1];
    }
}
1 голос
/ 13 декабря 2011

Может быть, вам следует использовать функцию is_uploaded_file() ( LINK )?

EDIT:

for($i = 0; $i <= 11; $i++) {
  if(!is_uploaded_file($_FILES['images']['name'][$i]))
     $project->photo[$i] = $_FILES['images']['name'][$i];
}
...