Avatar billede downshooter Nybegynder
20. september 2004 - 11:14 Der er 21 kommentarer og
1 løsning

billede bliver gemt i database som et array

Hej eksperter!

jeg har et uploadscript til billeder.
hvor jeg bruger en input box med type=file, men når jeg bruger file gemmer den billedet i databasen som "array", istedet for at skrive stien, og hvis jeg bruger text istedet skriver den godt nok stien som jeg skriver ind.
Jeg håber i forstår hvad jeg mener, ellers skriv til mig.
jeg er åben over for gode ideer som kan laves.
Og!, jeg vil gerne se kode ideer (ud fra mit script nedenfor)

mit script:
<link href="style.css" rel="stylesheet" type="text/css">
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">
<?
//her skabes forbindelsen til vores mysql server
$conn = mysql_connect("localhost","admin","123456");

//her angives databasen
mysql_select_db("db_vare");

$typen = $_REQUEST["typen"];
$kategori = $_REQUEST["kategori"];
$overskrift = $_REQUEST["overskrift"];
$producent = $_REQUEST["producent"];
$pris = $_REQUEST["pris"];
$lagerstatus = $_REQUEST["lagerstatus"];
$billede = $_REQUEST["billede"];
$beskrivelse = $_REQUEST["beskrivelse"];

//indsæter værdierne
if($_REQUEST["knap"] == "Send")
{
$indsaet = mysql_query("INSERT INTO vare_tabel (va_id, va_type, va_kategori, va_overskrift, va_producent, va_pris, va_lagerstatus, va_billeder, va_beskrivelse)".
"VALUES ('', '$typen', '$kategori', '$overskrift', '$producent', '$pris', '$lagerstatus', '$billede', '$beskrivelse')");

echo $beskrivelse;
} else {
?>
<?php
$drop1 = Array("hardware", "software");
$hardware = Array("Bundkort", "Lydkort", "Grafikkort");
$software = Array("MS_XP_PRO", "MS_XP_HOME", "Office_2003");
/*
De 3 Arrays herover, kan komme fra en database,
istedet for at være defineret her.
*/
echo "<SELECT class='dropdown1' name='typen' onChange='submit();'>\n";
echo "<OPTION VALUE='' SELECTED>Vælg en kategori</OPTION>\n";
foreach($drop1 AS $drop)
{
    if($_REQUEST["typen"] == $drop)
    {
        echo "<OPTION VALUE='$drop' SELECTED>$drop</OPTION>\n";
    } else {
        echo "<OPTION VALUE='$drop'>$drop</OPTION>\n";
    }
}
echo "</SELECT>";
echo "<SELECT class='dropdown2' name='kategori'>\n";
echo "<OPTION VALUE='' SELECTED>Vælg ". $_REQUEST["typen"] . "</OPTION>\n";
SWITCH($_REQUEST["typen"])
{
    CASE "hardware":
        foreach($hardware AS $hwdrop)
        {
            echo "<OPTION VALUE='$hwdrop'>$hwdrop</OPTION>\n";
        }
    BREAK;
    CASE "software":
        foreach($software AS $swdrop)
        {
            echo "<OPTION VALUE='$swdrop'>$swdrop</OPTION>\n";
        }
    BREAK;
}
echo "</SELECT>";
?>
<input type="hidden" name="referer" value="post_vare"><br>
<div class="frmobj">&nbsp;Overskrift</div> <input type="text" name="overskrift" class="beskrivelse"><br>
<div class="frmobj">&nbsp;Producent</div> <input type="text" name="producent" class="beskrivelse" value="http://"><br>
<div class="frmobj">&nbsp;Pris</div> <input type="text" name="pris" class="beskrivelse"><br>
<div class="frmobj">&nbsp;Antal varer</div> <input type="text" name="lagerstatus" class="beskrivelse"><br>
<div class="frmobj">&nbsp;Billede</div> <input type="file" name="billede" class="beskrivelse"><br>
<div class="frmobj">&nbsp;Beskrivelse</div><textarea name="beskrivelse" rows="10" cols="0" style="width: 300px" class="textarea"></textarea><br>
<div class="frmobj">&nbsp;</div><input class="submittilfoej" type="submit" name="knap" value="Send">
</form>
<?php
}
?>
Avatar billede erikjacobsen Ekspert
20. september 2004 - 11:54 #1
Vi har vist tidligere fortalt dig at du skal bruge $_FILES og ikke $_REQUEST til
at hente et uploaded billede. I et tidligere spørgsmål fik du også eet eller flere links,
der viser hvordan.

Prøv det først.
Avatar billede sukos Juniormester
20. september 2004 - 12:35 #2
Når den siger array, er det fordi der ved filupload med php også er et array med info om uploaded fil.
http://dk.php.net/manual/en/features.file-upload.php

$billede = $_REQUEST["billede"];

skal så være

$billede = $_FILES["billede"]["name"];
Avatar billede downshooter Nybegynder
20. september 2004 - 12:44 #3
sukos, skal jeg skrive noget i ["name"]?
Avatar billede downshooter Nybegynder
20. september 2004 - 12:48 #4
glem det overstående, læste ubde på php.net

er dette ikke korrekt?:
echo '<img src="'.$row['va_billeder'].'">';
Avatar billede downshooter Nybegynder
20. september 2004 - 12:48 #5
$query = mysql_query("SELECT * from vare_tabel WHERE va_kategori='Bundkort'");
while ($row = mysql_fetch_array($query)) {
Avatar billede downshooter Nybegynder
20. september 2004 - 13:00 #6
okay har fået det til at virke nu WEE ;)
men tænkte på om det ikke er muligt at ligge filerne i en mappe på serveren, og hvor filerne bliver omdøbt til et eller andet f.eks. 213123.jpg , for at man ikke overskriver eksisterende filer?
Avatar billede sukos Juniormester
20. september 2004 - 13:17 #7
if(false == ($str = getimagesize($_FILES["billede"]["tmp_name"]))) {
$billede = "";

}else{

$filetyper = array(1 => "gif", 2 => "jpg", 3 => "png");
$nytnavn = time() ."_". rand(1000, 9999);
$filtypen = strtr($str[2], $filetyper);
$billede = $nytnavn .".". $filtypen;

}
Avatar billede downshooter Nybegynder
21. september 2004 - 08:44 #8
sukos, hvor i koden skal det skrives ind ?.
og uploader den filen ind til den mappe som man vil have det til, hvis man f.eks. vælger en fil som ligger på skrivebordet?
Avatar billede sukos Juniormester
21. september 2004 - 11:05 #9
Det skal stå i stedet for
$billede = $billede = $_FILES["billede"]["name"];

Der er ikke noget upload som sådan, det har du vel et sted?
Og når du bruger move_uploaded_file kan du bestemme hvor billedet skal lægges
Avatar billede downshooter Nybegynder
21. september 2004 - 11:44 #10
nej jeg har nemlig ikke noget til at uploade billedet med.
Avatar billede sukos Juniormester
21. september 2004 - 12:03 #11
hmm, måske

altså, linien, $billede = $billede = $_FILES["billede"]["name"]; erstattes med:

if(trim($_FILES["billede"]["name"]) == "") {
$billede = "";

}else{

if(false == ($str = getimagesize($_FILES["billede"]["tmp_name"]))) {
$billede = "";

}else{

$filetyper = array(1 => "gif", 2 => "jpg", 3 => "png");
$nytnavn = time() ."_". rand(1000, 9999);
$filtypen = strtr($str[2], $filetyper);
$billede = $nytnavn .".". $filtypen;

$dir = $_SERVER["DOCUMENT_ROOT"] ."/dirnavn/";

if(move_uploaded_file($_FILES["billede"]["tmp_name"], $dir . $billede)) {
chmod($dir . $billede, 0777);
}else{
$billede = "";
}


}

}

Så skal du jo sørge for at dir'et "dirnavn" findes. Eller hvad du nu vil kalde det.
Avatar billede downshooter Nybegynder
21. september 2004 - 12:32 #12
okay.. sukos det virker finr, men må jeg spørge dig om en ting mere eller vil du bare gerne have din point? :)
Avatar billede sukos Juniormester
21. september 2004 - 12:37 #13
Selvf. spørger du bare løs!
Avatar billede downshooter Nybegynder
21. september 2004 - 12:39 #14
okay, :)
kan man lave sådan at billedet bliver resized eller sådan noget, fordi de billeder som bliver uploaded, må ikke være mere end height="90" width="85" ?
Avatar billede morteeart Nybegynder
21. september 2004 - 12:41 #15
http://se.php.net/image

til resizing og andre ændringer skal du bruge udvidelsen GDLIB
Avatar billede morteeart Nybegynder
21. september 2004 - 12:42 #16
udvikleren.dk har en god artikel omkring det:

http://www.udvikleren.dk/article.php?aid=138&techid=6
Avatar billede downshooter Nybegynder
21. september 2004 - 12:44 #17
ja, men ville jo meget gerne se det i sammenhæng med min kode :)
Avatar billede sukos Juniormester
21. september 2004 - 12:44 #18
:O)
Jow, det kan man godt, hvis f.eks. GD er på serveren.
Men langt det nemmeste, vil være blot at tjekke str. på billedet, og er det for stort, ja, så bliver det ikke uploadet.
Forestil dig en som vælger en fil på f.eks. 1024x768.
Tiden for upload, + tiden for at resize, vil jo suge en del på serveren.
Plus, hvis billedet er for stort, vil GD ikke kunne arbejde med det. Mener det er noget med 1200x1200 eller lign.

Men netop det spm. er jo stillet mange gange herinde, så hvis du søger på "resize" her i php-kategorien, vil du få temmelig mange resultater.
Avatar billede downshooter Nybegynder
21. september 2004 - 12:45 #19
ok.
nå men så smid et svar sukos
Avatar billede sukos Juniormester
21. september 2004 - 12:46 #20
Og så uden at lave det, kan jeg sige at hvis du vil bruge det, skal det være efter:

if(move_uploaded_file($_FILES["billede"]["tmp_name"], $dir . $billede)) {
chmod($dir . $billede, 0777);

resize...................

}else{
$billede = "";
}
Avatar billede sukos Juniormester
21. september 2004 - 12:50 #21
johh, iøvrigt,
$str[0] er bredde
$str[1] er højde

$str[2] fortæller noget om hvilken type billede det er
hvis du f.eks. også vil bruge flashfiler, skal der lige tilføjes:

4 => "swf"

til

$filetyper = array(1 => "gif", 2 => "jpg", 3 => "png");

http://dk.php.net/manual/en/function.getimagesize.php
Avatar billede downshooter Nybegynder
21. september 2004 - 12:51 #22
tak for hjælpen
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