2010-10-07 12 views
0

J'utilise le plugin jQuery Uploadify pour télécharger des fichiers, et je stocke le nom de l'image avec le chemin dans la base de données avec une requête mysql simple, puis le récupérer.Comment stocker un tableau de noms d'images dynamiquement dans la base de données en utilisant PHP

ma table de base de données MySQL utilise les entités suivantes,

id int(20) 
image_url varchar(255) 

ma procédure de sauvegarde d'image est telle que d'abord, je Renommez le fichier, donnez-lui un nom unique et le déplacer vers le répertoire désiré. puis stockez le nom de l'image avec le chemin dans la base de données.

actuellement en utilisant la simple instruction mysql INSERT je stocke un seul nom de fichier.

maintenant je veux télécharger le tableau des noms d'image avec chemin. ou je veux stocker autant d'image que je veux dynamiquement dans la seule table col image_url, pour une raison quelconque je prévois de stocker 4 images ou plus, je veux que toutes les quatre images aient un numéro d'identification particulier.

Comment puis-je le faire?

merci

Répondre

2

Edit 2
j'ai supprimé les scripts précédents, voici une nouvelle:

essentiellement ce que je veux obtenir est lors de l'insertion dans la base de données je voudrais stocker le chemin de l'image avec des noms en tant que tableaux. afin que je puisse stocker autant d'images que je veux dans un ID particulier, par exemple un ID 1 aura 3 images, ID 2 aura 5 images, ID 3 aura 4 images et ainsi de suite

Pour ce faire, ajoutez une entrée distincte pour chaque URL d'image. Vous pouvez également utiliser une entrée unique et stocker toutes les URL en tant que tableau, mais puisque vous stockez cette dernière dans une base de données peu utile. Le stockage de chaque entrée séparément facilite considérablement l'accès et la mise à jour des données. De plus, assurez-vous que le champ "id" de votre tableau n'est pas une clé primaire/incrémentation automatique. Sinon, vous ne pourrez pas utiliser le même identifiant plus d'une fois. Je fixe ici:

// array with your images 
$images = array('url1','url2','url3'); 

// determine a new id 
$sql = "SELECT MAX(id) FROM images"; 
$res = mysql_query($sql); 
list($id) = mysql_fetch_row($res); 

// highest current id, plus one 
$id++; 

// now create a values array to insert in the database 
$values = array(); 

foreach ($images as $image) { 
    $values[] = "($id, '".mysql_real_escape_string($image)."')"; 
} 

// comma-separate the values 
$values = implode(',',$values); 

// run the query 
$sql = "INSERT INTO images (id, image_url) VALUES $values"; 
mysql_query($sql);

Si vous ne voulez stocker des tableaux, il est préférable de serialize les données et utiliser unserialize lorsque vous le récupérer. Exemple:

$images = array(...); 

$images = serialize($images); 

$sql = "INSERT INTO images (image_url) VALUES ($images)";

Pour ajouter des images, vous devez alors d'abord récupérer les données, unserialize le tableau, mettre à jour le tableau avec les nouvelles images, sérialisation à nouveau, mettre à jour l'entrée de la base de données.

+0

essentiellement ce que je veux obtenir est lors de l'insertion dans la base de données je voudrais stocker le chemin d'image avec des noms sous forme de tableaux. afin que je puisse stocker autant d'images que je veux dans un ID particulier, par exemple un ID 1 aura 3 images, ID 2 aura 5 images, ID 3 aura 4 images et ainsi de suite. –

+0

Mis à jour ma réponse. – Alec

1

Ce n'est pas normalized bien du tout, mais vous pourrait faire:

<?php 

// ... your code here ... 

try { 
$dbh = new PDO('mysql:dbname=' . $your_database_name . ';host=' . $your_database_host, $your_database_username, $your_database_password); 
} catch (PDOException $e) { 
throw new Exception('Database connection failed: ' . $e->getMessage()); 
} 

$stmt_insert = $dbh->prepare("INSERT INTO images('url_array') VALUES (:image_array_json)"); 
$stmt_insert->execute(array(':image_array_json', json_encode($image_array))); 

// ... et cetera ... 

?> 

...et de récupérer le tableau (si vous connaissez le image_id):

<?php 

// ... your code here ... 

try { 
$dbh = new PDO('mysql:dbname=' . $your_database_name . ';host=' . $your_database_host, $your_database_username, $your_database_password); 
} catch (PDOException $e) { 
throw new Exception('Database connection failed: ' . $e->getMessage()); 
} 

$stmt_retrieve = $dbh->prepare("SELECT url_array FROM images WHERE image_id=:image_id"); 
$stmt_retrieve->execute(array(':image_id', $image_id)); 

$ret = $stmt_retrieve->fetch(PDO::FETCH_ASSOC); 

$image_array = json_decode($ret['url_array']); 

// ... et cetera ... 

?> 
Questions connexes