2012-04-14 2 views
2

Ниже приведена часть кода, в котором он загружает файл (fileImage) в папку (ImageFiles). Но то, что я хочу сделать, это INSERT расположение файла (местоположение файла загружено) в базу данных с помощью кода INSERT VALUES. Я хочу, чтобы местоположение файла было вставлено в поле «ImageFile», а для «ImageId» я хочу, чтобы он отображал строку «IMG», а затем включал число после строки. Для примера:Как правильно вставить эти значения в базу данных

В моей таблице базы данных, если она звучит так:

ImageId  ImageFile 

IMG1  ImageFiles/penguins.png 
IMG2  ImageFiles/desert.png 
IMG3  ImageFiles/jellyfish.jpg 

Тогда, если я загрузить файл с моего компьютера «tulips.png» в папку ImageFiles, то в базе данных он должен вставить такие значения ниже:

ImageId ImageFile 

IMG4  ImageFiles/tulips.png 

Но как это можно закодировать? Ниже мой код в тот момент, который загружает файл успешно и содержит только частичное кодирование вставки значений:

 move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
     "ImageFiles/" . $_FILES["fileImage"]["name"]); 
     $result = 1; 

     $imagesql = "INSERT INTO Image (ImageId, ImageFile) 
    VALUES (""); 

mysql_query($imagesql); 
+0

Действительно ли строки 'ImageId' называются IMG [некоторое число]? – Repox

+0

Да, он назван с IMG [some number] – user1324106

ответ

3

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

Это облегчит вам процесс, так как вам нужно будет только автоматически вставлять отдельные поля и автоматически обновлять поля.

$imagesql = "INSERT INTO Image (ImageFile) VALUES ('ImageFiles/".mysql_real_escape_string($_FILES['fileImage']['name'])."')"; 

ImageId должен тогда иметь тип INT как ПЕРВИЧНЫЙ КЛЮЧ с AUTO INCREMENT. Это также хороший способ разработки ваших таблиц.

0

Прежде всего: ВСЕГДА использовать mysql_real_escape_string при вставке значения в БД.

Тогда:

$query = "INSERT INTO `Image` (`ImageId`, `ImageFile`) 
      VALUES ('".mysql_real_escape_string($_FILES["fileImage"]["tmp_name"])."','". 
        mysql_real_escape_string($_FILES["fileImage"]["name"])."' 
     );"; 
+0

Это добавляет имя временного файла в качестве ImageId, чего не хочет OP? – Repox

2

Вам нужно добавить значения в запросе, как этот

$imagesql = "INSERT INTO Image (ImageId, ImageFile) 
VALUES ('$imageName','$imageFile');"; 

Но сначала убедитесь, что вы убегаете значения правильно, чтобы избежать каких-либо проблем. Также обратите внимание, что больше не рекомендуется использовать функции mysql_. Вместо того, чтобы использовать mysqli_ эквиваленты или еще лучше PDO (с PDO он будет автоматически обрабатывать DB ускользающей для вас.

2

Вы можете использовать MySql Авто инкремент .. вам не нужно беспокоиться о IMGIMG2 ... и т.д.

См: http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html

Пример:

Предположение: ImageId является полем автоматического приращения

http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html

$tmpName = $_FILES ["fileImage"] ["tmp_name"]; 
$fileName = $_FILES ["fileImage"] ["tmp_name"]; 

move_uploaded_file ($tmpName, $fileName); 
$sql = "INSERT INTO Image (ImageId, ImageFile) VALUES (NULL,'%s');"; 
mysql_query (sprintf ($sql, mysql_real_escape_string ($fileName))); 

Если вы хотите, чтобы ваши изображения

$sql = "SELECT ImageId, ImageFile FROM Image"; 
$result = mysql_query ($sql); 
while ($row = mysql_fetch_assoc ($result)) { 
    echo "IMG", $row ["ImageId"], " = ", 'ImageFiles/' , $row ["ImageFile"], PHP_EOL; 
} 

Причина Почему вы должны использовать этот

А. IMG и ImageFiles/ постоянны сохранение их в несколько раз не является эффективным

B. integer на основе идентификатора будет также быстрее, чем varchar и работает лучше на `РЕГИСТРИРУЙТЕСЬ

C. Для того, чтобы получить IMGX где X это значение приращения будет включать в себя несколько вызовов SQL ..и не эффективны

+0

Привет, ImageId не автоматически увеличивается, это varchar. Он должен всегда отображать строку «IMG», но затем в конце строки он отображает следующее число, например. Если последним ImageId является «IMG3», то следующим ImageId должен быть «IMG4», затем следующий «IMG5» и т. Д. – user1324106

4

Если вы используете PHP PDO-объект, это упростит ваш код и сделает его более безопасным в одно и то же время (используя подготовленные операторы).

Вот пример того, как вы могли бы сделать, что:

Во-первых, хранить идентификатор как AUTO_INCREMENT-эд INT, а не «IMG #», как это было бы сделать вещи проще (вам не нужно, чтобы вставить ID значение тогда)

DROP TABLE IF EXISTS tbl_img_store; 
CREATE TABLE tbl_img_store(
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(id), 
    filename VARCHAR(25) --increase this if you think you need to 
) ENGINE=InnoDB; 

Кроме того, создать таблицу для настройки конфигурации магазин, чтобы сделать вашу базу данных более эффективной:

DROP TABLE IF EXISTS tbl_img_config; 
CREATE TABLE tbl_img_config(
    img_path VARCHAR(50) 
); 
INSERT INTO tbl_img_config (img_path) VALUES ("http://img.mysite.com/?i="); 

Теперь вернемся к PHP, вы можете быстро вставить Загрузка изображений, подобных этому:

# Create a DB connection 
$db = new PDO("mysql:host='X.X.X.X';dbname='mydb'", $user, $pass); 

# Compile an array of image paths 
$img1path = "img1.png"; 
$img2path = "img2.png"; 
$img3path = "img3.png"; 
$images = array($img1path, $img2path, $img3path); 

# Create a query to insert the paths to the db 
$sql = "INSERT INTO tbl_img_store (filename) VALUES ('?'),('?'),('?');"; 
$query = $db->prepare($sql); 
$query->execute($images); 

# Check rows affected 
$rows = $query->rowCount(); 
echo "$rows images were saved."; 

Надеюсь, что это поможет.

1

Это то, что я делаю. Чтобы ответить на ваш вопрос, посмотрите ближе к концу второго файла, для mysql_query для SELECT LAST_INSERT_ID(). Обратите внимание, что я не вставляю идентификатор, но позволяю автозагрузке базы данных.

Изображение загружено через upload.php, часть которого выглядит следующим образом:

<form> 
<?php 

session_start(); 

if (isset($error["image"])) echo '<span class="error">'.$error["image"].'</span>'; else echo 'Select an image<span class="required"> *</span>'; 

if ($imgVars["is_image"] == "J") { 
    echo ' 
<input type="hidden" name="image_url" value="'.$imgVars["image_url"].'"> 
<input type="hidden" name="image_type" value="'.$imgVars["image_type"].'"> 
<input type="hidden" name="is_image" value="J"> 
<img src="'.$imgVars["image_url"].'" width="224" height="168" alt="Image"> 
<p>Change image?</p>'; 

?> 
<input type="file" name="image"> 
<input type="submit" name="upload" value="Upload" title="Upload your image"> 
</form> 

Затем загруженный файл обрабатывается через process.php, часть которого выглядит следующим образом:

<?php 

session_start(); 

if (!session_is_registered("error")) 
    session_register("error"); 

$error = array(); 

if (!session_is_registered("imgVars")) 
    session_register("imgVars"); 

foreach($_POST as $varname => $value) 
    $imgVars[$varname] = trim(EscapeShellCmd(stripslashes($value))); 

$imgVars = array(); 

if ($imgVars["is_image"] != 'J') { 
    $imgVars["is_image"] = 'N'; 
    if ($_FILES["image"]["size"] > 0) { 
     $size = GetImageSize($_FILES["image"]["tmp_name"]); 
     $width = $size[0]; 
     $height = $size[1]; 
     if(($width != 224) || ($height != 168)) { 
      $error["image"] = 'Image dimensions must be exactly 224 x 168 pixel!'; 
      $imgVars["is_image"] = "N"; 
     } 
     preg_match("/(\.\w+)$/", 
      $_FILES["image"]["name"],$match); 
     $imagetype = $match[1]; 
     if (!in_array(strtolower($imagetype), array(".jpg",".jpeg",".gif",".png"))) { 
      $error["image"] = 'You may upload only images of type JPEG, GIF and PNG!'; 
      $imgVars["is_image"] = "N"; 
     } 
     if ($imgVars["is_image"] == "J") { 
      $filename = time().$imagetype; 
      copy($_FILES["image"]["tmp_name"], "img/".$filename); 
      $imgVars["image_url"] = "img/".$filename; 
      $imgVars["image_type"] = $imagetype; 
     } 
    } else { 
     $error["image"] = 'Please upload an image!'; 
    } 
} 

if (count($error)) 
{ 
    header('Location: upload.php'); 
    exit(); 
} 

// connect to database 

$query = "INSERT INTO images SET image_url = '" . $imgVars["image_url"] . "'; 


if (!($result = @ mysql_query ($query, $connection))) 
    die("Your mysql error routine here."); 

$rs = mysql_query("SELECT LAST_INSERT_ID()", $connection); 
$lid = mysql_fetch_row($rs); 
$image_id = $lid[0]; 

if ($imgVars["is_image"] == 'J') { 
    rename ($imgVars["image_url"], "img/".$image_id.$imgVars["image_type"]); 
    $query = "UPDATE images SET image_url = 'img/".$image_id.$imgVars["image_type"]."' WHERE image_id = '".$image_id."'"; 
    if (!(@ mysql_query ($query, $connection))) 
     die("Your mysql error routine here."); 
} 

session_unregister("formVars"); 
session_unregister("fehler"); 

header('Location: danke.php'); 
exit(); 

?> 

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

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