|
include ("includes/wideimage/lib/wideimage.php"); |
Både indlæggelse af billeder og sletning af billeder udføres via Form / $_POST kredsløbet. Billedbehandlingen kan indgå i en Form samtidig med håndteringen af andre input types.
De aktuelle $_FILES-parametre kan ses med:
echo '<pre>Indholdet af $_FILES er: <br /> '; print_r($_FILES); echo '</pre>';
Selvom håndtering af et billede pr. db-record (f.eks. brugerstamdata) kan integreres med programmerne til håndtering af stamdataene, synes det i praksis fordelagtigt at adskille de to opgaver (koden bliver simplere og muligheden for genbrug større).
Ved adskillelse kan man nøjes med 2 programmer til håndtering af billeder:
Nedenfor er der links til 4 programmer, der kan anvendes som grundlag for at etablere upload og sletning af billeder.
![]() | Update til brug i admin-system |
![]() | Delete til brug i admin system |
![]() | Update til brug i offentlig del af sitet |
![]() | Delete til brug i offentlig del af sitet |
Som det kan ses er programmerne næsten identiske to og to - næsten kun filstierne er forskellige.
Koden til opbygning af billednavne og anvendelse af wideimage skal tilpasses den aktuelle situation. Der skal også tilpasses, alt efter om der skal håndteres en enkelt eller flere versioner (lille, mellsem, stor) af hvert billede.
Når der kun skal være et billede pr. stamdatarecord, indlægges billednavnet i et felt deri.
Her kan ses programmer til hhv. insert, update og delete:
Update (Hvor genindlæggelse af billede kan undlades).
Indlæggelse af billeder kan opdeles i 5 faser:
Koden til punkterne 3 og 4 placeres umiddelbart før koden til pkt. 5.
"enctype"-parameteret skal indsættes og input type = "file" benyttes. Input type "file" giver mulighed for at selektere billede til overførsel:
<form method="post" enctype="multipart/form-data"> <table> <tr><td>Hent billedfil til upload</td><td> </td><td><input type="file" name="billed"/></td></tr> |
Formen kan indeholde et ubegrænset antal andre input types.
Billedet - og tilknyttede data - overføres i sin egen globale php-variabel: $_FILES - der er indlejret i $_POST.
if (isset($_POST['upload'])) { . $type = trim ($_POST['type']); . ............................... // UDTRÆK fra post $src = str_replace (' ','', (trim ($_FILES['billed']['name']))); // navn på billede ved upload (xxx.jpg) $src_error = $_FILES['billed']['error']; // fejlkode fra upload // VALIDERING if ($src_error == 0) { $tmp_billed = WideImage::load('billed'); // billed = 'name' fra input type 'file'. Indeholder alle billedets bits. } if ($src == "") { $fejlbeskeder .= "Der er ikke uploadet noget billede "; } elseif( mb_check_encoding($src, 'ASCII') === false ) {$fejlbeskeder .= "Billedet's filnavn indeholder æ,ø å eller andre ikke-tilladte tegn. Ret billedets navn manuelt før upload. "; } ............................... // UDTRÆK fra post $src = str_replace (' ','', (trim ($_FILES['billed']['name']))); // navn på billede ved upload (xxx.jpg) $src_error = $_FILES['billed']['error']; // fejlkode fra upload; if ($src_error == 0); { $tmp_billed = WideImage::load('billed'); // billed = 'name' fra input type 'file'. Indeholder alle billedets bits.; } // VALIDERING if ($src_error == 0) { $tmp_billed = WideImage::load('billed'); // billed = 'name' fra input type 'file'. Indeholder alle billedets bits. } if ($src == "") { $fejlbeskeder .= "Der er ikke uploadet noget billede "; } elseif( mb_check_encoding($src, 'ASCII') === false ) {$fejlbeskeder .= "Billedet's filnavn indeholder æ,ø å eller andre ikke-tilladte tegn. Ret billedets navn manuelt før upload. "; } . . // echo '<pre>Indholdet af $files er '; print_r($_files); echo '</pre>'; |
Fra $_FILES skal udtrækkes 3 variabler, der her alle anvender 'billed' som parameter. 'billed' kommer fra 'name'-parameteret i <input type="file"... :
Det er væsentligt, at de 2 sidste variabler udtrækkes i den viste rækkefølge.
Med "print_r"-funktionen kan vises en automatisk genereret oversigt over indholdet i $_FILES. Det er væsentlig, at overførslerne er stabile og fejlfri.
For at undgå utilsigtet overskrivning ved gemning og at flere databaserecords trækker samme billede, er det relevant, at sikre entydighed i billednavne. Der skal endvidere tages hensyn til, at samme billede kan være gemt i indtil 3 forskellige størrelser - placeres nemmest i hver sin mappe med samme billednavn.
En blandt flere måder at sikre entydighed på er ved at foranstille / erstatte navnet med en automatisk genereret tidsstreng (aaaammddttmmss eller aammddttmmss).
Ændringen fra et almindeligt navn til et navn med tidsprefix kan foretages således:
$tid = date("YmdGis"); $up_billed = $tid . "_" . $billed; |
For at kunne gemme et billede skal stien til den / de aktuelle mappe(r) også være beskrevne. De gøres ved at opbygge en / flere "$xx_stiogbilled"-variabler.
$up_sti = "../y_images/" . $row['z_mappe'] . "/" ; $up_stiogbilled = $up_sti . $up_billed; |
Efter at WideImage har udtrukket det fysiske billede fra den temporære fil i $_FILES til en variabel (her $tmp_billed), kan denne i WideImage bruges et ubegrænset antal gange til at lave nye bearbejdede billeder, der kan gemmes individuelt. Nedenfor vil blive vist 3 måder, der forudsætter at forarbejdet med billednavne og -stier er gjort:
$tmp_billed->saveToFile($up_stiogbilled); |
$resized = $tmp_billed->resizeDown(, 300); $resized->saveToFile($up_stiogbilled); |
Eksempler: $smaller = $image->resize('50%'); $smaller = $image->resize('100', '100', 'inside', 'down'); is the same as $smaller = $image->resizeDown(100, 100, 'inside'); |
$crop = $tmp_billed->crop('par1', 'par2', par3, par4); $crop->saveToFile($up_stiogbilled); |
Eksempler: $cropped = $img->crop(10, 10, 150, 200); // crops a 150x200 rect at (10, 10) $cropped = $img->crop(-100, -50, 100, 50); // crops a 100x50 rect at the right-bottom of the image $cropped = $img->crop('25%', '25%', '50%', '50%'); // crops a 50%x50% rect from the center of the image $cropped = $img->crop("right", "bottom", 100, 200); // crops a 100x200 rect from right bottom $cropped = $img->crop("center", "middle", 50, 30); // crops a 50x30 from the center of the image |
Udover resize og crop kan WideImage foretage ganske mange andre manipulationer af $tmp_billed før gemning. Beskrivelse af dem kan findes i WideImage's dokumentation: .
Ved Insert opbygges "insert"-datastrengen således:
INSERT INTO tabel ( aa, bb, cc, dd_billed, ee, ff ) VALUES ('$aa', '$bb', '$cc', '$up_billed', '$ee', '$ff')"; |
Ved update skal der anvendes en "update"-datastreng, når der indgår et billede i opdateringen, og en anden, når der ikke indgår et billede deri.
if ($billed != "") { $up_query = " UPDATE tabel SET aa = '$aa', bb = '$bb', cc_billed = '$up_billed', dd = '$dd', ee = '$ee' WHERE xx_id = $xx_id"; $up_result = mysqli_query ($db_link, $up_query) or die (mysqli_error ($db_link)); } else { $up_query = " UPDATE tabel SET aa = '$aa', bb = '$bb', dd = '$dd', ee = '$ee' WHERE xx_id = $xx_id"; $up_result = mysqli_query ($db_link, $up_query) or die (mysqli_error ($db_link)); } |
For at slette et billede behøves kun en sti, et billednavn fra databasen og en PHP-funktion. - Og det meste er delvis genbrug:
// sti og billede $up_sti = "../y_images/" . $row['z_mappe'] . "/" ; $up_stiogbilled = $up_sti . $billed; // $billed = billednavn i DB. Hentet med GET ved programstart //funktion unlink($up_stiogbilled); |