Avatar billede Morten Professor
05. april 2016 - 20:20 Der er 7 kommentarer og
1 løsning

Mysqli og upload af billede til mappe og database

Hej

Jeg har lige lidt problemer med at få min henvisning fra mine billeder til at få lagt fil navnet ind på min database.
Kan godt lave den ren men uden $_FILES der går den gal.

min kode er:

<form action="" method="POST" enctype="multipart/form-data" name="upload" id="upload">
 
  Fil, der skal overf&oslash;res:
<label>
    <input name="filnavn" type="file" class="textfield" id="filnavn" size="60" />
  </label>
  <input name="dato" type="text" class="textfield" id="dato" value="<?php echo date("Y-m-d");?>" readonly />
  <label for="tid"></label>
  <input name="tid" type="text" class="textfield" id="tid" value="<?php echo date("H:i:s");?>" readonly />
  <br />
  <br />
  <label>
    <input name="filnavn" type="submit" class="textfield" id="filnavn" value="Overfør" />
    <br />
    <br />
  </label>
  <?php
    /* Opret vare */
if ($stmt = $con->prepare('INSERT INTO `tbl_billedemenu` (`id`, `billedenavn`, `dato`, `tid`) VALUES (?, ?, ?, ?)')) {

    /* Bind parametre */
    $stmt->bind_param('isss', $id, $billedenavn, $dato, $tid);

    /* Sæt værdier på parametrene */
    $billedenavn = $_FILES['filnavn']['name'];
    $dato = $_POST['dato'];
    $tid = $_POST['tid'];

    /* Eksekver forespørgslen */
    $stmt->execute();

    /* Luk statement */
    $stmt->close();

} else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $con->error;
}
$tempfile = $_FILES['filnavn']['tmp_name'];

$destination = "../uploads/{$_FILES['filnavn']['name']}";

copy($tempfile, $destination);
   
                     
if (isset($_FILES['filnavn'])) {
    print "Fil, der er blevet overført: {$_FILES['filnavn']['name']}<p>\n";
}

if($_POST) {
    if($_FILES['filnavn']['name'] == ""){
    $results = "Feltet kan ikke være tomt.
                Tryk på 'Browse' knappen,
                Find billedet og tryk på 'Upload billede' knappen.";
}
else {
    $size=filesize($_FILES['filnavn']['tmp_name']);
    $filename = stripslashes($_FILES['filnavn']['name']);
    $extension = get_image_extension($filename);
    if($size > $maximum_size) {
        $results = "Filen er for stor!
                    Prøv igen med et mindre";
    }
    else
    if (($extension != "jpg") &&
        ($extension != "jpeg") &&
        ($extension != "png") &&
        ($extension != "gif")) {
        $results = 'Billedet kan kun være i jpg, jpeg, png, eller gif filer.
                    Prøv igen!';
        }
        else{
            $copy = @copy($_FILES['filnavn']['tmp_name'], $images_location.$filename);
            if (!$copy){
                $results = "Fejl ved upload af billede! Prøv igen!";
            }
            else{
                create_thumbnail($images_location.$filename,$thumbs_location.$filename, $thumb_width);
                $results = "Billedet er blivet uploadet";
            }
        }
}
}


?>
</form>

PS.

Jeg har fået det til at virke før men der bruge jeg ikke mysqli opsætningen.
Og vil helst kun bruge mysqli fra nu af.

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
05. april 2016 - 20:39 #1
hvor binder du id ?? i nedenstående
 
if ($stmt = $con->prepare('INSERT INTO `tbl_billedemenu` (`id`, `billedenavn`, `dato`, `tid`) VALUES (?, ?, ?, ?)')) {
/* Bind parametre */
$stmt->bind_param('isss', $id, $billedenavn, $dato, $tid);

/* Sæt værdier på parametrene */
$billedenavn = $_FILES['filnavn']['name'];
$dato = $_POST['dato'];
$tid = $_POST['tid'];



hvorfor insetter du id ??, er den ikke auto-incrementeret (AI)

jeg havde forvendtet

if ($stmt = $con->prepare('INSERT INTO `tbl_billedemenu` (`billedenavn`, `dato`, `tid`) VALUES (?, ?, ?)')) {
/* Bind parametre */
$stmt->bind_param('sss', $billedenavn, $dato, $tid);

/* Sæt værdier på parametrene */
$billedenavn = $_FILES['filnavn']['name'];
$dato = $_POST['dato'];
$tid = $_POST['tid'];


hvilke fejl får du ??
Avatar billede Morten Professor
05. april 2016 - 21:13 #2
Jo det er den den er auto. jeg prøvede mig bare frem.
Men ingen ting hjalp.

Men har rettet det nu.

Fejl jeg får er:
Notice: Undefined index: filnavn
Avatar billede olsensweb.dk Ekspert
05. april 2016 - 21:27 #3
hvad er dit filnavn ?? ( din fil eller din submit )

<input name="filnavn" type="file" class="textfield" id="filnavn" size="60" />
<input name="filnavn" type="submit" class="textfield" id="filnavn" value="Overfør" />

jeg ville rette min submit til feks
<input name="send" type="submit" class="textfield" id="filnavn" value="Overfør" />
Avatar billede olsensweb.dk Ekspert
05. april 2016 - 21:30 #4
du skal self også rette id, da den skal være unik
Avatar billede Morten Professor
05. april 2016 - 21:34 #5
Hmm virkede ikke jeg syntes det virkelig mærkeligt for den insert er da rettet og afprøvet, men det er det FILES det bare ikke vil.
Avatar billede Morten Professor
05. april 2016 - 22:12 #6
Ved ikke om man kan kalde det en fejl 40 men det virker fint på min server bare ikke på localhost "Test programmet"

Men mange tak for hjælpen.

Du må meget gerne smide et svar ;o)

Med venlig hilsen
Morten
Avatar billede olsensweb.dk Ekspert
05. april 2016 - 22:15 #7
får du submitter dine værdier ?? (
    check XHR i udviklings værktøjet i din browser
    eller insert
    <?php
    echo "<pre>";
    print_r($_POST);
    echo "</pre>";
    echo "<pre>";
    print_r($_FILES);
    echo "</pre>";
    ?>
    i toppen af dit document
)


hvis ja!
får du indsat noget i din db ??
hvis ja
får du lagt filen over i din folder
hvis nej
er folderen oprette hvor du angiver
Avatar billede olsensweb.dk Ekspert
05. april 2016 - 22:15 #8
og et svar
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