Как я могу получить путь к файлу, который я загружаю? - PullRequest
0 голосов
/ 11 мая 2009

я развиваю cms.

Таблица клиентов содержит много полей, и одним из них является заголовок изображения.

Когда пользователь загружает файл (изображение), файл сохраняется в общей папке.

Поле заголовка изображения извлекает окончательное имя файла и сохраняет его в таблице.

Проблема в том, когда пользователь хочет обновить информацию. Если пользователь не хочет менять изображение, когда он нажимает «обновить», поле заголовка изображения становится пустым, поэтому путь к изображению становится пустым, и теперь он просто показывает (без изображения).

Вот что я пытался сделать:

Форма HTML:

    <p>
        <label for="image_caption">Image Caption:</label>
    <input name="image_caption" id="image_caption" type="text" class="formbox" size="60"  disabled="disabled" value="<?php echo htmlentities($row['image_caption']); ?>" /> 
    </p>                                                                                     
    <p>
        <label for="image">Insert image:</label>
        <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_FILE_SIZE; ?>" />
        <input type="file" name="image" id="foto" value="<?php echo htmlentities($row['image_caption']); ?>"/> 
    </p>
    <p>
        <?php 
        if($row['image_caption']!= ""){
        ?>
            <img src="../images/clientes/<?php echo $row['image_caption'];?>" width="194" height="145" title="Imagem cliente" class="floatright"/>
      <?php
        }else{
        ?>
            <img src="../images/sem_imagem.gif" width="194" height="145" title="Imagem não disponível" class="floatright"/><br />                                               
        <?php
        }
        ?>
  </p>        
    <p>
        <input type="submit" name="update" value="Update" />
        <input name="cliente_id" type="hidden" value="<?php echo $row['codigo']; ?>" />
    </p>

А теперь загрузите код PHP (я только что вставил код, который я хотел показать вам):

    // This checks if the file input is empty, and if it is, insert the value from the table that was previously inserted

    if(empty($_FILES['image']['name'])){
$image_caption = $row['image_caption'];

}else{

$image = str_replace(' ', '_', $_FILES['image']['name']);   
// move the file to the upload folder and rename it
move_uploaded_file($_FILES['image']['tmp_name'],UPLOAD_DIR.$foto);  
$image_caption = $image;
}   

Ответы [ 3 ]

1 голос
/ 11 мая 2009

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

РЕДАКТИРОВАТЬ: только что увидев ваш комментарий, у вас уже есть имя исходного файла, поэтому измените ваш PHP на:

if(empty($_FILES['image']['name'])){
    $image_caption = $_POST['image_caption'];
}else{
    ....(etc)

должно работать, нет?

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

0 голосов
/ 12 мая 2009

Я не уверен, правильно ли я понимаю, но я сделаю это, если вы заполните форму обновления данными из базы данных - тогда поле заголовка изображения не будет пустым, даже если парень изменил только свое имя и оставил все.

0 голосов
/ 11 мая 2009

Получаете ли вы информацию из базы данных после отправки формы? Я имею в виду, действительно ли $ row ['nome_foto'] содержит предыдущий путь?

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...