Проверка файлов PHP с использованием операторов If - PullRequest
0 голосов
/ 05 февраля 2009

Привет, я новичок в php, но я следил за некоторыми уроками, но, похоже, они не работают, поэтому я попытался их адаптировать. Я протестировал этот код, и он работает до некоторой степени, но есть кое-что еще, что я не могу разобраться, php-файл не загружается (хорошо), но детали все еще записываются в базу данных, хотя $ ok предлагается быть установлен на 0 (не хорошо). Возможно, будет проще, если объяснить, что здесь произойдет:

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

Мой код до сих пор:

<?php

//This is the directory where images will be saved
$target = "images/";
$target = $target . basename( $_FILES['photo']['name']);
$ok=0; 


//This gets all the other information from the form
$name= mysql_real_escape_string ($_POST['nameMember']);
$bandMember= mysql_real_escape_string ($_POST['bandMember']);
$pic= mysql_real_escape_string ($_FILES['photo']['name']);
$about= mysql_real_escape_string ($_POST['aboutMember']);
$bands= mysql_real_escape_string ($_POST['otherBands']);

$uploaded_size=$_FILES['photo']['file_size']; 
if ($uploaded_size > 350000)
{
echo "Your file is too large, 35Kb is the largest file you can upload.<br>";
$ok=0;
} 
if ($uploaded_type =="text/php")
{
echo "No PHP files<br>";
$ok=0;
} 

if (!($uploaded_type =="image/jpeg"))
{
echo "JPEG<br>";$ok=1;
} 

if ($uploaded_type =="image/gif")
{
echo "GIf<br>";$ok=1;
} 

if (empty($pic)){
echo "You haven't uploaded a photo, a default will be used instead.<br/>";$ok=1;}


if ($ok==0)
{
Echo "Sorry your file was not uploaded, please try again with the correct format.";
}

//If everything is ok we try to upload it
else
{ 

// Connects to your Database
mysql_connect("localhost", "*******", "******") or die(mysql_error()) ;
mysql_select_db("project") or die(mysql_error()) ;

//Writes the information to the database
mysql_query("INSERT INTO dbProfile (nameMember,bandMember,photo,aboutMember,otherBands)
VALUES ('$name', '$bandMember', '$pic', '$about', '$bands')") ;

//Writes the photo to the server
if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))
{

//Tells you if its all ok
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory<br/>";
print "<a class=\"blue\" href=\"createMember.php\">Add Another Record</a> | <a class=\"blue\" href=\"listMember.php\">Band Member Profiles and Affiliates Menu</a>";
}
else {

//Gives and error if its not
echo "<p>If you have uploaded a picture there may have been a problem uploading your file.</p>";
print "<a class=\"blue\" href=\"createMember.php\">Add Another Record</a> | <a class=\"blue\" href=\"listMember.php\">Band Member Profiles and Affiliates Menu</a>";
}
}
?> 

Приветствия заранее. CHL

1 Ответ

1 голос
/ 05 февраля 2009

Ошибка, вероятно, заключается в следующем: if:

  if (!($uploaded_type =="image/jpeg"))
  {
    echo "JPEG<br>";$ok=1;
  }

Поскольку каждый раз, когда вы загружаете изображение, у которого нет типа содержимого, равного «image / jpeg», $ ok оценивается как 1, поэтому все записывается в базу данных.

Но также обратите внимание, что простая проверка типа MIME может привести к неприятностям, поскольку пользователь может подделать MIME-тип файла.

Вы можете использовать Imagick, чтобы получить правильный тип изображения MIME, например. Подробности здесь: http://de2.php.net/manual/en/function.imagick-identifyimage.php

Редактировать: только что заметил, что $ uploaded_type не инициализируется нигде в вашем скрипте. Как я уже сказал, вы можете сделать приблизительную оценку типа MIME, используя $ _FILES ['photo'] ['type'].

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