Avatar billede doncarnage Nybegynder
11. november 2008 - 21:30 Der er 18 kommentarer og
1 løsning

Skriv data til en tabel m/ tilhørende billede

Godaften..

Situationen er den at jeg i korte træk har lavet en slags vare-system hvor man kan tilføje et produkt til en tabel..

Dette foregår som det ses herpå: http://www.valuable.dk/oversigt2.jpg

Det hele fungerer som det skal, med undtagelse af billede-funktionen som ikke er blevet implementeret endnu! Jeg har forgæves søgt dette forum igennem flere gange, og har da også prøvet en masse af svarene af.. Men synes på ingen måde jeg kunne få det til at fungere efter hensigten :/

Jeg vil gerne have det lavet som vist på tegningen med en "gennemse" knap, hvor man så kan vedhæfte et billed til produktet.. Dette billede skal gerne blive uploadet til en mappe i det man trykker på post og samtidigt skal adressen/titlen til billedet indsættes i databasen under tabelrækken "billede"

Hjælp :(
Avatar billede ziron Nybegynder
11. november 2008 - 22:24 #1
Aften!

Se linket her,
http://www.reconn.us/content/view/30/51/
som beskriver meget godt hvordan du uploader et billede.

Når dette er gjort gemmer du bare $newname i din database i feltet billede. Vær ommærksom på at dette er stien til billede som du skal referer til i din <img src=, hvis du vil tilknytte en titel til billede skal du have et felt mere, med mindre du benytter "name".

Vær også opmærksom på hvis du retter koden til og benytter det i din nuværende form, skal du huske dette skal med ved form indstillingerne "enctype="multipart/form-data".
Avatar billede simotho Nybegynder
11. november 2008 - 22:44 #2
Jeg kunne godt tænke mig og vide hvordan man derefter udskriver billedet :)
Avatar billede doncarnage Nybegynder
11. november 2008 - 23:10 #3
Kan ikke rigtig få den der til at virke efter hensigten desværre :/ Altså, jeg kan godt finde ud af at uploade et billed til en mappe fx.. Men jeg vil jo gerne have gjort sådan at det bliver uploadet samtidigt med at man poster data til tabellen, så der kun er én knap til at submitte (ligesom på billedet) :S

I øvrigt ser min kode ud som nedenstående (så er det nok lidt lettere at hjælpe mig)

---------------------------------------------------------------------------------
vare.add.php
---------------------------------------------------------------------------------
<html>
<head>
<script language="javascript" type="text/javascript" src="functions.js"></script>
<link rel="stylesheet" type="text/css" href="css.css">
</head>

<body>

<font class="lille">
» <a href="../index.php">Forside</a> » <a href="administration.php">Admin</a>

<br><br>

Du er her: ..admin/vare.add.php
</font>

<br><br>

<form action="form.handle.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="referer" value="upload">
<input type="hidden" name="referer" value="post_vare">
<font class="normal">Vare</font><br><input class="input" type="text" name="name" style="width: 200px"><br>
<font class="normal">Kategori</font><br>

<select name="parent" class="input">
<?php
include_once('../inc.config.php');

mysql_connect($cfg['mysql']['host'],$cfg['mysql']['username'],$cfg['mysql']['password']);
mysql_select_db($cfg['mysql']['database']);

$query = mysql_query("SELECT * FROM vare ORDER BY type ASC");
if (mysql_num_rows($query) > 0) {
    while ($row = mysql_fetch_assoc($query)) {


      echo '<option value='.$row['id'].'>'.$row['type'].'</option>';

    }
}
?>
</select><br>

<font class="normal">Ny</font><br>
<select name="ny" class="input">
<option value=''></option>
<option value='NY'>Ja</option>
<option value=''>Nej</option>
</select><br>
<font class="normal">Billede</font><br>

<input type="file" name="billede" style="width: 248px" class="input2"><br>

<font class="normal">Beskrivelse</font><br><input class="input" type="text" name="beskrivelse" style="width: 200px"><br>
<font class="normal">På lager</font><br>
<select name="status" class="input">
<option value='admin/img/ukendt.jpg alt=Ukendt'></option>
<option value='admin/img/ja.jpg alt=Ja'>Ja</option>
<option value='admin/img/nej.jpg alt=Nej'>Nej</option>
</select><br>
<font class="normal">Pris</font><br><input class="input" type="text" name="pris" style="width: 200px"><br>
<br>
<input type="submit" value="Post" class="input">
</form>
</body>
</html>

---------------------------------------------------------------------------------

form.handle.php:

---------------------------------------------------------------------------------
<?php

include('../inc.config.php');

mysql_connect($cfg['mysql']['host'],$cfg['mysql']['username'],$cfg['mysql']['password']);
mysql_select_db($cfg['mysql']['database']);


if ($_POST['referer'] == 'post_varegruppe') {
        mysql_query("INSERT INTO varegruppe (navn) VALUES ('$_POST[navn]')") or die(mysql_error());
    header("Location: ../index.php");
}

if ($_POST['referer'] == 'post_kategori') {
        mysql_query("INSERT INTO vare (type, parent) VALUES ('$_POST[type]', '$_POST[parent]')") or die(mysql_error());
    header("Location: ../index.php");
}

if ($_POST['referer'] == 'post_vare') {
        mysql_query("INSERT INTO kategori (name, ny, billede, beskrivelse, status, pris, parent) VALUES ('$_POST[name]', '$_POST[ny]', '$_POST[billede]', '$_POST[beskrivelse]', '$_POST[status]', '$_POST[pris]', '$_POST[parent]')") or die(mysql_error());   
    header("Location: ../index.php");
}
?>
---------------------------------------------------------------------------------

Håber virkelig, der er nogle der kan hjælpe :/
Avatar billede olebole Juniormester
12. november 2008 - 09:39 #4
<ole>

Når du prøver at uploade et billede samtidig med DB-indsættelse:

Hvad er det, som ikke virker?
Hvad sker der?
Hvad sker ikke?
Får du fejlmeldinger?
Har du slået fejlmeldinger til?

/mvh
</bole>
Avatar billede ziron Nybegynder
12. november 2008 - 11:20 #5
doncarnage >>

Du skal rette i din form.handle.php

inden:

if ($_POST['referer'] == 'post_vare') {
        mysql_query("INSERT INTO kategori (name, ny, billede, beskrivelse, status, pris, parent) VALUES ('$_POST[name]', '$_POST[ny]', '$_POST[billede]', '$_POST[beskrivelse]', '$_POST[status]', '$_POST[pris]', '$_POST[parent]')") or die(mysql_error());   
    header("Location: ../index.php");
}

Insætter du så det hvor du gemmer dit billede, hvis du evt bruge det link jeg sendte så vil den variable som du skal gemme i databasen være $newname.

Herefter skal din insert være:

if ($_POST['referer'] == 'post_vare') {
        mysql_query("INSERT INTO kategori (name, ny, billede, beskrivelse, status, pris, parent) VALUES ('$_POST[name]', '$_POST[ny]', '$newname', '$_POST[beskrivelse]', '$_POST[status]', '$_POST[pris]', '$_POST[parent]')") or die(mysql_error());   
    header("Location: ../index.php");
}
Avatar billede doncarnage Nybegynder
12. november 2008 - 17:06 #6
Jeg har prøvet at gøre som du skrev ziron, men uden resultat :( Man kan stadig tilføje en vare osv, men rækken "billede" i tabellen står bare tom uanset hvad jeg prøver at vedhæfte som billede.. Hvad gør jeg galt?

Mine 2 sider ser ud som følgende:

----------------------------------------------------------------
vare.add.php
----------------------------------------------------------------

<html>
<head>
<link rel="stylesheet" type="text/css" href="css.css">
</head>

<body>

<font class="lille">
» <a href="../index.php">Forside</a> » <a href="administration.php">Admin</a>

<br><br>

Du er her: ..admin/vare.add.php
</font>

<br><br>

<form action="form.handle.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="referer" value="post_vare">
<font class="normal">Vare</font><br><input class="input" type="text" name="name" style="width: 200px"><br>
<font class="normal">Kategori</font><br>

<select name="parent" class="input">
<?php
include_once('../inc.config.php');

mysql_connect($cfg['mysql']['host'],$cfg['mysql']['username'],$cfg['mysql']['password']);
mysql_select_db($cfg['mysql']['database']);

$query = mysql_query("SELECT * FROM vare ORDER BY type ASC");
if (mysql_num_rows($query) > 0) {
    while ($row = mysql_fetch_assoc($query)) {


      echo '<option value='.$row['id'].'>'.$row['type'].'</option>';

    }
}
?>
</select><br>

<font class="normal">Ny</font><br>
<select name="ny" class="input">
<option value=''></option>
<option value='NY'>Ja</option>
<option value=''>Nej</option>
</select><br>
<font class="normal">Billede</font><br>

<input type="file" name="image" style="width: 248px" class="input2"><br>

<font class="normal">Beskrivelse</font><br><input class="input" type="text" name="beskrivelse" style="width: 200px"><br>
<font class="normal">På lager</font><br>
<select name="status" class="input">
<option value='admin/img/ukendt.jpg alt=Ukendt'></option>
<option value='admin/img/ja.jpg alt=Ja'>Ja</option>
<option value='admin/img/nej.jpg alt=Nej'>Nej</option>
</select><br>
<font class="normal">Pris</font><br><input class="input" type="text" name="pris" style="width: 200px"><br>
<br>
<input type="submit" value="Post" class="input">
</form>

</body>
</html>

----------------------------------------------------------------
form.handle.php
----------------------------------------------------------------

<?php

include('../inc.config.php');

mysql_connect($cfg['mysql']['host'],$cfg['mysql']['username'],$cfg['mysql']['password']);
mysql_select_db($cfg['mysql']['database']);

if ($_POST['referer'] == 'post_varegruppe') {
        mysql_query("INSERT INTO varegruppe (navn) VALUES ('$_POST[navn]')") or die(mysql_error());
    header("Location: ../index.php");
}

if ($_POST['referer'] == 'post_kategori') {
        mysql_query("INSERT INTO vare (type, parent) VALUES ('$_POST[type]', '$_POST[parent]')") or die(mysql_error());
    header("Location: ../index.php");
}


//define a maxim size for the uploaded images in Kb
define ("MAX_SIZE","100");

//This function reads the extension of the file. It is used to determine if the file is an image by checking the extension.
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

//This variable is used as a flag. The value is initialized with 0 (meaning no error found)
//and it will be changed to 1 if an errro occures.
//If the error occures the file will not be uploaded.
$errors=0;
//checks if the form has been submitted
if(isset($_POST['Submit']))
{
//reads the name of the file the user submitted for uploading
$image=$_FILES['image']['name'];
//if it is not empty
if ($image)
{
//get the original name of the file from the clients machine
$filename = stripslashes($_FILES['image']['name']);
//get the extension of the file in a lower case format
$extension = getExtension($filename);
$extension = strtolower($extension);
//if it is not a known extension, we will suppose it is an error and will not upload the file,
//otherwise we will do more tests
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{
//print error message
echo '<h1>Unknown extension!</h1>';
$errors=1;
}
else
{
//get the size of the image in bytes
//$_FILES['image']['tmp_name'] is the temporary filename of the file
//in which the uploaded file was stored on the server
$size=filesize($_FILES['image']['tmp_name']);

//compare the size with the maxim size we defined and print error if bigger
if ($size > MAX_SIZE*1024)
{
echo '<h1>You have exceeded the size limit!</h1>';
$errors=1;
}

//we will give an unique name, for example the time in unix time format
$image_name=time().'.'.$extension;
//the new name will be containing the full path where will be stored (images folder)
$newname="images/".$image_name;
//we verify if the image has been uploaded, and print error instead
$copied = copy($_FILES['image']['tmp_name'], $newname);
if (!$copied)
{
echo '<h1>Copy unsuccessfull!</h1>';
$errors=1;
}}}}

//If no errors registred, print the success message
if(isset($_POST['Submit']) && !$errors)
{
echo "<h1>File Uploaded Successfully! Try again!</h1>";
}



if ($_POST['referer'] == 'post_vare') {
        mysql_query("INSERT INTO kategori (name, ny, billede, beskrivelse, status, pris, parent) VALUES ('$_POST[name]', '$_POST[ny]', '$newname', '$_POST[beskrivelse]', '$_POST[status]', '$_POST[pris]', '$_POST[parent]')") or die(mysql_error());   
    header("Location: ../index.php");
}
?>
Avatar billede ziron Nybegynder
12. november 2008 - 23:18 #7
Hvsi du lige tjekker om $newname har en værdi, evt ved at at lave en "echo $newname;" inden
if ($_POST['referer'] == 'post_vare') {

Derefter lige skriver her så tager vi den derfra, for så ved vi om fejlen ligger i upload af billede eller insert i databasen.
Avatar billede doncarnage Nybegynder
13. november 2008 - 04:28 #8
Fejlen ligger i upload af billede.. Har både prøvet på localhost og webserver, og ingen af steder er den i stand til at udskrive $newname.. Får blot en blank side :S
Avatar billede ziron Nybegynder
13. november 2008 - 19:04 #9
kommer den med nogen fejl meddelser?
har du skrive adgang til den sti hvor du prøver at gemme billede?

Prøv evt at debug selv ved at indsætte nogle echo's og se hvor i koden den når til?
Avatar billede doncarnage Nybegynder
13. november 2008 - 20:20 #10
Nope, der kommer slet ingen fejlmeddelelser.. Den udskriver ingen af <h1>'erne, så det virker lidt somom den slet ikke kører scriptet af en eller anden grund.. Jeps, har skriveadgang til mappen med billederne :/
Avatar billede ziron Nybegynder
14. november 2008 - 12:43 #11
Prøv at lave et echo efter disse 2 linjer, for at se om scriptet køres?

if(isset($_POST['Submit']))
{

if ($image)
{
Avatar billede doncarnage Nybegynder
14. november 2008 - 19:52 #12
Jeps okay.. Det var der hele fejlen lå.. Scriptet blev slet ikke kørt som jeg mistænkte, så jeg prøvede mig frem med en if ($_POST['referer'] == 'post_vare') i stedet for og det gav pote..

Tak for hjælpen! Smid et svar og du skal få points ;)
Avatar billede ziron Nybegynder
15. november 2008 - 11:46 #13
Ja havde da slet ikke slev tænkt over den tjekker en knap du ikke har.

Men hvis det kører er det jo alletiders :)
Avatar billede doncarnage Nybegynder
15. november 2008 - 17:45 #14
Heh nej, den mulighed havde jeg også stiret mig fuldstændig blind over for :)

Men jeps, nu kører det i hvert fald nogenlunde efter hensigten.. Eneste problem er at hvis man vælger at uploade et billede, der er for stort.. Så udskriver den godt nok en fejlmeddelelse og rækken bliver ikke oprettet i taballen.. Men billedet bliver stadig uploadet :/ Det kæmper jeg lidt med at fixe
Avatar billede ziron Nybegynder
16. november 2008 - 22:32 #15
Hvad vil du gerne have der sker hvis man uploader et for stort billede?

Der er også forskel på hvor MAX_SIZE som du definerer i scriptet og max size som serveren tillader man oploader.

Server værdien kan du få sådan her:
Avatar billede ziron Nybegynder
16. november 2008 - 22:32 #16
"ini_get('post_max_size')"
Avatar billede doncarnage Nybegynder
16. november 2008 - 23:16 #17
Altså så vil jeg bare gerne have at den udskriver fejlmeddelsen som den gør nu (You have exceeded the size limit!) og at den så lader være med at uploade billedet, samt skriver noget til tabellen :)
Avatar billede ziron Nybegynder
17. november 2008 - 07:28 #18
Okay så laver du bare den if sætning hvor du gemmer til databasen om til

if ($_POST['referer'] == 'post_vare')

om til :

if (($_POST['referer'] == 'post_vare') && (!$errors))

Og det her:

//compare the size with the maxim size we defined and print error if bigger
if ($size > MAX_SIZE*1024)
{
echo '<h1>You have exceeded the size limit!</h1>';
$errors=1;
}

//we will give an unique name, for example the time in unix time format
$image_name=time().'.'.$extension;
//the new name will be containing the full path where will be stored (images folder)
$newname="images/".$image_name;
//we verify if the image has been uploaded, and print error instead
$copied = copy($_FILES['image']['tmp_name'], $newname);
if (!$copied)
{
echo '<h1>Copy unsuccessfull!</h1>';
$errors=1;
}}}}

om til:

//compare the size with the maxim size we defined and print error if bigger
if ($size > MAX_SIZE*1024)
{
echo '<h1>You have exceeded the size limit!</h1>';
$errors=1;

//we will give an unique name, for example the time in unix time format
$image_name=time().'.'.$extension;
//the new name will be containing the full path where will be stored (images folder)
$newname="images/".$image_name;
//we verify if the image has been uploaded, and print error instead
$copied = copy($_FILES['image']['tmp_name'], $newname);
if (!$copied)
{
echo '<h1>Copy unsuccessfull!</h1>';
$errors=1;
}}}}}

Dette er ikke testet!
Avatar billede doncarnage Nybegynder
17. november 2008 - 22:24 #19
Det virkede ikke rigtig efter hensigten, faktisk langt fra desværre..

Hvis jeg prøvede at oprette en vare med tilhørende billede, hvor billedet ikke var for stort skrev den godt nok data til tabellen og skrev at billedet var uploadet.. Men det blev ikke uploadet..

Hvis jeg derimod prøvede at oprette en vare med tilhørende billede, hvor billedet VAR for stort skrev den fejlbeskeden med "exceeded size limit", men her valgte den så alligevel både at uploade billedet og skrive data til tabellen :o
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