Avatar billede dumazz Nybegynder
21. marts 2003 - 13:55 Der er 28 kommentarer og
1 løsning

Upload + MySQL

hvordan uploader jeg et billede samtidig med at den sender data til MySQL ???
Avatar billede grafix Nybegynder
21. marts 2003 - 15:16 #1
Pas på...Dumazz er nærig med point. Han betaler IKKE hvad han lover http://www.eksperten.dk/spm/330589
Avatar billede ahv Nybegynder
21. marts 2003 - 15:28 #2
Lad os tage os tage udgangspunkt i upload artiklen fra webcafe:


<?php

/**
* Simpelt script der tager imod et filupload og lister
* filer i upload-biblioteket.
*
* Scriptet er et eksempel til en artikel paa WebCafe.dk:
*
*    http://www.webcafe.dk/artikler/php/upload/
*/


/**
* Hvor skal filerne uploades til?
* Husk, at webserveren skal kunne skrive til dette bibliotek
*/
$konfiguration["upload_bibliotek"] = "./upload";

/* Hvor mange kilobytes maa filerne fylde per styk? */
$konfiguration["max_stoerrelse"] = "30";


/**
* Checker PHP-version
*/
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}


/**
* Udligner forskellene mellem 4.1.x og 4.0.x
* Bemaerk, at disse ikke er "superglobals"
*/
if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}


if($_FILES["upfil"]["size"] > 0) {

  /**
  * Hvis der er en fil, saa uploader vi den.
  *
  * Foerst slaar vi lige fast, hvor filen skal flyttes fra og til.
  */

  $fra = $_FILES["upfil"]["tmp_name"];
  $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

  /**
  *  Checker lige om filen er for stor til at vi vil acceptere den.
  *  Vi bruger ceil() i stedet for round(), saa vi ikke faar den skoere
  *  situation, at fejlmeldingen siger, at filen er for stor, men angiver
  *  samme stoerrelse for filen og den oevre graense.
  */
  $fil_stoerrelse = filesize($fra)/1024;
  if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
      die("Desv&aelig;rre - filen er for stor. Jeg accepterer kun " .
          $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
          ceil($fil_stoerrelse) . "kb");
  }
  if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
// Her skal du indsætte i databasen
  } else {
    copy($fra, $til);
// Her skal du indsætte i databasen
  }

  header("Location: " . $_SERVER["PHP_SELF"]);
  exit;

} else {

  /**
  * Intet tegn paa upload, saa vi viser bare listen over filer
  * og HTML-formularen til nye uploads.
  */
  $indhold = listFiler($konfiguration["upload_bibliotek"]);
  $indhold .= bygFormular($_SERVER["PHP_SELF"]);
  $output = bygSide("hej", $indhold);

}


/**
* Skriver ud til browseren
*/
echo $output;
exit;



/**************************************************\
**              Hjaelpefunktioner              **
\**************************************************/

function bygSide($titel, $indhold) {

  /**
  * Pakker indholdet ind i lidt formalia
  */
  return '<html>
            <head><title>$titel</title></head>
            <body bgcolor="#ffffff">
              <div align="right"><a href="./">Tilbage til artiklen</a></div>
              ' . $indhold . '</body>
          </html>
        ';

}

function bygFormular($action) {

  $formular = '<form action="' . $action . '" method="post" enctype="multipart/form-data">
                <table border="1" cellpadding="5" cellspacing="0">
                  <tr>
                    <td align="right" bgcolor="#999999"><b>Fil til upload:</b></td>
                    <td bgcolor="#cccccc"><input type="file" name="upfil" /></td>
                  </tr>
                  <tr>
                    <td colspan="2" align="middle" bgcolor="#dddddd"><input type="submit" value="upload" /></td>
                  </tr>
                </table>
              </form>
              ';

  return "<h2>Upload fil:</h2>" . $formular;

}

function listFiler($bibliotek) {

  if($bib = @opendir($bibliotek)) {
    /**
    * Denne syntaks er forklaret i PHP-manualen:
    * http://www.php.net/manual/en/function.readdir.php
    */
    while (false !== ($fil = readdir($bib))) {
      if($fil != "." && $fil != ".." && !ereg("^\..+", $fil)) {
          $fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
      }
    }
    closedir($bib);

    if(is_array($fil_liste)) {
      $liste = "<li>" . join("</li><li>", $fil_liste) . "</li>";
    } else {
      $liste = "<li>Ingen filer p&aring; lager</li>";
    }
    return "<h2>Filer p&aring; lager:</h2><ul>" . $liste . "</ul>";
  } else {
    die("Kunne ikke &aring;bne biblioteket: " . $bibliotek);
  }

}

?>


Jeg har indsat to steder hvor der står //Her skal du indsætte i databasen, her kører du bare det du normalt gør når du vil indsætte i din database, f.eks.

$insertSQL = "insert into brugere (navn, kode) values ('$_POST[brugernavn]', '$_POST[pass]')";
mysql_query($insertSQL);

Ønskes mere hjælp så sig til.
Avatar billede ahv Nybegynder
21. marts 2003 - 15:29 #3
Self. skal du lige connecte til din database, f.eks. øvert i dokumentet.
Avatar billede grafix Nybegynder
21. marts 2003 - 16:17 #4
Avatar billede dumazz Nybegynder
23. marts 2003 - 18:55 #5
grafix> Tror du har irriteret folk RIGELIGT...
Avatar billede ahv Nybegynder
23. marts 2003 - 19:23 #6
dumazz -> Kan du bruge det til noget, eller skal du have et eksempel mere?
Avatar billede dumazz Nybegynder
24. marts 2003 - 09:12 #7
ahv> det ser rimelig rodet ud...

Navnet på filen skal være "sekundersiden01011970.jpg" f.eks. 1094874325.jpg
Avatar billede ahv Nybegynder
24. marts 2003 - 09:16 #8
Ok, jeg laver et eksempel til senere, sidder lige i skolen nu.
Avatar billede dumazz Nybegynder
24. marts 2003 - 12:01 #9
SQL delen skal indsætte følgende:

$insertSQL = "insert into billeder (navn, tekst, dato, filnavn, height, width) values (Hvad skal stå her)";
mysql_query($insertSQL);
Avatar billede ahv Nybegynder
24. marts 2003 - 13:38 #10
Det her burde kunne gøre det:

<?php

if($_POST['up']){
$file = $_FILES['upfil']['tmp_name'];
$sti = "/test/";
$dist = $_SERVER["DOCUMENT_ROOT"] ."$sti";
$billedewh = @GetImageSize($file);

$files = $_FILES['upfil']['name'];
$temparr = explode(".", $files);
$temparr[count($temparr)-2] = time();
$files = implode(".", $temparr);

move_uploaded_file($_FILES['upfil']['tmp_name'], $dist . $files);

$connection = mysql_pconnect("host","user","pass");
mysql_select_db("database");
$insertSQL = "insert into billeder (navn, tekst, dato, filnavn, height, width) values ('$_POST[navn]', '$_POST[tekst]', now(), '$files', '$billedewh[0]', '$billedewh[1]')";
mysql_query($insertSQL);

echo "Din fil er nu uploadet<br><br>";
}
?>

<form action="test.php" method="post" enctype="multipart/form-data">
<b>Navn:</b><input type="text" name="navn"><br>
<b>Tekst:</b><input type="text" name="tekst"><br>
<b>Fil til upload:</b><input type="file" name="upfil"><br>
<input type="submit" value="upload" name="up">
</form>
Avatar billede ahv Nybegynder
24. marts 2003 - 13:39 #11
Den tager udgangspunkt i at din fil hedder test.php

Dette  kan du blot rette i linien:

<form action="test.php" method="post" enctype="multipart/form-data">
Avatar billede grafix Nybegynder
24. marts 2003 - 13:41 #12
ahv> Dumazz er nok ikke helt tilfreds med dig, så du får ikke alle 150 point
Avatar billede ahv Nybegynder
24. marts 2003 - 13:54 #13
grafix >> Jeg er klar over din utilfredshed over dumazz. Nu får vi se hvad han siger til det.
Avatar billede dumazz Nybegynder
24. marts 2003 - 15:04 #14
grafix> Hold nu kæft, jeg agter at give ahv, de point han fortjener, hvilket i dette tilfælde er 150 point.... Dit arbejde havde jeg vurderet til en 5-10 point.... men ville være lidt venlig og gav dig 80 point... lad nu være med at spamme samtlige af mine spm's... TAK
Avatar billede dumazz Nybegynder
24. marts 2003 - 17:44 #15
Warning safemode restriction in effect... og så bliver der ikke uploadet noget...
Avatar billede dumazz Nybegynder
24. marts 2003 - 17:53 #16
i denne linie:

move_uploaded_file($_FILES['upfil']['tmp_name'], $dist . $files);
Avatar billede ahv Nybegynder
24. marts 2003 - 19:30 #17
Hmm, hvis du ikke har ændret noget ud over dine database oplysninger kan jeg ikke rigtigt forstå den giver denne fejl.

Du kan se det virker her:

http://ahv.starthotel.dk/test.php

Det eneste der ikke virker i denne er width og height (hvilket jeg heller ikke kan se hvad du skal bruge til) men hvis det er et most så har jeg da en work around til dette.

Du kan se de ting der er uploadet her:

http://ahv.starthotel.dk/test/
Avatar billede dumazz Nybegynder
24. marts 2003 - 20:48 #18
ja rodede lige lidt med det, og nu virker det.... kan man indsætte et loft for størrelsen af filen ??? og at det kun kan være jpg filer ?
Avatar billede ahv Nybegynder
24. marts 2003 - 20:54 #19
Det kan man hvertfald.

lige 5 min.
Avatar billede ahv Nybegynder
24. marts 2003 - 20:59 #20
Utestet men prøv:

<?php

if($_POST['up']){
$files = $_FILES['upfil']['name'];
$file = $_FILES['upfil']['tmp_name'];
if(!eregi(".jpg$", $files))
{
echo "Det billede du prøver at uploade er <b>ikke</b> gyldigt - kun .jpg
<a href=java script:history.back(-1)>Tilbage</a>";
exit;
}
$fil_stoerrelse = filesize($file)/1024;
if($fil_stoerrelse > "100") {
echo "Det billede du prøver at uploade er <b>ikke</b> gyldigt - max 100 kb
<a href=java script:history.back(-1)>Tilbage</a>";
exit;
}
$sti = "/test/";
$dist = $_SERVER["DOCUMENT_ROOT"] ."$sti";
$billedewh = @GetImageSize($file);

$temparr = explode(".", $files);
$temparr[count($temparr)-2] = time();
$files = implode(".", $temparr);

move_uploaded_file($_FILES['upfil']['tmp_name'], $dist . $files);

$connection = mysql_pconnect("host","user","pass");
mysql_select_db("database");
$insertSQL = "insert into billeder (navn, tekst, dato, filnavn, height, width) values ('$_POST[navn]', '$_POST[tekst]', now(), '$files', '$billedewh[0]', '$billedewh[1]')";
mysql_query($insertSQL);

echo "Din fil er nu uploadet<br><br>";
}
?>

<form action="test.php" method="post" enctype="multipart/form-data">
<b>Navn:</b><input type="text" name="navn"><br>
<b>Tekst:</b><input type="text" name="tekst"><br>
<b>Fil til upload:</b><input type="file" name="upfil"><br>
<input type="submit" value="upload" name="up">
</form>
Avatar billede dumazz Nybegynder
24. marts 2003 - 21:11 #21
grafix> håber ikke du er sur over ikke at få point for dette spm...
Avatar billede dumazz Nybegynder
24. marts 2003 - 21:11 #22
ahv> Tusind tak for hjælpen....
Avatar billede ahv Nybegynder
24. marts 2003 - 21:11 #23
grafix >> Nu har jeg ellers fået points af Dumazz, jeg ser ikke dit problem?
Avatar billede ahv Nybegynder
24. marts 2003 - 21:12 #24
Dumazz >> Du er velkommen.
Avatar billede grafix Nybegynder
25. marts 2003 - 07:36 #25
ahv> Jeg glæder mig på dine vegne og glæder mig over at Dumazz har lært lektien
Avatar billede dumazz Nybegynder
25. marts 2003 - 19:57 #26
ahv> Du skulle vel tilfældigvis ikke vide hvordan man sletter en fil far php ???
Avatar billede ahv Nybegynder
25. marts 2003 - 20:14 #27
unlink("fil.jpg");
Avatar billede jhjorsal Mester
01. april 2003 - 12:46 #28
Hej ahv
Jeg har lige fået et frikvater hvor jeg har tid til at kikke på dit eksempel.
Og her derfor flg spørgsmål.
Det sidste du har sendt til dumazz skal det ikke indsættes der hvor du har skrevet "// Her skal du indsætte i databasen"? og kan det være et funktionskald?
Det loft du har lavet på filen er det ikke checket en gang i det første?
Hva går det her ud på ?

$sti = "/test/";
$dist = $_SERVER["DOCUMENT_ROOT"] ."$sti";
$billedewh = @GetImageSize($file);

$temparr = explode(".", $files);
$temparr[count($temparr)-2] = time();
$files = implode(".", $temparr);

move_uploaded_file($_FILES['upfil']['tmp_name'], $dist . $files);

og hva bruger du "$dist" til ?
håber du får tid at svare og hvis du ska bruge flere point må jeg jo oprette et spm.
hilsen
Johnny
Avatar billede oliverg Nybegynder
16. august 2003 - 11:58 #29
hvor laver den fil navnet om??
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

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