Avatar billede lsskaarup Nybegynder
22. juli 2004 - 13:48 Der er 26 kommentarer og
1 løsning

Upload af billede til MySQL og udtræk af dette igen.

Jeg er ved at lave en side, hvor det skal være muligt at uploade et billede, og skrive en lille tekst til dette billede. Dette skal jeg så på en anden side have trukket ud igen, så det kan ses på en pæn måde. Jeg ved dog ikke hvordan jeg gør det.

Jeg har 2 inputs af h.h.v. textarea og file.

Textareaet hedder tilbudstekst og file-input hedder tilbudsbillede. Dette vil jeg så gerne have fat i så jeg kan få lagt det i DB'en, hvor billede er BLOB og teksten er VARCHAR.
Avatar billede detox Nybegynder
22. juli 2004 - 13:53 #1
Jeg vil klart anbefale at ligge billedet i en mappe og kun gemme referencen til det i databasen, samt selvfølgelig teksten og evt. type størrelse o.l., for ikke at gøre din DB for tung at arbejde med.
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 14:03 #2
Okay, men hvordan skal det så gøres ?
Avatar billede detox Nybegynder
22. juli 2004 - 14:16 #3
Hvad hedder din submit-knap, din tabel i databasen og felerne til tekst og sti?
Avatar billede detox Nybegynder
22. juli 2004 - 14:20 #4
ca. sådan her:

<?
require 'db.php'; // Forbindelse til din database
$uploaddir = "uploads/";
if (isset($_POST['submit']) && $_POST['submit'] == "Send Fil") {
    $source = $_FILES['tilbudsbillede']['tmp_name'];
    if (is_uploaded_file($source)) {
        if (tjektype($_FILES['tilbudsbillede']['type'])) {
            $dest = $uploaddir . $_FILES['tilbudsbillede']['name'];
            $dest = tjekfilnavn($dest);
            $tekst = $_POST['tilbudstekst'];
            if (move_uploaded_file($source, $dest)) {
                echo "Upload ok!";
                mysql_query("insert into tabel (tekst, sti) values ('$tekst', '$dest')") or die (mysql_error());
            } else {
                echo "No Upload!";
            }
        } else {
            echo "Denne filtype er ikke tilladt at uploade!";
        }
    } else {
        echo "Ulovlig handling!";
    }
}

function tjektype($type) {
    $tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg');
    if(!in_array($type, $tilladt)) {
        return false;
    }else{
        return true;
    }
}

function tjekfilnavn($filnavn) {
    $i = 0;
    $ext = strrchr($filnavn, '.');
    $navn = substr($filnavn, 0, -strlen($ext));
    while (is_file($filnavn)) {
        $i++;
        $filnavn = $navn . "_" . sprintf("%03u", $i) . $ext;
    }
    return $filnavn;
}
?>
Avatar billede detox Nybegynder
22. juli 2004 - 14:22 #5
Her er den så begrænset til billeder af typen JPG og PNG. Samtidig sørger den for at lave filnavnet om, hvis det findes i forvejen alá: filnavn.jpg (findes) bliver til: filnavn_001.jpg.
Avatar billede detox Nybegynder
22. juli 2004 - 14:23 #6
felerne / felterne :o)
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 14:57 #7
Jeg har ændret "Send fil" til upload, som mig submitknap hedder, med der sker et eller andet allerede i den første IF-sætning, eller rettere der sker ikke noget.
Avatar billede detox Nybegynder
22. juli 2004 - 15:11 #8
Både 'name' og 'value' skal passe:

<input type="submit" name="submit" value="Send Fil" />
Avatar billede detox Nybegynder
22. juli 2004 - 15:12 #9
og husk forskel på store og små bogstaver.
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 15:47 #10
Selvfølgelig, så skal jeg bare lige finde ud af hvordan $_files hvilker, da den ikke fanger noget.
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 16:34 #11
Jeg kan altså ikke rigtig gennemskue hvorfor jeg får den ulovlige handling
Avatar billede detox Nybegynder
22. juli 2004 - 17:05 #12
Her er et eksempel:

index.htm:

<form action="modtager.php" method="post" enctype="multipart/form-data">
<table style="width: 400px; border: none; padding: 2px;">
  <tr>
    <td>
      <label for="file">Fil til upload:</label>
    </td>
    <td>
    <input id="file" type="file" name="tilbudsbillede" />
    </td>
  </tr>
  <tr>
    <td>
      <label for="tekst">Kommentar:</label>
    </td>
    <td colspan="2">
      <textarea id="tekst" rows="5" cols="30" name="tilbudstekst"></textarea>
    </td>
  </tr>
  <tr>
    <td colspan="2">
      <input id="sub" type="submit" name="submit" value="Send Fil" />
    </td>
  </tr>
</table>
</form>

modtager.php:

<?
require 'db.php'; // Forbindelse til din database
$uploaddir = "uploads/";
if (isset($_POST['submit']) && $_POST['submit'] == "Send Fil") {
    $source = $_FILES['tilbudsbillede']['tmp_name'];
    if (is_uploaded_file($source)) {
        $type = $_FILES['tilbudsbillede']['type'];
        if (tjektype($type)) {
            $dest = $uploaddir . $_FILES['tilbudsbillede']['name'];
            $dest = tjekfilnavn($dest);
            $tekst = $_POST['tilbudstekst'];
            $size = $_FILES['tilbudsbillede']['size'];
            if (move_uploaded_file($source, $dest)) {
                echo "Upload ok!";
                mysql_query("insert into tabel (tekst, sti, size, type) values ('$tekst', '$dest', '$size', '$type')") or die (mysql_error());
            } else {
                echo "No Upload!";
            }
        } else {
            echo "Denne filtype er ikke tilladt at uploade!";
        }
    } else {
        echo "Ulovlig handling!";
    }
}

function tjektype($type) {
    $tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg');
    if(!in_array($type, $tilladt)) {
        return false;
    }else{
        return true;
    }
}

function tjekfilnavn($filnavn) {
    $i = 0;
    $ext = strrchr($filnavn, '.');
    $navn = substr($filnavn, 0, -strlen($ext));
    while (is_file($filnavn)) {
        $i++;
        $filnavn = $navn . "_" . sprintf("%03u", $i) . $ext;
    }
    return $filnavn;
}
?>
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 17:28 #13
Okay, det forstår jeg ikke. Hvis jeg tager dit eksempel, så virker det næsten. Jeg kan dog ikke få lov til at oprette filen. Jeg får "Permission denied" i linien med if (move_uploaded_file($source, $dest)).

Men så langt kommer jeg aldrig i min egen, men jeg kan ikek lige se nogle forskel.
Her er min kode:
include 'forbindelse.php';

$uploaddir = "uploads/";
if (isset($_POST['submit']) && $_POST['submit'] == "Upload") {
    $source = $_FILES['tilbudsbillede']['tmp_name'];
    if (is_uploaded_file($source)) {
        if (tjektype($_FILES['tilbudsbillede']['type'])) {
            $dest = $uploaddir . $_FILES['tilbudsbillede']['name'];
            $dest = tjekfilnavn($dest);
            $tekst = $_POST['tilbudstekst'];
            if (move_uploaded_file($source, $dest)) {
                echo "Upload ok!";
                mysql_query("INSERT INTO RS_Tilbud (tekst, billede) VALUES ('$tekst', '$dest')") or die (mysql_error());
            } else {
                echo "No Upload!";
            }
        } else {
            echo "Denne filtype er ikke tilladt at uploade!";
        }
    } else {
        echo "Ulovlig handling!";
    }
} else {
    echo "der sker intet";
}

function tjektype($type) {
    $tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg');
    if(!in_array($type, $tilladt)) {
        return false;
    }else{
        return true;
    }
}

function tjekfilnavn($filnavn) {
    $i = 0;
    $ext = strrchr($filnavn, '.');
    $navn = substr($filnavn, 0, -strlen($ext));
    while (is_file($filnavn)) {
        $i++;
        $filnavn = $navn . "_" . sprintf("%03u", $i) . $ext;
    }
    return $filnavn;
}
Avatar billede detox Nybegynder
22. juli 2004 - 17:31 #14
og formen?
Avatar billede detox Nybegynder
22. juli 2004 - 17:33 #15
og du har lavet mappen: 'uploads' og givet læse/skriverettigheder til den?
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 17:37 #16
Ah måske det er læse/skriverettighederne det er galt med, men formen ser så denne ud <form name="admin" method="post" action="<?echo $PHP_SELF?>">. Der skulle vel ikke være noget galt i at jeg kalder siden igen.
Avatar billede detox Nybegynder
22. juli 2004 - 17:41 #17
Nej, det skulle være ok at lave det hele i en fil. Jeg vil foretrække:
<form name="admin" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
Men det var nu osse submit-knappen jeg tænkte på?
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 17:41 #18
Nu virker din, det var på grund af at jeg ikke have givet skriverettigheder til mappen. Så skal jeg bare have mig egen til at virke
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 17:42 #19
Nå, okay submitknappen er her <input name="submit" type="submit" value="Upload"> og ligger så i formen
Avatar billede detox Nybegynder
22. juli 2004 - 17:44 #20
Har du husket: enctype="multipart/form-data" i din form?
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 17:44 #21
nej skal det med og hvorfor ?
Avatar billede detox Nybegynder
22. juli 2004 - 17:45 #22
Det skal med når du uploader filer.
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 17:47 #23
Ja, det kan jeg se, men hvad gør det.
Avatar billede detox Nybegynder
22. juli 2004 - 17:50 #24
Det gør at du kan sende både tekst og filer fra samme form.
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 18:43 #25
Dejlig, nu virker det og jeg kan også se dem
Avatar billede lsskaarup Nybegynder
22. juli 2004 - 18:44 #26
Tak for hjælpen
Avatar billede detox Nybegynder
22. juli 2004 - 19:25 #27
Velbekommen
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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