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


<?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


<?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 :-)
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:

<?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?
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.
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.

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"
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.
De foutmelding heb ik weg gekregen maar blijf dat hij de ID's niet doet loopen.
met
<?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?
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:
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
@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
<?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.
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).

Reageren