geef nieuwe naam aan afbeelding met counter

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jop B

Jop B

08/09/2018 01:21:19
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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()),";
                    
                }

}

?>


En wegschrijven naar de database

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if(!empty($insertValuesSQL)){
            $insertValuesSQL = trim($insertValuesSQL,',');
            // Insert image file name into database
            $insert = mysqli_query($connection, "INSERT INTO SAimages (fullsize_name, thumbnail_name, uploaded_on) VALUES $insertValuesSQL");
}

?>


Ik zie graag wat ideeën :-)
 
PHP hulp

PHP hulp

23/12/2024 18:44:13
 
Thomas van den Heuvel

Thomas van den Heuvel

08/09/2018 01:25:29
Quote Anchor link
Maak de naam van de afbeelding gelijk aan het auto-increment id van het record wat deze afbeelding identificeert.
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
 
Jop B

Jop B

08/09/2018 19:45:32
Quote Anchor link
Hi Thomas,


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
 
- Ariën  -
Beheerder

- Ariën -

08/09/2018 20:45:45
Quote Anchor link
Met AutoIncrement geeft je database zelf een nieuw opvolgend en vrij beschikbare ID toe aan het volgende record.
 
Jop B

Jop B

08/09/2018 20:53:24
Quote Anchor link
Hi Ariën,

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?
 
- Ariën  -
Beheerder

- Ariën -

08/09/2018 20:56:30
Quote Anchor link
Het gaat om een ID die bij deze entiteit hoort: De afbeeldingen.
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 -
 
Jop B

Jop B

08/09/2018 23:37:11
Quote Anchor link
Oke maar waar ik nu op vastloop is het volgende

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?
 
- Ariën  -
Beheerder

- Ariën -

09/09/2018 00:32:50
Quote Anchor link
Niet nodig. Zoals ik al zei kent MySQL dat nummer zelf toe.
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, ...);
 
Jop B

Jop B

09/09/2018 00:48:18
Quote Anchor link
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?
 
- Ariën  -
Beheerder

- Ariën -

09/09/2018 00:57:53
Quote Anchor link
Nee.....
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 -
 
Thomas van den Heuvel

Thomas van den Heuvel

09/09/2018 01:48:53
Quote Anchor link
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 insert_id().

Maar buiten het juist declareren van de kolom hoef je omtrent nummering dus niets te regelen.
 
Jop B

Jop B

10/09/2018 21:50:23
Quote Anchor link
Wat ik heb is het volgende

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)
PHP script in nieuw venster Selecteer het PHP script
1
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';
                }
}
}

?>


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
 
- Ariën  -
Beheerder

- Ariën -

10/09/2018 22:22:38
Quote Anchor link
Zou moeten kunnen. Welke error krijg je dan?
 
Jop B

Jop B

10/09/2018 22:27:57
Quote Anchor link
Als ik 1 afbeelding doe krijg ik succes terug en als ik bijvoorbeeld 2 afbeeldingen doe kan hij de record niet opslaan.
 
- Ariën  -
Beheerder

- Ariën -

10/09/2018 22:47:03
Quote Anchor link
Je plakt $insertValuesSQL steeds achter elkaar, het lijkt mij dat je het steeds moet overschrijven per iteratie.

Tip: Zet je SQL-query in een variabele. Dan kan je jouw query makkelijker debuggen.
Tip 2: Zorg ook voor foutafhandeling op je query.
 
Jop B

Jop B

10/09/2018 22:55:54
Quote Anchor link
Deze fout krijg ik terug als ik een SQL fouthandeling erover gooi
"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"
 
- Ariën  -
Beheerder

- Ariën -

10/09/2018 22:59:25
Quote Anchor link
Dan raad ik zeker mijn twee tips aan. Dan weet je precies wat er gebeurt.
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.
 
Jop B

Jop B

10/09/2018 23:06:11
Quote Anchor link
De foutmelding heb ik weg gekregen maar blijf dat hij de ID's niet doet loopen.
met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $thumbID = mysqli_insert_id($connection);?>
Pakt hij alleen de laatste die geupload word. is er een manier om deze mee te pakken in de loop?
 
Thomas van den Heuvel

Thomas van den Heuvel

10/09/2018 23:06:27
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 10/09/2018 23:14:23 door Thomas van den Heuvel
 
Jop B

Jop B

10/09/2018 23:10:58
Quote Anchor link
@thomas,

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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $thumbID = mysqli_insert_id($connection);?>

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

10/09/2018 23:15:19
Quote Anchor link
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).
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.