16. juni 2010 - 14:34Der er
8 kommentarer og 1 løsning
Upload+Resize Database mysql
Jeg har et problem med noget Upload resize, jeg kan i princippet godt finde ud af at uploade billed stien til min database, men problemet opstår idet den smider stierne ind i alle tabellerne.
Til den heldige vinder som kan redde ud i trådende, er der 300 point.
# Function to open any kind of image function open_image ($file){ # JPEG: $im = @imagecreatefromjpeg($file); if ($im !== false) {return $im;}; # GIF $im = @imagecreatefromgif($file); if ($im !== false) {return $im;}; # PNG $im = @imagecreatefrompng($file); if ($im !== false) {return $im;}; # GD File: $im = @imagecreatefromgd($file); if ($im !== false) {return $im;}; # GD2 File: $im = @imagecreatefromgd2($file); if ($im !== false) {return $im;}; # WBMP $im = @imagecreatefromwbmp($file); if ($im !== false) {return $im;}; # XBM $im = @imagecreatefromxbm($file); if ($im !== false) {return $im;}; # XPM $im = @imagecreatefromxpm($file); if ($im !== false) {return $im;}; # Try and load from string: $im = @imagecreatefromstring(file_get_contents($file)); if ($im !== false) {return $im;}; return false; };
# File-field name $file_field_name = "fil"; # Submit-field name $submit_field_name = "submit";
# Allowed file-types $allow_types = array('jpg','gif','png'); # Directory where files will be uploaded to $upload_dir = "thumbs/";
# Check if submit-button is clicked if (isset($_POST[$submit_field_name])){ #Check if there is a file if (is_uploaded_file($_FILES[$file_field_name]['tmp_name'])){ # Get file extension $file_ext = strtolower(pathinfo($_FILES[$file_field_name]['name'], PATHINFO_EXTENSION)); $billede2 = date('dmyHis').mt_rand().".".$file_ext;
# Check if file extension is allowed if (in_array($file_ext, $allow_types)){ # Move file to the upload directory if (move_uploaded_file($_FILES[$file_field_name]['tmp_name'], $upload_dir.$billede2)){
dverghamster, du siger at "den smider stierne ind i alle tabellerne." I den kode du viser forekommer der kun en tabel, "skoleopgaver." Kan det passe at problemet er at stien bliver indsat i alle raekkerne? Det kunne godt passe med at WHERE klausulen i $minQuery ser maerkelig ud.
Det maa vaere saaledes at "skoleopgaver" tabellen har mindst to kolonner hvoraf en hedder "billede2" og indeholder billedstier. En anden kolonne som jeg her skal kalde kolonne2 indeholder data af den slags som du har i $billede2. Der maa allerede vaere data i tabellen og de data vil du forandre med en UPDATE query.
En korrekt UPDATE query kunne for eksempel vaere "UPDATE skoleopgaver SET billed2 = '$image_path_new' WHERE kolonne2 = '$billed2'" Hvis du kun siger "UPDATE skoleopgaver SET billed2 = '$image_path_new'" saa vil billedstien $image_path_new blive indsat i alle raekkerne i tabellen. WHERE klausulen er til for at begraense updaten til en enkel eller et par raekker, nemlig den eller de raekker der i kolonne2 har vaerdien i $billede2. Fordi din WHERE klausul kun siger "WHERE '$billede2' vil jeg gaette paa at din mysqli version ikke forstaar WHERE klausulen og derfor ignorerer den saaledes at den nye billedsti ikke bliver begraenset til den eller de rigtige raekker men kommer i alle raekker.
Proev at gaa tilbage til de kilder eller eksempler du har brugt til din kode og se om du har sprunget noget over i din WHERE klausul. Maaske loeser det problemet.
Hvad angaar points saa har du oprettet spoergsmaalet med 60 points og det kan der ikke bagefter laves om paa. Hvis du har grunde til at give yderligere points, for eksempel fordi medlem xyz gav dig mere end du havde forventet, kan du oprette et nyt spoergsmaal der hedder "Points til xyz." I spoergsmaalets tekst henviser du til det oprindelige spoergsmaal og forklarer kort hvorfor du giver ekstra points. Der maa ikke gives mere end 200 points ialt for et spoergsmaal, saa et "points til xyz" spoergsmaal maa i dette tilfaelde hoejst vaere paa 140 points. Klik paa FAQ i menuen oeverst paa siden for yderligere oplysninger.
Det er muligvis mig som har forklaret mig en smule forkert, selve min tabel hedder skoleopgaver, deri ligger 2 feltnavne, hvoraf den ene så hedder billede2. Det skal så være muligt via uploaden at kunne uploade et billede sti ind til den pågældende feltnavn, altså kun den ene række, og ikke alle id'erne ned, lige pt har jeg 30 rækker eller id'er ned.
Håber det evt gav lidt mening :)
Mht. til point, så må jeg jo give 60 point til den værdige person som løser mit problem! :) Forresten tak for informationen.
Du bekraefter mine formodninger, at problemet er at den nye billedsti bliver sat ind i alle tabellens raekker og at der er to felter (jeg sagde kolonner hvilket er den samme forskel) i tabellen "skoleopgaver" hvoraf den ene er billede2 som indeholder billed-stier.
Saa snakker du om "..den person som loeser mit problem!" Velkommen til Eksperten. Her drejer det sig om hjaelp til selvhjaelp. Saa du skal nok have en dverghamster til at loese problemet. Jeg foreslog dig at forbedre din WHERE klausul, og jeg haaber dette forslag vil blive til hjaelp, enten ved at det, efter afproevning, viser sig at virke eller ved at det ikke virker og du derfor kan indsnaevre dit soegefelt.
Hvad har du staaende i felt_nummer_2? Er det muligt at din WHERE klausul ikke skal vaere "WHERE '$billede2'" men "WHERE felt_nummer_2 = $billede2"?
Undskyld, er helt ny herinde. Er klart der skal selvhjælp til og forlanger heller ikke at en person skriver koden for mig eller lign.
Vis det kan være til nogen hjælp så er min database struktur her:
CREATE TABLE IF NOT EXISTS `skoleopgaver` ( `id` int(11) NOT NULL AUTO_INCREMENT, `titel` text NOT NULL, `placering` int(11) NOT NULL, `submenu` int(11) NOT NULL, `content` int(11) NOT NULL, `beskrivelse` text NOT NULL, `billede1` text NOT NULL, `billede2` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=24 ;
titel, placering, submenu, content & beskrivelse er altsammen en del af min dynamiske menu. Og er derfor lige meget..
Jeg har prøvet at kigge på de ting du har sagt indtil videre, men har desværre ikke rigtig kunne komme frem til noget nærmere, om hvorvidt det er mig som ikke rigtig forstår det, ved jeg dog ikke :) Men håber alligevel ikke du har opgivet håbet om at hjælpe mig!
Det er nok muligt at vi taler forbi hinanden og at jeg derfor maa opgive haabet om at kunne hjaelpe. Hvad konkret mener du med "Jeg har prøvet at kigge på de ting du har sagt indtil videre, men har desværre ikke rigtig kunne komme frem til noget nærmere.." Fordi jeg skoenner at problemet ligger i din WHERE klausul foreslog jeg dig at proeve at forbedre den. Har du undersoegt det og viser dine undersoegelser at det ikke kan vaere der problemet ligger saaledes at der skal soeges andre steder i koden? (I saa fald hvordan bar du dig ad?) Eller har du ikke undersoegt WHERE klausulen fordi du ikke er klar over hvordan? I saafald, lad os brainstorme lidt. Jeg ser at du har en formular hvor brugeren kan browse og vaelge en fil og trykke paa Upload. Er det naar brugeren har trykket paa Upload at problemet opstaar? Og er problemet at den valgte sti kommer til at staa i feltet 'billede2' i alle tabellens raekker? Hvis det er saaledes, hvad skulle der vaere sket? Vil du have en ny raekke i tabellen med den valgte sti? I saafald skal du ikke bruge en UPDATE query men en INSERT query. (INSERT INTO skoleopgaver(billede2) VALUES('$image_path_new'). Eller skal den valgte sti indsaettes i en bestaaende raekke i tabellen hvor der allerede staar en sti som saa skal erstattes? Hvis det er tilfaeldet, hvordan ved du saa hvilken raekke i tabellen du vil have den nye sti? Staar der noget i en af de andre felter der bestemmer i hvilken raekke den nye sti skal komme?
Her er et simpelt eksempel. Lad os tage denne tabel:
Hvis brugeren saa i formularen vaelger en ny sti, sti3456 og den skal i tabellen erstatte stien i den raekke hvor billed1 = def saa kan du bruge denne query:
UPDATE SKOLEOPGAVER2 SET billede2 = 'sti3456' WHERE billede1 = 'def'
Eller hvis du vil bruge parametre hvor stien staar i variabelen $image_path_new og 'def' staar i variabelen $billede2 bliver din query saaledes:
UPDATE SKOLEOPGAVER2 SET billede2 = '$image_path_new' WHERE billede1 = '$billede2'
Hvis du er parat til at investere den noedvendige tid, studere ovenstaaende kritisk, afproeve det, rapportere konkret hvad du gjorde og hvad der skete, og velsagtens laere mere om sql, saa har jeg maaske en chance for at hjaelpe.
Ellers tror jeg at jeg kommer til kort og maa opgive og stoppe. Hvis du saa faar hjaelp fra anden side saa til lykke. Hvis du ikke faar hjaelp saa glem ikke at lukke spoergsmaalet. Man lukker et spoergsmaal ved at acceptere et svar, et indlaeg markeret med gult, saa i det tilfaelde maa du selv oprette et svar og acceptere det og derved give de 60 punkter tilbage til dig selv.
Jeg har ikke modtaget nogen reaktion. Hvis du har sendt noget er det nok gaaet tabt - i saafald send venligst igen. Hvis paa den anden side du er stoppet og spoergsmaalet ikke laengere er relevant saa luk venligst spoergsmaalet (jeg forklarede hvordan man goer i mit tidligere indlaeg.)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.