geef nieuwe naam aan afbeelding met counter
Met een upload script voor afbeeldingen laat ik een thumbnail maken en worden vervolgens beide weggeschreven in 2 verschillende mappen (fullsize) en (thumbnail).
Daarna worden ze in een database geschreven waar ik 2 aparte rijen heb gemaakt, één voor de fullsize en één voor de thumbnail.
Op het moment dat er een spatie of speciale karakters in de naam van de afbeelding voorkomen die geupload wor, gaat het mis bij het ophalen van de thumbnail afbeelding. om dit te voorkomen dacht ik om zelf een geheel nieuwe naam aan te maken voor de thumbnail zoals bijvoorbeeld thumb1, thumb2, thumb3 enz.
Hoe zou ik dit kunnen creëren zonder dat er dubbele namen worden gemaak?
Dit is het deel van mijn script
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
for($i = 0; $i < count($tmp_name_array); $i++){
if(move_uploaded_file($tmp_name_array[$i], "../upload/fullsize/".$name_array[$i])){
//SUCCES
//maak thumbnail
create_thumbnail('../upload/fullsize/'.$thumbpath[$i], "../upload/thumbnail/".$name_array[$i], '350', '230');
if(in_array($file_extention, $movieType)){
$thumbSize_link = "";
}else{
$thumbSize_link = $name_array[$i];
}
$fullSize_link = $name_array[$i];
$insertValuesSQL .= "('".$fullSize_link."', '".$thumbSize_link."', NOW()),";
}
}
?>
for($i = 0; $i < count($tmp_name_array); $i++){
if(move_uploaded_file($tmp_name_array[$i], "../upload/fullsize/".$name_array[$i])){
//SUCCES
//maak thumbnail
create_thumbnail('../upload/fullsize/'.$thumbpath[$i], "../upload/thumbnail/".$name_array[$i], '350', '230');
if(in_array($file_extention, $movieType)){
$thumbSize_link = "";
}else{
$thumbSize_link = $name_array[$i];
}
$fullSize_link = $name_array[$i];
$insertValuesSQL .= "('".$fullSize_link."', '".$thumbSize_link."', NOW()),";
}
}
?>
En wegschrijven naar de database
Code (php)
Ik zie graag wat ideeën :-)
Of geef deze afbeelding een hash.
Hoe je dit inricht hangt ook af van hoe je deze afbeeldingen serveert / wie deze afbeeldingen mag zien.
Als je alle afbeeldingen via een script serveert, dan kun je daar een heleboel dingen regelen, inclusief het afschermen voor onbevoegden. Als echter de afbeeldingen in een publieke directory staan en de namen van alle afbeeldingen een oplopend nummer zijn dan kun je alles natuurlijk bekijken...
Hoe je dit inricht hangt dus mede/sterk af van hoe je eventuele toegang tot de afbeeldingen wilt regelen.
Gewijzigd op 08/09/2018 01:26:12 door Thomas van den Heuvel
Dank voor je reactie. De foto site is niet gebruiker verbonden, deze site is alleen voor vrienden die inloggen met het zelfde gegevens.
Zelf dacht ik inderdaad ook om met de ID te werken, maar weet alleen niet goed hoe ik de eerst volgende ID toe ken aan een afbeelding.
Nu is het zo dat eerst de afbeelding geupload en opgeslagen word en vervolgens in de database word gezet.
Als je een ID wilt meegeven denk ik dat eerst de afbeelding URL in de database word gezet en een ID teruggeeft en gebruikt om de afbeelding op te slaan?
Gewijzigd op 08/09/2018 19:45:47 door Jop B
Met AutoIncrement geeft je database zelf een nieuw opvolgend en vrij beschikbare ID toe aan het volgende record.
Klopt maar dan zal ik de situatie moeten omdraaien?
Eerst de de naam laten aanmaken met ID en dan pas opslaan?
Hoe maak ik dan de juiste query?
Dus zet gewoon een AutoIncrement aan op je veld, en alles komt goed.
Als de query gelukt is, sla je het bestand op.
Met mysqli_insert_id() kan je het nieuwe ID ophalen van de laatste INSERT-actie. Mocht je hierna nog een andere INSERT gebruiken, dan je het resultaat van die functie ook opslaan in een variabele voor later in je script.
Gewijzigd op 08/09/2018 20:58:06 door - Ariën -
Ik laat nu eerste een rij vullen in de database, deze bestaat de volgende kolommen ID met auto_increment, fullsize image en thumbnail.
De kolom ID krijgt netjes een nummer
De kolom fullsize word gevuld met de bestandsnaam zoals hij is.
De thumbnail wil ik vullen met de ID+extensie (1.jpg, 2.jpg, 3.jpg enz..)
Vervolgens moet ik die ID koppelen aan de thumbnail functie zodat hij dit nummer ook opslaat.
Waar ik op vast loop is hoe kan ik met een query zorgen dat de kolom thumbnail gevuld word met het zelfde ID+ de extensie?
Jij kan gewoon in je INSERT-query eventueel een leeg veld inserten.
Je kan ook alle nodige velden specificeren, en het ID veld uitsluiten.
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Dus als ik dan een kolom maak met als waarde .jpg en dan bij het uitlezen van de database deze 2 kolommen combineer heb ik dus 1.jpg, 2.jpg en 3.jpg?
Het is gewoon een INT-veld die je ID noemt (of iets wat ermee te maken heeft).
Elk record zal MySQL dan zelf nummeren van 1,2,3 etc.... als je AutoIncrement aan hebt gezet een een Primary Key op je veld.
En met mysqli_insert_id() kan je het ID van de laatste INSERT ophalen, en die verwerk je in je functie. Je moet wel even de ".jpg" erachter frotten.
Jij hoeft niet te tellen, dat doet MySQL.
Gewijzigd op 09/09/2018 01:37:25 door - Ariën -
insert_id().
Maar buiten het juist declareren van de kolom hoef je omtrent nummering dus niets te regelen.
Je kent niets toe, dit regelt MySQL zelf. Elke keer als je een record aanmaakt in een tabel met een AUTO_INCREMENT kolom dan wordt aan zo'n kolom van dit record het eerstvolgende vrije nummer toegekend. Nadat je een INSERT-query hebt uitgevoerd op zo'n tabel kun je het volgnummer van het zojuist ingevoegde record opvragen met Maar buiten het juist declareren van de kolom hoef je omtrent nummering dus niets te regelen.
De afbeelding/thumbnail word opgeslagen in de map thumb, de bestandsnaam is thumb+ID+.jpg (thumb1.jpg, thumb2.jpg), ik heb dus toch bereikt wat ik wilde maken.
Maar ik zit met een error, namelijk:
Als ik 1 afbeelding upload gaat het goed, maar met meerdere gaat het niet goed.
Hoe heb ik het script gemaakt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
for($i = 0; $i < count($tmp_name_array); $i++){
$thumbSize_link = "thumb";
if(move_uploaded_file($tmp_name_array[$i], "../upload/fullsize/".$name_array[$i])){
$insertValuesSQL .= "('".$fullSize_link."', '".$thumbSize_link."', NOW()),";
}
if(!empty($insertValuesSQL)){
$insertValuesSQL = trim($insertValuesSQL,',');
$insert = mysqli_query($connection, "INSERT INTO SAimages (fullsize_name, thumbnail, uploaded_on) VALUES $insertValuesSQL");
if($insert){
$thumbID = mysqli_insert_id($connection);
create_thumbnail('../upload/fullsize/'.$fullSize_link, "../upload/thumbnail/thumb".$thumbID.".jpg", '350', '230');
}else{
$statusMsg = 'Niet gelukt';
}
}
}
?>
for($i = 0; $i < count($tmp_name_array); $i++){
$thumbSize_link = "thumb";
if(move_uploaded_file($tmp_name_array[$i], "../upload/fullsize/".$name_array[$i])){
$insertValuesSQL .= "('".$fullSize_link."', '".$thumbSize_link."', NOW()),";
}
if(!empty($insertValuesSQL)){
$insertValuesSQL = trim($insertValuesSQL,',');
$insert = mysqli_query($connection, "INSERT INTO SAimages (fullsize_name, thumbnail, uploaded_on) VALUES $insertValuesSQL");
if($insert){
$thumbID = mysqli_insert_id($connection);
create_thumbnail('../upload/fullsize/'.$fullSize_link, "../upload/thumbnail/thumb".$thumbID.".jpg", '350', '230');
}else{
$statusMsg = 'Niet gelukt';
}
}
}
?>
Kan ik op een of andere manier de AUTO ID's ook in een loop gebruiken en toewijzen aan de thumID variabel?
Gewijzigd op 10/09/2018 22:26:45 door Jop B
Zou moeten kunnen. Welke error krijg je dan?
Als ik 1 afbeelding doe krijg ik succes terug en als ik bijvoorbeeld 2 afbeeldingen doe kan hij de record niet opslaan.
Tip: Zet je SQL-query in een variabele. Dan kan je jouw query makkelijker debuggen.
Tip 2: Zorg ook voor foutafhandeling op je query.
"Error description: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('boom.png', 'thumb', NOW())' at line 1"
Dan kan je jouw SQL-query echo'en.
Ik durf te wedden dat je dus steeds $insertValuesSQL achteralkaar plakt, i.p.v. overschrijft.
Die punt hoort er dus niet.
met Pakt hij alleen de laatste die geupload word. is er een manier om deze mee te pakken in de loop?
Jop B op 10/09/2018 21:50:23:
De afbeelding/thumbnail word opgeslagen in de map thumb, de bestandsnaam is thumb+ID+.jpg
Waarom zou je daar dan nog thumb voor plakken als de directory al zo heet?
Ook hoef je geen kolommen te hebben voor de naam van de grote afbeelding noch de thumbnail als deze letterlijk overeenkomt met het auto-increment id? En de directories voor de afbeeldingen lijken mij iets voor configuratie, niet iets wat je hardcoded opslaat in de database. Als je de directories verplaatst is dit dan gewoon een kwestie van (een of) twee regels je configuratie aanpassen, in plaats van tig UPDATE-queries.
Het enige wat mij zinnig lijkt om bij te houden, als hier uberhaupt al variatie in zit, is een afbeeldingstype of -extentie.
Wat ik zou doen voor het opslaan is zoiets:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
doorloop loop
start transactie
insert record + noteer auto_increment id
sla afbeelding op met dit id
creeer + sla thumb op met dit id
indien geslaagd, commit, anders rollback + cleanup
einde loop
start transactie
insert record + noteer auto_increment id
sla afbeelding op met dit id
creeer + sla thumb op met dit id
indien geslaagd, commit, anders rollback + cleanup
einde loop
Gewijzigd op 10/09/2018 23:14:23 door Thomas van den Heuvel
Het gaat erom dat ik de ID wat door de database word gemaakt terug krijg en kan gebruiken in de thumbail functie. Als er 1 afbeelding word geupload krijgt hij netjes die ID maar dat is omdat dat dan ook meteen de laatste is voor de syntax
Als ik er meerdere doe krijg ik alleen de laatste ID terug. Ik wil dat hij in die loop ook de andere ID's aan de thumbnail functie geeft.
Zie toevoeging vorige reactie. De oplossing lijkt mij gewoon elke stap van de loop 1 compleet plaatje af te handelen (query, image + thumb van 1 upload).