Avatar billede dverghamster Nybegynder
16. juni 2010 - 14:34 Der 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.

Her er min kode:

<?php

$conn = mysqli_connect("medieskolerne.dk","hfelev15","hfelev15","hfelev15");

# 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)){
               
$image_path = $upload_dir.$billede2;
$image_path_new = "thumbs/thumbs_".$billede2;

$image = open_image($image_path);  //Open the image

if($image === false){
    echo "Ikke gyldigt fil format. Kun JPG, GIF & PNG er tilladt.";
}else{
    # Orginal file size
    $width = imagesx($image);
    $height = imagesy($image);
   
    # New file size
    $width_new = 200;
    $height_new = $height * ($width_new / $width);
   
    # Resize / resample the image
    $image_resized = imagecreatetruecolor($width_new,$height_new);
    imagecopyresampled($image_resized,$image,0,0,0,0,$width_new,$height_new,$width,$height);
   
    # Check if the images has been resized
    if(!isset($image_resized)){
        $image_resized = $image;
    };
   
    # Save the image
    imagejpeg($image_resized,$image_path_new);
   
    # Display resized image
    //echo "<img src='".$image_path_new."' />";

   
};

$minQuery = "UPDATE skoleopgaver SET billede2= '$image_path_new'  WHERE '$billede2'" or die(mysqli_error());
                                                                                                       
$result=mysqli_query($conn,$minQuery) or die(mysqli_error($conn));                                                                                                       

                //echo "<br>File $billede2 uploaded<br>";
            }else{
                echo "Error occoured while moving the file";
               
            };
        }else{
            # File type is allowed
            echo "File type is not allowed";
           
        };
  }else{
      # If there is not a file
      echo "Select a file for upload";
     
  };
};
mysqli_close($conn);

header("location:edit.php?p=1");
?>

<form action="upload_resize.php" method="POST" enctype="multipart/form-data">
<input type="file" name="fil" />
<input type="submit" name="submit" value="Upload" />
</form>

Håber der er en som kan hjælpe mig :-)

Hilsen
Ahler
Avatar billede dverghamster Nybegynder
16. juni 2010 - 14:35 #1
Hovsa, der uddeles selfv 300 point, og ikke kun de 60 point som der sikkert står.
16. juni 2010 - 17:06 #2
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.
Avatar billede dverghamster Nybegynder
16. juni 2010 - 22:35 #3
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.
16. juni 2010 - 23:11 #4
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"?
Avatar billede dverghamster Nybegynder
17. juni 2010 - 01:16 #5
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!
17. juni 2010 - 10:03 #6
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:

SKOLEOPGAVER2
ID billede2 billede1
1  sti1234  abc
2  sti4568  def
3  sti9012  ghi

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.
21. juni 2010 - 20:05 #7
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.)
Avatar billede dverghamster Nybegynder
21. juni 2010 - 21:11 #8
Ja, jeg undskylder min pludselige forsvinden. Jeg har dog løst problemet selv, og fandt ud af det var en relativ lille fejl der var lavet.

Fejlen var såmænd at database updateren ikke var sat indenfor uploadens array, og derfor blev afsluttet lige inden update blev sat igang.

Men jeg siger ellers rigtig mange tak for hjælpen, og for den tid du har brugt på mig! :)
Avatar billede dverghamster Nybegynder
21. juni 2010 - 21:11 #9
Giver mig selv et svar for at løse problemet.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester