Загрузка изображения на сервер выполнена успешно, но имя файла в базе данных пусто

0

Я ценю ваши усилия, помогая новичкам, как я. У меня есть следующие проблемы и буду рад срочной помощи.

ПРОБЛЕМНЫЙ НОМЕР 1: Используя PHP и MySQL, я могу успешно загрузить изображение на сервер, но не так с именем файла, даже если другие параметры в моей форме успешно вставлены в базу данных. Я прочитал несколько сообщений по этой теме, в том числе здесь, на этом сайте, но я пока не могу решить проблему.

ПРОБЛЕМНЫЙ НОМЕР 2: Мне также нужна помощь по ограничению допустимого для загрузки файла TYPE (только gif, jpeg, png), а также размер файла (не более 100 КБ).

ПРОБЛЕМНЫЙ НОМЕР 3: Чтобы принудительно изменить размер всех изображений, загруженных в меньший размер эскиза 20 кбайт, и сохранить их в отдельной папке на сервере с отдельным именем файла в базе данных.

Ниже мой текущий PHP-код;

<?php 
if (!isset($_POST['upload'])) 
{ 
include ("submit_interview_test.php"); //shows form if it not been posted 
}

else 
{ 
if($_FILES['pic']['tmp_name'] == "none") 
{ 
echo "<b>File not successfully uploaded. Maybe check the filesize limit.</b>"; 
include ("submit_interview_test.php"); 
exit(); 
}

if(!ereg("image",$_FILES['pic']['type'])) 
{ 
echo "<b>File is not an image - try another file.</b>"; 
include ("submit_interview_test.php"); 
exit(); 
}

else 
{ 
$uploadDir = 'intervimages/'; 
$destination = $uploadDir.basename($_FILES['pic']['name']); 
$temp_file = $_FILES['pic']['tmp_name'];
include ("processinterview.php");
if ( move_uploaded_file ($temp_file,$destination) ) 
{ echo '<p>Your file has been successfully uploaded!</p>'; 
} 

else 
{ echo "Problem with picture upload!"; 
} 
} // end of else

} // end of else 
?> 

Это мой код processinterview.php;

<?php
include_once 'includes/db.php';
$sql="INSERT INTO interview (interviewer, media_house, category, interview_title, title_rider, personality, interview_body, source, published, temp_file, interview_date, location, interview_intro, date) VALUES ('$_POST[interviewer]','$_POST[media_house]','$_POST[category]','$_POST  [interview_title]','$_POST[title_rider]','$_POST[personality]','$_POST [interview_body]','$_POST[source]','$_POST[published]','$_FILES[temp_file]','$_POST[interview_date]','$_POST[location]','$_POST[interview_intro]',now())";

if (!mysql_query($sql))
{
die('Error: ' . mysql_error());
}
echo "1 interview record has been successfully added to the database.";
?>

И, это моя форма (submit_interview_test.php);

<form enctype="multipart/form-data" action="processinterview3.php" method="post">
<table bgcolor="#ececec" border="0" cellspacing="5">
<tbody>
<tr><td>Interview conducted by (Interviewer Name):</td><td><input size="30"  name="interviewer" type="text" /></td></tr>
<tr><td>Media house (e.g., Punch):</td><td><input size="30" name="media_house" type="text" /></td></tr>
<tr><td>Location (e.g., Ibadan or USA):</td><td><input type="text" size="30" name ="location" /></td></tr>
<tr><td>Interview Category (e.g., Local):</td><td><input type="text" size="30" name   ="category" /></td></tr>
<tr><td>Interview Personality:</td><td><input type="text"  size="30" name ="personality" /></td></tr>
<tr><td>Interview Title:</td><td><input type="text"  size="130" name ="interview_title" /></td></tr>
<tr><td>Title Rider:</td><td><input type="text"  size="130" name ="title_rider" /></td></tr>
<tr><td>Source (e.g., http://...):</td><td><input size="130" name="source" type="text" /></td></tr>
<tr>  <td valign="top">Interview Introduction:</td>
<td><textarea name="interview_intro" rows="3" cols="100"></textarea></td></tr>
<tr><td>Date of Interview (e.g., 26/09/2009):</td><td><input size="30" name="interview_date" type="text" /></td></tr>
<tr>  <td valign="top">Interview Main Content:</td>
<td><textarea name="interview_body" rows="12" cols="100"></textarea></td></tr>
<tr><td>Add Photo (Jpeg or gif not more than 80KB):</td><td><input type="file" name="pic"/></td></tr>
<tr><td valign="top">Publish rightaway?</td>
<td><input type="checkbox" name="published" value="1"> Yes (Leave this if this   Interview is not to be published yet)<br>
<tr><td>&nbsp;</td><td><input value="Submit Interview" type="submit" name="upload"/><font face="arial" size="1">&nbsp;&nbsp;Please check for any error before you submit</font></td></tr>
</tbody></table>

Спасибо за неприятности.

  • 0
    Вы открыты для sql Injection, и это должно быть решено довольно скоро :)
Теги:
filenames
photo

1 ответ

0

1) Ваш запрос вставляет $_FILES [temp_name] в качестве значения для хранения, когда вы должны использовать только $temp_name.

2) Используйте следующий массив типов mime для проверки (взятый из кода проверки загруженного изображения платформы Symfony):

<?php
  $valid_mimes = array(
    'image/jpeg',
    'image/pjpeg',
    'image/png',
    'image/x-png',
    'image/gif',
  );

  if(!in_array($_FILES['pic']['type'], $valid_mimes)) {
    // invalid mime
  }

Размер вашего файла можно проверить с помощью значения $_FILES ['pic'] ['size'].

3) Существует множество библиотек, доступных для создания образов и эскизов, ваш конкретный выбор будет зависеть от того, что, если таковое имеется, поддерживает графические библиотеки, которые вы установили на своем сервере (GD или ImageMagick). Любой из следующих результатов может работать для вас: http://www.google.com/search?q=php+image+thumbnail

  • 0
    Спасибо Cryo за быстрый ответ. Я не вижу $ _FILE [temp_name] в моем коде, поэтому я догадался, что вы ссылались на $ _FILE [temp_file] в моем коде обработки (то есть processinterview.php). Я изменил это на $ temp_file (чтобы заменить $ _FILE [temp_file]. На самом деле, на этот раз я получил значение в базе данных, но это непонятные вещи, такие как / tmp / php4hY4er, / tmp / phppUzQbA и т. Д., А не фактические имена файлов.
  • 0
    / tmp / php4hY4er - это временный файл на сервере - вам нужно скопировать его в постоянное место и сохранить это имя файла
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню