Avatar billede jokerper Nybegynder
26. juli 2008 - 13:25 Der er 31 kommentarer og
1 løsning

Upload billede til mysql, vis billede fra mysql

Hej eksperter

Jeg har brug for hjælp til:

1. Create table

2. Uploade et billede til mysql - via en form

3. Vis billede fra mysql

4. slet billede igen

Så simpelt som muligt
Avatar billede kjeldsted Novice
26. juli 2008 - 14:02 #1
Hvis du ønsker at få bygget systemet skal du nok sprøger under "opgaver".
Avatar billede jokerper Nybegynder
26. juli 2008 - 14:10 #2
Nej, det kunne sagtens være enkelt vise svar - så skal jeg nok selv sætte det sammen.

Jeg har bare brug for at se teknikken ved det, bla. create table, når det er billeder så skal bruges?
Er det link/sti på serveren som sættes ind sammen med billedenavn
DB=felter:

Sti til mit billede
mitbillede.jpg

Og hvordan gøres dette ved billede upload?

Hvordan får jeg det så vist, hvordan skal jeg spørge i DB, for at få vist billedet igen?
Avatar billede jokerper Nybegynder
26. juli 2008 - 14:15 #3
Jeg ved godt der sidder 1000 vis af "XXXXXX" herinde og venter.

Men jeg har sandelig stor respekt for dem som hjælper for point, da dette ikke er til noget kommerciel brug.
Avatar billede jokerper Nybegynder
26. juli 2008 - 14:18 #4
Ikke for at forklejne mit eget spm. Men se lige dette:
http://www.eksperten.dk/spm/776813 for 15 point. Dejligt med sådanne mennesker.
Avatar billede olebole Juniormester
26. juli 2008 - 15:50 #5
<ole>

Hvorfor dog lægge billeder i DB?

/mvh
</bole>
Avatar billede jokerper Nybegynder
26. juli 2008 - 15:57 #6
Det var for at kunne udtrække dem via loginsystem, på brugernavn.
Avatar billede olebole Juniormester
26. juli 2008 - 23:13 #7
Det behøver du da ikke have dem i DB'en for. Hvorfor ikke bare have dem liggende som filer - og så have en reference i DB'en? Det er måden, den slags som oftest løses på  =)
Avatar billede jokerper Nybegynder
27. juli 2008 - 01:04 #8
Jo men det var også lidt det mit spm gik på, da jeg ikke vidste hvordan man bar sig ad.

Hvordan laver jeg så sådan en reference i db så jeg kan få billedet frem i min tabel
Avatar billede zarbosch Nybegynder
27. juli 2008 - 15:51 #9
Hmm, jeg gad nok vide hvad BLOB's overhovedet så skal bruges til..?
Avatar billede zarbosch Nybegynder
27. juli 2008 - 16:01 #10
Jeg faldt lige over denne her:

http://www.php-mysql-tutorial.com/php-mysql-upload.php

god sommer
Avatar billede olebole Juniormester
27. juli 2008 - 16:18 #11
zarbosch >> Fordi datatypen blob eksisterer i MySQL, er der ingen, der har sagt, man pinedød skal bruge den, hvergang der er en mulighed  =)

Da databaser meget ofte bruges til en bunke komplet overflødigt - og endda ofte på ineffektiv vis - er databaseserveren i forvejen hårdt belastet. Så er det svært for mig at se det tillokkende ved at udskifte et lille DB-kald og et helt uproblematisk HTTP-kald med et betydeligt tungere DB-kald.

- men sådan er vi jo så forskellige  =)
Avatar billede zarbosch Nybegynder
27. juli 2008 - 16:22 #12
Læs spørgsmålet igen
Avatar billede olebole Juniormester
27. juli 2008 - 16:22 #13
jokerper >> Du kan prøve at kikke på jakobdo's artikler om billed upload:
    http://www.eksperten.dk/artikler/index.phtml?users=jakobdo

Så skal du bare lave et MySQL-kald, som sætter billednavnet ind i din DB
Avatar billede olebole Juniormester
27. juli 2008 - 16:23 #14
zarbosch >> Læs tråden igen. Så vil du forstå, hvad det er, spørgeren mente med spørgsmålet  ;o)
Avatar billede zarbosch Nybegynder
27. juli 2008 - 16:38 #15
Det har jeg gjort.

Hvis hans billeder er under 1mb ligger de bedst i databsen.
Avatar billede zarbosch Nybegynder
27. juli 2008 - 16:40 #16
Han ledte efter den rigtige løsning, du gav ham bare den nemmeste for dig, ikke den rigtige.
Avatar billede jokerper Nybegynder
27. juli 2008 - 16:56 #17
olebole> jeg har flere gange prøvet at læse jakobdos artikler, men mit problem er så heller ikke lige det med selve uploadet. Men det at gøre det via en form og fra formen få puttet det ind i DB.

NB. jeg har siddet og rodet lidt videre, siden oprettelsen af spm.

eks.

Jeg har en form:
<form method="post" action="bekraeft.php">
<table>
<tr><td align="left">Name</td>
<td><input type="text" name="status"></td>
</tr>
<tr><td colspan="2">
<p align="center">
<input type="submit" value="Enter record">
</td>
</tr>
</table>
</form>

Denne form skal så kalde bekraeft.php hvori jeg har følgende:

mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");

@mysql_select_db("$DBName") or die("Unable to select database $DBName");

$sqlquery = "UPDATE $table (id,billede,user,foedselsdag,oenske,pris,sted,sortering,status)" . "VALUES ('','','','','','','','','$status')WHERE `status` = '".$status."'"; 

$results = mysql_query($sqlquery);

print "<html><body><center>";
print "<p>Du har indsat disse data<p>";
print "Name :";
print "$status";

Men der kommer bare ikke noget i status feltet.

Jeg ved godt at det ligger lidt udenfor mit oprindelige spm.

Men jeg lyttede på det du sagde med at jeg nok skulle droppe det med billederne i DB.

Det er menningen at når det hele engang spiller, så skal jeg kunne trække data ud af min DB vha. - .htaccess login. Derfor ville det være rart hvis jeg også kunne skifte billederne ud på min skabelon.
Avatar billede jokerper Nybegynder
27. juli 2008 - 17:06 #18
Men hvordan jeg skal få billeder ind og vist på min side side fatter jeg forsat.

CREATE TABLE oensker
(billede blob),
(url varchar(50);

Billede = XXX.jpg
url = http://XXXX.XX/XXXX.jpg

Kaldet er det?
<img scr="mysql "(SELECT billede FROM oensker WHERE id='".$_POST['id']."'") or die (mysql_error());>
Avatar billede olebole Juniormester
27. juli 2008 - 17:07 #19
zarbosch >> Velkommen til Eksperten - og dernæst: Sikke dog noget bavl!

I kommentaren (27/07-2008 01:04:06) fortæller han netop, han ønsker at lægge en reference til billedet i DB ... ikke billeddata.

Derudover er du lige dumpet ned i dette forum i dag og har således ikke kinamands chance for at vide, hvad der er lettest for mig - eller andre på Eksperten.
Stik en finger i jorden og find ud af, hvor du er havnet - og læs så lige:
    http://expfaq.dk/

jokerper >> Du skal nok finde dine variabler i $_POST array'et. Prøv, når du har fyret formen af, at skrive:
    print $_POST["status"];
Avatar billede zarbosch Nybegynder
27. juli 2008 - 17:29 #20
ole, du behøver ikke generalisere, jeg talte kun om dig.
Mine kommentarer står fast.

jokerper, jeg er sikker på du kan bruge linken fra en tidligere kommentar uanset hvor du vil placere díne billeder.
Avatar billede olebole Juniormester
27. juli 2008 - 17:39 #21
zarbosch >> *LoL* har man ikke pære, må man ævle. Stik nu fingeren i jorden og læs vejledningen  :D

jokerper >> Hvilken PHP-version bruger du? Hvis du har PHP5, har du mulighed for at bruge 'mysqli', som er langt mere hensigtsmæssig end de PHPs almindelige MySQL-interface. Tjek det, så skal jeg vise dig et eksempel
Avatar billede jokerper Nybegynder
27. juli 2008 - 17:53 #22
Så /olebole/> nu kører jeg php5, tidligere stod den til php4 har lige ændret det.

For jeg kan ikke rigtigt få det til at virke, men sådan er det jo når man ikke er så dygtigt. Jeg ved jo det skal være helt rigtigt før det virker?
Avatar billede jokerper Nybegynder
27. juli 2008 - 18:16 #23
Jeg har en form på min hjemme side som det er menningen, at mine gæster skal kunne ændre en post i min DB. eks.

Reserveret af:
Er købt:

I min form skal de så skrive en af delene, som så skal opdatere feltet status.

Kan det lade gøre udfra ovenstående kode?
Avatar billede olebole Juniormester
27. juli 2008 - 20:03 #24
Lad os nu lige tage én ting ad gangen ... billed upload først  ;o)

Det er ikke ret meget, jeg ved om din applikation, men jeg går udfra, din bruger er logget ind, når vedkommende skal uploade et billede - og at brugeren ligger med en ID i en DB-tabel et eller andet sted. Den kunne se sådan ud:

CREATE TABLE IF NOT EXISTS users (
    id int(10) unsigned NOT NULL auto_increment,
    username char(60) NOT NULL DEFAULT '0',
    pass char(40) NOT NULL DEFAULT '0',
    email char(60) NOT NULL DEFAULT '0',
    PRIMARY KEY (id),
    UNIQUE KEY user (username)
);

Så kunne du have en tabel til uploadede billeder à la:

CREATE TABLE IF NOT EXISTS pictures (
    userid int(10) unsigned NOT NULL DEFAULT '0',
    url char(80) NOT NULL DEFAULT '0',
    KEY userid (userid)
);

I 'pictures' refererer 'userid' til 'id' i 'users'. På den måde kan den enkelte bruger have flere billeder knyttet til sin profil - og desuden belastes 'users' tabellen ikke, sålænge den skal bruges i situationer uden billeder.

Nedenstående kode vil kunne uploade et billede, knyttet til en bruger-ID, som du har skrevet ud som et skjult felt i formen på baggrund af brugerens login:
    <input type="hidden" name="userId" value="123">

Husk at oprette en upload-mappe på serveren og giv den skrive rettigheder. Ret tilsidst de tre første variabler og test dokumentet på serveren:

<?php
// Ret herfra:
$upDir = "images/";
$allowedTypes = array("jpg"=>1, "jpeg"=>1, "gif"=>1, "png"=>1);
$dbInfo = array(
    "server" => "localhost",
    "user" => "",
    "pass" => "",
    "defDB" => "test"
);
// Ret hertil

function uploadImage() {
    global $upDir, $allowedTypes, $dbInfo;
    if (is_uploaded_file($_FILES["upFile"]["tmp_name"])) {
        $ext = strtolower( pathinfo($_FILES["upFile"]["name"], PATHINFO_EXTENSION) );
        if ($allowedTypes[$ext]) {
            if ( move_uploaded_file($_FILES["upFile"]["tmp_name"], $upDir.basename($_FILES["upFile"]["name"])) ) {
                $mysqli = new mysqli($dbInfo["server"], $dbInfo["user"], $dbInfo["pass"], $dbInfo["defDB"]);
                if ($stmt = $mysqli->prepare("INSERT INTO pictures (userid, url) VALUES (?, ?)")) {
                    $userid = $_POST["userId"];
                    $fileName = $upDir.basename($_FILES["upFile"]["name"]);
                    if ($stmt->bind_param("ss", $userid, $fileName)) {
                        if ($stmt->execute()) return "Filen [".$_FILES["upFile"]["name"]."] blev uploaded.";
                        else return "Fejl: Kunne ikke indsætte i databasen.";
                    }
                    else return "Fejl: Kunne ikke binde parametre ved indsættelse i databasen.";
                }
                else return "Fejl: Kunne ikke forberede indsættelse i databasen.";
            }
            else return "Fejl: Kunne ikke kopiere filen.";
        }
        else return "Fejl: Ulovlig fil-extension.";
    }
    else return "Fejl: Kunne ikke finde en uploaded fil.";
}

if (isset($_POST["contxt"])) {
    switch ($_POST["contxt"]) {
        case "upload":
            $message = uploadImage();
            header("Location: ".$_SERVER["PHP_SELF"]."?msg=".urlencode($message));
            exit();
        break;
        default:
            header("Location: ".$_SERVER["PHP_SELF"]."?msg=".urlencode("Ukendt kontekst."));
            exit();
    }
} else {
    $message = $_GET["msg"];
    $class = strpos($message, "Fejl:")===false ? "message" : "error";
    $message = "<p class='".$class."'>".$_GET["msg"]."</p>";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Upload Test</title>
<style type="text/css">
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
    font: 0.85em verdana, sans-serif;
}
p.message {
    font-weight: bold;
}
p.error {
    font-weight: bold;
    color: red;
}
</style>
<script type="text/javascript">

</script>
</head>
<body>

<?php print $message ?>

<form action="<?php print $_SERVER["PHP_SELF"] ?>" method="post" enctype="multipart/form-data">
    <p><input type="hidden" name="contxt" value="upload">
    <input type="hidden" name="userId" value="123">
    <input type="file" name="upFile"></p>
    <p><button type="submit">Upload</button></p>
</form>

</body>
</html>
Avatar billede jokerper Nybegynder
27. juli 2008 - 23:41 #25
Okay men det virker, hvilket ikke forbavser mig.

Jeg ville lave en ønskeliste til mine børn, derfor prøver jeg mig frem.

Ved hjælp af .htaccess skulle min familie så kunne logge sig ind på ønskelisten fx

Brugernavn - jokerper - password XXXX

Komme ind på siden hvor så mine ønsker skulle være med de billeder som jeg har valgt.

Det samme for mine børn - hver deres interesser.

Menningen var så at jeg ville lave en skabelon, lidt ligesom et "fodboldhold" hvor der øverst til venstre er et billedeholder hvor der kunne være lidt oplysninger "fødsels dato" "Navn" mv. Som så skiftes ud ved at logge ind med et andet brugernavn fx brugernavn Peter password XXXX - giver samme skabelon med opstillingen.

Midt i vinduet vil jeg så have genereret en tabel med indhold fra min ønskeliste database ud fra det brugernavn som er valgt ved login via .htaccess, samt nogle interesse billeder.

Jeg kunne forsætte, men det er bare noget jeg har i tankerne.
-
Avatar billede jokerper Nybegynder
27. juli 2008 - 23:46 #26
Så et status felt hvor min familie kunne ændre status til:
1. Reserveret evt. med mulighed for at sætte deres navn.
2. Er købt

Altså en "<form method="post" action="bekraeft.php">" som giver dem mulighed for at ændre i databasens status felt.
Avatar billede jokerper Nybegynder
27. juli 2008 - 23:51 #27
Jeg tænkter at dette her ligner noget af det som jeg skal benytte mig af.

--------

fx.
if ( isset($_GET['id']) ) { // Godt, der er et id på en spiller med i adresselinien!
    $sql = "SELECT * FROM spiller WHERE spiller_id = {$_GET['id']}";
    $result = mysql_query( $sql ) or die( mysql_error() );
    if ( mysql_num_rows( $result ) == 1 ) { // Yes, vi fandt en spiller
        $data = mysql_fetch_assoc( $result );
?>


taget fra dette spm: http://www.eksperten.dk/spm/468589

---------

Da dette aldrig blev helt færdig besvaret eller ikke helt passede til mit behov måtte jeg videre.
Avatar billede jokerper Nybegynder
28. juli 2008 - 21:17 #28
Nu har jeg fundet ud af at sætte det rigtige tekst ind i en tekstboks, men hvor kan jeg sætte et billede som jeg har uploaded til denne tabel:

CREATE TABLE IF NOT EXISTS pictures (
    userid int(10) unsigned NOT NULL DEFAULT '0',
    url char(80) NOT NULL DEFAULT '0',
    KEY userid (userid)
);

Ved hjælp af denne metode:
if(isset($_SERVER["REMOTE_USER"]) || isset($_SERVER["PHP_AUTH_USER"])) {


//Brugernavnet er $_SERVER["REMOTE_USER"] eller $_SERVER["PHP_AUTH_USER"]
$bruger = (isset($_SERVER["REMOTE_USER"]) ? $_SERVER["REMOTE_USER"] : $_SERVER["PHP_AUTH_USER"]);

<input name="imageField" type="image" id="imageField" src="???????????" align="middle" width="100" Height="150" />
Avatar billede jokerper Nybegynder
28. juli 2008 - 21:32 #29
<p align="left">
          <label>F&oslash;dselsdag</label>
          <?php
          if(isset($_SERVER["REMOTE_USER"]) || isset($_SERVER["PHP_AUTH_USER"])) {


//Brugernavnet er $_SERVER["REMOTE_USER"] eller $_SERVER["PHP_AUTH_USER"]
$bruger = (isset($_SERVER["REMOTE_USER"]) ? $_SERVER["REMOTE_USER"] : $_SERVER["PHP_AUTH_USER"]);
$conn=mysql_connect('host','','') or die (mysql_error());
mysql_select_db("databasenavn");

$rs=mysql_query("SELECT * FROM oensker WHERE `user` = '".$bruger."' ORDER BY `sortering` DESC");

if($row=mysql_fetch_array($rs)){
    $felt = $row["foedselsdag"];
}

mysql_free_result($rs);

mysql_close($conn);
}
?>
     
          <input type="text" name="felt1" value="<?php echo $felt; ?>" />
Avatar billede arne_v Ekspert
02. august 2008 - 04:58 #30
"Billeder i database er noget skidt" er efter min overbevisning en myte. Man kunne
godt få en Access 2.0/Windows 95/200 MHz Pentium til at gå kold ved at smide
billeder i database. Men der er løbet lidt vand i havet siden dengang. Man kan sagtens
gemme billeder i database, hvis man har noget rimeligt software og hardware. Et
god eksempel på noget sådant er Oracle CM SDK (tidligere kaldet IFS).

PS: Husk at BLOB kun er max. 64 KB.
Avatar billede jokerper Nybegynder
24. august 2008 - 14:52 #31
Skal vi lukke - læg svar please...
Avatar billede jokerper Nybegynder
22. oktober 2008 - 22:12 #32
Da der ikke er lagt svar på dette spm - gives en chance mere.
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