2013-08-31 6 views
0

Несколько месяцев назад я начал кодировать свою первую динамическую страницу ... изучая все, начиная с нуля и заканчивая нулями.Вставить картинки в базу данных - PHP - MySQL С именем пользователя

Получил несколько ударов здесь и там, так что это еще один.

Это страница с недвижимостью, на которой люди могут добавлять списки и как таковые. Я прочитал некоторые известные темы справа here и there о проблеме с картинками внутри базы данных. Я просто решил использовать БД, потому что мне нужно что-то начать.

Я использовал это tutorial для начала. Через несколько часов, вуаля, я смог вставить картинки на реальном сервере. Очень счастлив.

Но тогда возникает проблема. Фотографии должны быть прикреплены к имени пользователя (или электронной почте). На сайте есть защищенные страницы с именем пользователя, когда вы пытаетесь вставить материал.

Это основной файл для вставки фотографий в БД. Заметьте, я добавил имя пользователя в код, но имя пользователя не вставлено, просто изображение. Мне нужно знать, кто что вставляет.

Существует вопрос, который вы можете просто пропустить: фотографии должны быть прикреплены к адресу. Когда пользователь выбрал фото и нажал кнопку загрузки, могу ли я иметь поле ввода с адресом, где одна и та же кнопка будет выполнять две функции одновременно? (если у меня есть две кнопки, пользователь не может обойти оба. Таким образом, мы получаем изображения и адрес в одно и то же время, а в обратной стороне - имя пользователя). Я бы знал, как иметь две кнопки, два запроса.

Большое вам спасибо за вашу помощь. Мне это действительно нужно.

$query = sprintf(
     "insert into images (filename, mime_type, file_size, file_data, username) 
      values ('%s', '%s', %d, '%s','%s')", 
     mysql_real_escape_string($image['name']), 
     mysql_real_escape_string($info['mime']), 
     $image['size'], 
     mysql_real_escape_string(
      file_get_contents($image['tmp_name'])), 
    mysql_real_escape_string(
      file_get_contents($_SESSION['user']) 
     ) 
    ); 

вот полный код.

<?php 
//error_reporting(E_ALL); 
//ini_set("display_errors", 1); 
require("common.php"); 
if(empty($_SESSION['user']))  
    { 
     header("Location: ../index.php"); 
     die("Redirecting to .../index.php"); 
    } 

?> 

Эта первая часть приведенного выше кода предназначена только для проверки того, вошел ли пользователь в систему. Затем код.

<?php 
    require_once('globalsConfigPic1.php'); 

    function assertValidUpload($code) 
    { 
     if ($code == UPLOAD_ERR_OK) { 
      return; 
     } 

     switch ($code) { 
      case UPLOAD_ERR_INI_SIZE: 
      case UPLOAD_ERR_FORM_SIZE: 
       $msg = 'Image is too large'; 
       break; 

      case UPLOAD_ERR_PARTIAL: 
       $msg = 'Image was only partially uploaded'; 
       break; 

      case UPLOAD_ERR_NO_FILE: 
       $msg = 'No image was uploaded'; 
       break; 

      case UPLOAD_ERR_NO_TMP_DIR: 
       $msg = 'Upload folder not found'; 
       break; 

      case UPLOAD_ERR_CANT_WRITE: 
       $msg = 'Unable to write uploaded file'; 
       break; 

      case UPLOAD_ERR_EXTENSION: 
       $msg = 'Upload failed due to extension'; 
       break; 

      default: 
       $msg = 'Unknown error'; 
     } 

     throw new Exception($msg); 
    } 

    $errors = array(); 

    try { 
     if (!array_key_exists('image', $_FILES)) { 
      throw new Exception('Image not found in uploaded data'); 
     } 

     $image = $_FILES['image']; 

     // ensure the file was successfully uploaded 
     assertValidUpload($image['error']); 

     if (!is_uploaded_file($image['tmp_name'])) { 
      throw new Exception('File is not an uploaded file'); 
     } 

     $info = getImageSize($image['tmp_name']); 

     if (!$info) { 
      throw new Exception('File is not an image'); 
     } 
    } 
    catch (Exception $ex) { 
     $errors[] = $ex->getMessage(); 
    } 

    if (count($errors) == 0) { 
     // no errors, so insert the image 

     $query = sprintf(
     "insert into images (filename, mime_type, file_size, file_data, username) 
      values ('%s', '%s', %d, '%s','%s')", 
     mysql_real_escape_string($image['name']), 
     mysql_real_escape_string($info['mime']), 
     $image['size'], 
     mysql_real_escape_string(
      file_get_contents($image['tmp_name'])), 

     mysql_real_escape_string(
      file_get_contents($_SESSION['user']) 
     ) 
    ); 

     mysql_query($query, $db); 

     $id = (int) mysql_insert_id($db); 

     // finally, redirect the user to view the new image 
     header('Location: view.php?id=' . $id); 
     exit; 
    } 
?> 
<html> 
    <head> 
     <title>Error</title> 
    </head> 
    <body> 
     <div> 
      <p> 
       The following errors occurred: 
      </p> 

      <ul> 
       <?php foreach ($errors as $error) { ?> 
        <li> 
         <?php echo htmlSpecialChars($error) ?> 
        </li> 
       <?php } ?> 
      </ul> 

      <p> 
       <a href="upload.php">Try again</a> 
      </p> 
     </div> 
    </body> 
</html> 
+0

-1 для самой идеи хранения изображений в базе данных. –

ответ

-1

Да! Вот частичное решение для первой части:

$query = sprintf(
      "insert into images (filename, mime_type, file_size, file_data, username) 
       values ('%s', '%s', %d, '%s','%s')", 
      mysql_real_escape_string($image['name']), 
      mysql_real_escape_string($info['mime']), 
      $image['size'], 
      mysql_real_escape_string(
       file_get_contents($image['tmp_name'])), 

      mysql_real_escape_string (
       htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8') 
      ) 
     ); 

Сейчас работает на картинку, чтобы быть связан с адресом.