Avatar billede clausberg Nybegynder
27. maj 2006 - 14:54 Der er 40 kommentarer og
1 løsning

Upload image

Jeg har fået dette script til at oploade billeder til en mysql database... men et eller andet går galt for mig?!

Kan I se hvad det er? Umiddelbart ser det ud til at der er for mange:
mysql_connect ("host.... osv)

Og burde der ikke stå noget mellem de to "" i sætningen:
<form action="" method="post"

God fornøjelse :-)

<?
mysql_connect("localhost", "bruger", "pass");
mysql_select_db("database");

// eller include config.php

?>

<form action="" method="post" enctype="multipart/form-data" name="">
<b>Titel  </b><input type="text" name="title1">
<p>
<b>Tekst</b><br>
<textarea name="text1" cols="50" rows="30"></textarea>


<p>
    <input type="file" name="image">
 

    <input type="submit" name="upload" value="upload">

  <p>&nbsp;  </p>
</form>

<?
if(isset($_POST['upload'])){

mysql_connect("localhost", "bruger", "pass");
mysql_select_db("site");


$file = fopen($_FILES['image']['tmp_name'], "r");
$image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'])));
$text = $_POST["text1"];
$title = $_POST["title1"];

mysql_query("insert into images values('null','$image','$text','$title')") or die(mysql_error());

echo "Tekst og billede er uploaded!";

}
?>

<?
mysql_close();
?>
Avatar billede jakobdo Ekspert
27. maj 2006 - 15:20 #1
Du kan godt fjerne den øverste:
<?
mysql_connect("localhost", "bruger", "pass");
mysql_select_db("database");

// eller include config.php

?>
Den bruges som sådan ikke.

Og som du selv er inde på, så kan du tilføje:
<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="">

Dog bør du nok teste om billedet er der.
Prøv lidt debug som f.eks. inde i koden:
if(isset($_POST['upload'])){
og skriv:

echo '<pre>';
print_r($_FILES);
echo '</pre>';
exit();
Avatar billede clausberg Nybegynder
27. maj 2006 - 15:33 #2
Aha... :-)

Hvad gør sætningen:
<form action="<?=$_SERVER['PHP_SELF'];?>"

.. altså php_self?????
Avatar billede jakobdo Ekspert
27. maj 2006 - 15:39 #3
Jeg har lige flyttet lidt rundt på koden, test denne kode:

<?
if(isset($_POST['upload']))
{
    mysql_connect("localhost", "bruger", "pass");
    mysql_select_db("site");

    $file = fopen($_FILES['image']['tmp_name'], "r");
    $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'])));
    $text = $_POST["text1"];
    $title = $_POST["title1"];

    mysql_query("insert into images values('null','$image','$text','$title')") or die(mysql_error());

    echo "Tekst og billede er uploaded!";

}
mysql_close();
?>

<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="">
<b>Titel  </b><input type="text" name="title1">
<p>
<b>Tekst</b><br>
<textarea name="text1" cols="50" rows="30"></textarea>
<p>
    <input type="file" name="image">
    <input type="submit" name="upload" value="upload">
    <p>&nbsp;  </p>
</form>
Avatar billede maxer Nybegynder
27. maj 2006 - 16:22 #4
<form action="<?=$_SERVER['PHP_SELF'];?>"

gør at al form-info'en bliver sendt til siden selv
Avatar billede clausberg Nybegynder
28. maj 2006 - 15:52 #5
Jamen det virker jo fint nu...
men hvad skal jeg så skrive hvis jeg har fx 3 billeder - med hver sin titel og tekst?
Er det bare at kopiere formen og sæt den ind 3 gange? Og kalæde dem:
image2
text2
title2

image3
text3
osv. osv.??
Avatar billede maxer Nybegynder
28. maj 2006 - 15:58 #6
ja, men ikke <form> tags'ne, bare indmaden

<b>Titel  </b><input type="text" name="title1">
<p>
<b>Tekst</b><br>
<textarea name="text1" cols="50" rows="30"></textarea>
<p>
    <input type="file" name="image">
    <input type="submit" name="upload" value="upload">
    <p>&nbsp;  </p>

den del. så skal du selvfølgelig give dem forskellige name.
Avatar billede clausberg Nybegynder
28. maj 2006 - 16:14 #7
Jeg har gjort følgende:

<?
if(isset($_POST['upload']))
{
    mysql_connect("localhost", "XXX", "XXX");
    mysql_select_db("XXX");

    $file = fopen($_FILES['image']['tmp_name'], "r");
    $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'])));
    $text = $_POST["text"];
    $title = $_POST["title"];

    mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error());

    echo "Tekst og billede er uploaded!";

}
mysql_close();
?>

<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="">
<b>Titel</b><input type="text" name="title1">
<p>
<b>Tekst</b><br>
<textarea name="text1" cols="50" rows="30"></textarea>
<p>
    <input type="file" name="image">
    <p>&nbsp;  </p>



<b>Titel</b><input type="text" name="title">
<p>
<b>Tekst</b><br>
<textarea name="text" cols="50" rows="30"></textarea>
<p>
    <input type="file" name="image">
    <input type="submit" name="upload" value="upload">
    <p>&nbsp;  </p>


</form>

Når jeg kører scriptet, er det kun den sidste forms tekst, titel og billede der bliver oploaded til databasen? Jeg har fjernet 1´tallet i:
    $text = $_POST["text1"];
    $title = $_POST["title1"];
Avatar billede maxer Nybegynder
28. maj 2006 - 16:23 #8
når du gør som du viser burde du gerne kunne hente det hele ud med

    $text = $_POST["text"];
    $title = $_POST["title"];

    $text1 = $_POST["text1"];
    $title1 = $_POST["title1"];

men du skal jo også skrive
<input type="file" name="image1">
det ene sted
Avatar billede clausberg Nybegynder
28. maj 2006 - 16:38 #9
Nu har jeg skrevet dette - det virker ikke. Det er kun den sidste "form" der bliver oploaded - kan det have noget at gøre med, at submit knappen ligger der?

<?
if(isset($_POST['upload']))
{
    mysql_connect("localhost", "XXX", "XXX");
    mysql_select_db("XXX");

    $file = fopen($_FILES['image']['tmp_name'], "r");
    $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'])));
    $text = $_POST["text"];
    $title = $_POST["title"];


    $text = $_POST["text1"];
    $title = $_POST["title1"];


    mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error());

    echo "Tekst og billede er uploaded!";

}
mysql_close();
?>

<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="">

<b>Titel</b><input type="text" name="title">
<p>
<b>Tekst</b><br><textarea name="text" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image">
    <p>&nbsp;  </p>



<b>Titel</b><input type="text" name="title1">
<p>
<b>Tekst</b><br>
<textarea name="text1" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image1">
    <input type="submit" name="upload" value="upload">
    <p>&nbsp;  </p>


</form>
Avatar billede clausberg Nybegynder
28. maj 2006 - 16:39 #10
Ja, jeg har jo også fjernet den eneste submit knap, så jeg kun skal trykke submit eet sted
Avatar billede jakobdo Ekspert
28. maj 2006 - 16:57 #11
Prøv lige denne kode:

<?
if(isset($_POST['upload']))
{
    mysql_connect("localhost", "XXX", "XXX");
    mysql_select_db("XXX");

    for($i = 0; $i < count($_FILES['image']); $i++)
    {
        $file  = fopen($_FILES['image']['tmp_name'][$i], "r");
        $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'][$i])));
        $text  = mysql_real_escape_string($_POST["text"][$i]);
        $title = mysql_real_escape_string($_POST["title"][$i]);

        mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error());
    }

    echo "Tekst og billede er uploaded!";

}
mysql_close();
?>

<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="">
<b>Titel 1</b><input type="text" name="title[]">
<p>
<b>Tekst 1</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

<b>Titel 2</b><input type="text" name="title[]">
<p>
<b>Tekst 2</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

<b>Titel 3</b><input type="text" name="title[]">
<p>
<b>Tekst 3</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

</form>
Avatar billede clausberg Nybegynder
28. maj 2006 - 16:58 #12
Jeg har lige opdaget en fejl... der skal selvfølgelig stå:

    $text1 = $_POST["text1"];
    $title1 = $_POST["title1"];

jeg havde glemt 1´tallerne...

Men det gør nu ingen forskel!

Det er kun den første form hvis indhold der bliver uploaded til databasen?
Avatar billede jakobdo Ekspert
28. maj 2006 - 17:05 #13
Og nok mere præcist denne kode:

<?
//http://www.eksperten.dk/spm/712121
if(isset($_POST['uploadPics']))
{
    mysql_connect("localhost", "XXX", "XXX");
    mysql_select_db("XXX");

    for($i = 0; $i < count($_FILES['image']['name']); $i++)
    {
        $file  = fopen($_FILES['image']['tmp_name'][$i], "r");
        $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'][$i])));
        $text  = mysql_real_escape_string($_POST["text"][$i]);
        $title = mysql_real_escape_string($_POST["title"][$i]);

        mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error());
    }
    echo "Tekst og billede er uploaded!";
   
    mysql_close();
}
?>

<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="">
<b>Titel 1</b><input type="text" name="title[]">
<p>
<b>Tekst 1</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

<b>Titel 2</b><input type="text" name="title[]">
<p>
<b>Tekst 2</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

<b>Titel 3</b><input type="text" name="title[]">
<p>
<b>Tekst 3</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

<input type="submit" name="uploadPics" value="Upload Billeder">
</form>
Avatar billede clausberg Nybegynder
28. maj 2006 - 17:06 #14
JA, DET VIRKER!!!!!! Altså efter jeg indsatte en submit knap :-)

Men der bliver samtidigt også oprettet 2 tomme felter. DVS i min database bliver der oprettet 2 tomme linier samtidigt med at der rigtigt nok oprettes 3 linier med de indtastede informationer.

Hvorfor det?
Avatar billede jakobdo Ekspert
28. maj 2006 - 17:08 #15
Jeg har rettet det.
Dette er nok mere præcist:

<?
//http://www.eksperten.dk/spm/712121
if(isset($_POST['uploadPics']))
{
    mysql_connect("localhost", "XXX", "XXX");
    mysql_select_db("XXX");

    for($i = 0; $i < count($_FILES['image']['name']); $i++)
    {
       
        $file  = fopen($_FILES['image']['tmp_name'][$i], "r");
        $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'][$i])));
        $text  = mysql_real_escape_string($_POST["text"][$i]);
        $title = mysql_real_escape_string($_POST["title"][$i]);
       
        if($_FILES['image']['size'][$i] > 0)
            mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error());
    }
    echo "Tekst og billede er uploaded!";
   
    mysql_close();
}
?>

<form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="">
<b>Titel 1</b><input type="text" name="title[]">
<p>
<b>Tekst 1</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

<b>Titel 2</b><input type="text" name="title[]">
<p>
<b>Tekst 2</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

<b>Titel 3</b><input type="text" name="title[]">
<p>
<b>Tekst 3</b><br><textarea name="text[]" cols="30" rows="10"></textarea>
<p>
    <input type="file" name="image[]">
    <p>&nbsp;  </p>

<input type="submit" name="uploadPics" value="Upload Billeder">
</form>
Avatar billede anders2002 Nybegynder
29. maj 2006 - 13:28 #16
Hvordan har du lavet mysql databasen?Hvordan opsætter man den? ? ?
Avatar billede jakobdo Ekspert
29. maj 2006 - 17:26 #17
Jeg tror den er lavet noget nær:

Tabelnavn: image
Felter:
id - int autoincrement
image - longblob
text - text
title - varchar(255)

id skal være primary key.
Avatar billede jakobdo Ekspert
29. maj 2006 - 17:26 #18
Og clausberg, fik du det til at virke?
Avatar billede clausberg Nybegynder
29. maj 2006 - 22:09 #19
Hey... det virker som en drøm :-)
Jeg har sat databasen op næsten som du har skrevet...
text har jeg dog sat til varchar... er det en fejl?

Jeg er ved at prøve at regne ud hvordan jeg så kommer til at se billederne - jeg har fundet et script på
http://www.onlamp.com/pub/a/onlamp/2002/05/09/webdb2.html
men ved ikke helt om det dur?
Avatar billede jakobdo Ekspert
29. maj 2006 - 22:19 #20
Du kunne bruge noget i stil med:
<?php

require_once("connect.php");

$imgID = mysql_real_escape_string($_GET['id']);

$query = mysql_query("select pic from billeder WHERE id = '".$imgID."' LIMIT 1") or die (mysql_error());

if(mysql_num_rows($query)>0)
{
    $row = mysql_fetch_assoc($query);
    header("Content-type: image/jpeg");
    print $row['pic'];
    exit ();
}

?>

virker dog kun til jpeg/jpg/jpe billeder.
Avatar billede clausberg Nybegynder
29. maj 2006 - 22:35 #21
Fint... men hvad er connect.php?
Avatar billede jakobdo Ekspert
30. maj 2006 - 08:27 #22
Bare en fil som indeholder:
<?php
mysql_connect("localhost", "XXX", "XXX");
mysql_select_db("XXX");
?>
Avatar billede clausberg Nybegynder
30. maj 2006 - 22:17 #23
Jeg får fejlen:

Unknown column 'pic' in 'field list'

Skal det hedde select pic??? er der en kommando der hedder "pic"?
Avatar billede jakobdo Ekspert
31. maj 2006 - 07:52 #24
select pic from billeder WHERE id = '".$imgID."' LIMIT 1
og
print $row['pic'];

Skal rettes til.
Det er nok:
select image from image WHERE id = '".$imgID."' LIMIT 1
og
print $row['image'];
Avatar billede clausberg Nybegynder
31. maj 2006 - 20:53 #25
Nej desværre... nu sker der ikke noget.

Jeg har også haft kig på:

<?php
    // just so we know it is broken
    error_reporting(E_ALL);
    // some basic sanity checks
    if(isset($_GET['image_id']) && is_numeric($_GET['image_id'])) {
        //connect to the db
        $link = mysql_connect("localhost", "username", "password") or die("Could not connect: " . mysql_error());

        // select our database
        mysql_select_db("testblob") or die(mysql_error());

        // get the image from the db
        $sql = "SELECT image FROM testblob WHERE image_id=0";

        // the result of the query
        $result = mysql_query("$sql") or die("Invalid query: " . mysql_error());

        // set the header for the image
        header("Content-type: image/jpeg");
        echo mysql_result($result, 0);

        // close the db link
        mysql_close($link);
    }
    else {
        echo 'Please use a real id number';
    }
?>

Jeg får blot en fejlmeddelse der siger:
'Please use a real id number'
Avatar billede jakobdo Ekspert
31. maj 2006 - 20:55 #26
Du har fejl i:
$sql = "SELECT image FROM testblob WHERE image_id=0";

Det skal være:
$sql = "SELECT image FROM testblob WHERE image_id='$_GET['image_id']'";
Avatar billede olebole Juniormester
31. maj 2006 - 20:58 #27
<ole>

Skal der ikke læses binært? Så skal der vel bruges "rb" og ikke "r" i fopen ...(?)  :)

/mvh
</bole>
Avatar billede jakobdo Ekspert
31. maj 2006 - 21:00 #28
Godt set olebole, det havde jeg faktisk også lavet i noget tidligere kode.

Olebole: Offtopic, da du var i Framfab, var der da også en som hed Ralph?
Avatar billede olebole Juniormester
31. maj 2006 - 21:02 #29
ehhhhhh ... vi havde 6 kontorer i Kbh. på det tidspunkt. Hvad lavede han? Designer, interface developer, arkitekt, 'suit'? ... landsmand?  :)
Avatar billede jakobdo Ekspert
31. maj 2006 - 21:08 #30
Jeg tror han var noget interface developer, men ikke helt sikkert. Men nevermind! :o)
Avatar billede olebole Juniormester
31. maj 2006 - 21:31 #31
... der er ét eller andet i tågerne, men jeg kan ikke sætte adresse på i øjeblikket  :)
Avatar billede clausberg Nybegynder
31. maj 2006 - 21:59 #32
"rb" og ikke "r" i fopen ...???? :-) Øh.... :-) hvor er det lige jeg ændrer det?
Avatar billede clausberg Nybegynder
31. maj 2006 - 22:02 #33
Og er der ikke et & for meget i:
  if(isset($_GET['image_id']) && is_numeric($_GET['image_id'])) {
Avatar billede jakobdo Ekspert
01. juni 2006 - 08:06 #34
$file  = fopen($_FILES['image']['tmp_name'][$i], "r");
skal være:
$file  = fopen($_FILES['image']['tmp_name'][$i], "rb");

og && er det samme som AND :o)
Og det skal være &&, en & betyder call by reference
Avatar billede clausberg Nybegynder
01. juni 2006 - 16:22 #35
Fopen relaterer sig jo til upload siden... vil det sige, at ved at ændre "r" til "rb", så jeg gemmer billederne i et nyt format?
Og vil det så være muligt at se billederne med det script du har foreslået.
Kan desværre først teste det i aften.
Avatar billede clausberg Nybegynder
01. juni 2006 - 18:38 #36
Jeg har nu ændret til "rb" og kan se at billederne bliver gemt binært... men hverken det ene "vis billede" script eller det andet virker... jeg får blot blank skærm
Avatar billede clausberg Nybegynder
01. juni 2006 - 18:51 #37
Kan det have noget at gøre med den måde jeg har bygget min table op på???

id int(11) nulværdi: nej autoincrement primæary
image longblob binary nulværdi: nej
text varchar (30) nulværdi: nej
title varchar (30) nulværdi: nej
Avatar billede jakobdo Ekspert
01. juni 2006 - 22:02 #38
Det ser nu rigtigt nok ud...
Du må fange mig på MSN, så må vi kigge på det sammen.
jakobdo (at) hotmail [dot] com
Avatar billede clausberg Nybegynder
01. juni 2006 - 22:16 #39
Super - det vil jeg nok gøre. Du har ihvertfald fortjent dine point ;-)... så smid et svar. Og MANGE TAK for hjælpen.
Avatar billede jakobdo Ekspert
01. juni 2006 - 22:17 #40
Svar!
Avatar billede jakobdo Ekspert
02. juni 2006 - 11:47 #41
Takker for point.
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