Du får alle oplysninger i tabellen for det produkt-id, og forsøg derefter at vise det som et billede. Du skal have adgang til billedet fra resultatarrayet eller SELECT
bare billedet f.eks. brug get_var
i stedet for get_results
og vælg img
i stedet for *
:
$product_id = get_query_var('id');
$image = $wpdb->get_var("SELECT img FROM products WHERE id = ".$product_id);
Dette giver dig i øvrigt åben for SQL-injektion, så du burde virkelig bruge $wpdb->prepare
at inkludere en variabel i din forespørgsel, f.eks.
$image = $wpdb->get_var(
$wpdb->prepare("SELECT img FROM products WHERE id = %d", $product_id)
);
BLOB-størrelsesbegrænsning
Bemærk, at en BLOB i MYSQL er begrænset til 64kb. Hvis dine billeder er større end dette, skal du bruge en MEDIUMBLOB, som er 16MB
Gem billedstien i stedet for direkte i databasen som en BLOB
En mere praktisk løsning er at gemme stien.
For at gøre dette skal du oprette en mappe at uploade billederne til (f.eks. i min kode nedenfor, den er i webroden og kaldes myimages
), og en ny VARCHAR- eller TEXT-kolonne i din database (den hedder img_path
i eksemplet nedenfor).
/* 1. Define the path to the folder where you will upload the images to,
Note, this is relative to your web root. */
define (MY_UPLOAD_DIR, "myimages/");
$imagefilename = basename( $_FILES['image']['name']);
/* 2. define the full path to upload the file to, including the file name */
$fulluploadpath = get_home_path(). MY_UPLOAD_DIR . $imagefilename;
$image_name = strip_tags($_FILES['image']['name']);
$image_size = getimagesize($_FILES['image']['tmp_name']);
/* 3. Do your validation checks here, e.g. */
if($image_size == FALSE) {
echo 'The image was not uploaded';
}
/* 4. if everything is ok, copy the temp file to your upload folder */
else if(move_uploaded_file($_FILES['image']['tmp_name'], $fulluploadpath )) {
/* 5. if the file was moved successfully, update the database */
$wpdb->insert(
$table,
array(
'title' => $title,
'description' => $description,
'brand' => $brand,
'img_name' => $image_name,
'img_path' => MY_UPLOAD_DIR . $imagefilename, /* save the path instead of the image */
)
);
} else {
//Display an error if the upload failed
echo "Sorry, there was a problem uploading your file.";
}
For at hente billedet fra databasen og vise det:
$product_id = get_query_var('id');
/* query the database for the image path */
$imagepath = $wpdb->get_var(
$wpdb->prepare("SELECT img_path FROM products WHERE id = %d", $product_id)
);
/* 6. Display the image using the path.
Because the path we used is relative to the web root, we can use it directly
by prefixing it with `/` so it starts at the webroot */
if ($imagepath)
echo '<img src="/'.$imagepath.'" />';
Ovenstående kode er ikke testet, men den grundlæggende idé er der. Det virker heller ikke, hvis der allerede findes en fil med det samme navn, så du bør overveje at tilføje et tidsstempel til navnet for at gøre det unikt.
Ref. :