Je krijgt alles informatie in de tabel voor dat product-ID en probeer het vervolgens als een afbeelding weer te geven. U moet de afbeelding openen vanuit de resultatenreeks of SELECT
alleen de afbeelding b.v. gebruik get_var
in plaats van get_results
en selecteer img
in plaats van *
:
$product_id = get_query_var('id');
$image = $wpdb->get_var("SELECT img FROM products WHERE id = ".$product_id);
Dit laat je trouwens open voor SQL-injectie, dus je zou echt $wpdb->prepare
moeten gebruiken om een variabele in uw zoekopdracht op te nemen, bijv.
$image = $wpdb->get_var(
$wpdb->prepare("SELECT img FROM products WHERE id = %d", $product_id)
);
BLOB-groottebeperking
Merk op dat een BLOB in MYSQL beperkt is tot 64 kb. Als uw afbeeldingen groter zijn, moet u een MEDIUMBLOB gebruiken van 16 MB
Sla het afbeeldingspad op in plaats van rechtstreeks in de database als een BLOB
Een meer praktische oplossing is om alleen het pad op te slaan.
Om dit te doen, moet je een map maken om de afbeeldingen naar te uploaden (bijvoorbeeld in mijn code hieronder, het is in de webroot en genaamd myimages
), en een nieuwe VARCHAR- of TEXT-kolom in uw database (deze heet img_path
in het onderstaande voorbeeld).
/* 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.";
}
Om de afbeelding uit de database op te halen en weer te geven:
$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.'" />';
De bovenstaande code is niet getest, maar het basisidee is er. Het werkt ook niet als er al een bestand met dezelfde naam bestaat, dus u kunt overwegen een tijdstempel aan de naam toe te voegen om deze uniek te maken.
Ref :