2010-04-15 4 views
0

Когда я отправляю новое имя, а не новый аватар, я получаю следующее сообщение об ошибке аватара Please upload a .gif, .jpeg, .jpg or .png image!. Я хочу, чтобы иметь возможность отправлять новое имя, только не загружая новый аватар каждый раз, когда я отправляю форму без получения сообщения об ошибке аватара Please upload a .gif, .jpeg, .jpg or .png image! может кто-нибудь помочь мне исправить эту проблему?PHP и MySQL отправить сообщение об ошибке

Адрес: PHP-код.

if (isset($_POST['submitted'])) { 

    $mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"SELECT users.* 
           FROM users 
           WHERE user_id=3"); 

    $first_name = mysqli_real_escape_string($mysqli, htmlentities(strip_tags($_POST['first_name']))); 

$user_id = '3'; 

if(isset($_FILES["avatar"]["name"]) && $_FILES['avatar']['size'] <= 5242880) { 

    if($_FILES["avatar"]["type"] == "image/gif" || $_FILES["avatar"]["type"] == "image/jpeg" || $_FILES["avatar"]["type"] == "image/jpg" || $_FILES["avatar"]["type"] == "image/png" || $_FILES["avatar"]["type"] == "image/pjpeg") { 

     if (file_exists("../members/" . $user_id . "/images/" . $_FILES["avatar"]["name"])) { 
      echo '<p class="error">' . mysqli_real_escape_string($mysqli, htmlentities(strip_tags(basename($_FILES["avatar"]["name"])))) . ' already exists! '; 
     } else if($_FILES["avatar"]["name"] == TRUE) { 
      move_uploaded_file($_FILES["avatar"]["tmp_name"], 
      "../members/" . $user_id . "/images/" . mysqli_real_escape_string($mysqli, htmlentities(strip_tags(basename($_FILES["avatar"]["name"]))))); 
      $avatar = mysqli_real_escape_string($mysqli, htmlentities(strip_tags(basename($_FILES["avatar"]["name"])))); 
     } 

    } else if($_FILES["avatar"]["type"] != "image/gif" || $_FILES["avatar"]["type"] != "image/jpeg" || $_FILES["avatar"]["type"] != "image/jpg" || $_FILES["avatar"]["type"] != "image/png" || $_FILES["avatar"]["type"] != "image/pjpeg") { 
     echo '<p class="error">Please upload a .gif, .jpeg, .jpg or .png image!</p>'; 
    } 

} else if($_FILES['avatar']['size'] >= 5242880) { 
    echo '<p class="error">Please upload a smaller pic!</p>'; 
} else if($_FILES["avatar"]["name"] == NULL) { 
    $avatar = NULL; 
} 


if(isset($_FILES["avatar"]["name"]) && $_FILES['avatar']['size'] <= 5242880) { 

     if (mysqli_num_rows($dbc) == 0) { 
       $mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
       $dbc = mysqli_query($mysqli,"INSERT INTO users (user_id, first_name, avatar) 
              VALUES ('$user_id', '$first_name', '$avatar')"); 
     } 

     if ($dbc == TRUE) { 
       $dbc = mysqli_query($mysqli,"UPDATE users 
              SET first_name = '$first_name', avatar = '$avatar' 
              WHERE user_id = '$user_id'"); 

       echo '<p class="changes-saved">Your changes have been saved!</p>'; 

     } 

     if (!$dbc) { 
       print mysqli_error($mysqli); 
       return; 
     } 

    } 

} 
+0

челобитной e знайте о следующем: свойство 'type' информации в' $ _FILES' не является надежным способом тестирования типа mime. Он может быть подделан. Вы бы лучше использовали FileInfo http://www.php.net/manual/en/book.fileinfo.php. Кроме того, ваши SQL-запросы являются общедоступными для SQL-инъекций http://en.wikipedia.org/wiki/SQL_injection. Вы должны рассмотреть возможность использования подготовленных инструкций. –

+0

Извините, я упустил вызовы 'mysqli_real_escape_string()'. Поэтому не обращайте внимания на материал SQL-инъекции. –

ответ

0

Вам просто нужно добавить чек, чтобы узнать, указали ли они новое изображение для своего аватара (или оставили его пустым). В этом случае, не зная, как ваша форма создана, вы могли бы просто проверить, что размер больше нуля (Исеть()/пустой() может возвращать неожиданные результаты в данном случае):

if($_FILES['avatar']['size'] > 0) { ... } 

Редактировать В ответ на ваш комментарий, вы измените следующую строку (в том числе фиксации базовой логической ошибки):

} else if($_FILES["avatar"]["type"] != "image/gif" || $_FILES["avatar"]["type"] != "image/jpeg" || $_FILES["avatar"]["type"] != "image/jpg" || $_FILES["avatar"]["type"] != "image/png" || $_FILES["avatar"]["type"] != "image/pjpeg") { 

к:

} else if($_FILES["avatar"]["size"] <= 0 && $_FILES["avatar"]["type"] != "image/gif" && $_FILES["avatar"]["type"] != "image/jpeg" && $_FILES["avatar"]["type"] != "image/jpg" && $_FILES["avatar"]["type"] != "image/png" && $_FILES["avatar"]["type"] != "image/pjpeg") { 
+0

Где я могу поместить этот код? – peakUC

+0

Обновлен мой ответ. –

Смежные вопросы