Avatar billede Frederik Nybegynder
30. december 2007 - 15:08 Der er 13 kommentarer og
1 løsning

Tilføje tekstområde til billedupload

Hej.

Jeg har et uploadsystem til billeder. Jeg vil dog gerne have så jeg kan tilføje noget tekst der kan blive vist sammen med billedet. Er det noget i kan hjælpe med?

#add.php#
<form action="upload-ok.php" method="post" enctype="multipart/form-data" name="uploadform">
<input type="hidden" name="MAX_FILE_SIZE" value="350000">
<input name="picture" type="file" id="picture" size="50">
<input name="upload" type="submit" id="upload" value="Upload">
</form>

#upload-ok.php#
<?php
// if something was posted, start the process...
if(isset($_POST['upload']))
{

// define the posted file into variables
$name = $_FILES['picture']['name'];
$tmp_name = $_FILES['picture']['tmp_name'];
$type = $_FILES['picture']['type'];
$size = $_FILES['picture']['size'];

// get the width & height of the file (we don't need the other stuff)
list($width, $height, $typeb, $attr) = getimagesize($tmp_name);

// if width is over 600 px or height is over 500 px, kill it
if($width>'600' || $height>'500')
{
echo $name . " dimensions exceed the 600x500 pixel limit";
?>
  <p><a href="form.html">Click here</a> to try again.
    <? ;
die();
}

// if the file size is larger than 350 KB, kill it
if($size>'350000')
{
echo $name . " is over 350KB. Please make it smaller.";
?>
  <p><a href="form.html">Click here</a> to try again.
    <? ;
die();
}

// if your server has magic quotes turned off, add slashes manually
if(!get_magic_quotes_gpc())
{
$name = addslashes($name);
}

// if the mime type is anything other than what we specify below, kill it
if(!(
$type=='image/jpg' ||
$type=='image/jpeg' ||
$type=='image/pjpeg' ||
$type=='image/x-png' ||
$type=='image/png' ||
$type=='image/gif'
)) {
echo $type .  "is not an acceptable format.";
?>
  <p><a href="form.html">Click here</a> to try again.
    <? ;
die();
}

// open up the file and extract the data/content from it
$extract = fopen($tmp_name, 'r');
$content = fread($extract, $size);
$content = addslashes($content);
fclose($extract);

// connect to the database
include "../config.php";

// the query that will add this to the database
$addfile = "INSERT INTO files (name, size, type, content ) ".
        "VALUES ('$name', '$size', '$type', '$content')";

mysql_query($addfile) or die(mysql_error());

// get the last inserted ID if we're going to display this image next
$inserted_fid = mysql_insert_id();
mysql_close();

// display the image
?>
<div align="center">
    <strong><? echo $name; ?><br>
    </strong><img name="<? echo $name; ?>" src="getpicture.php?fid=<? echo $inserted_fid; ?>" alt="Unable to view image #<? echo $inserted_fid; ?>">
    <br>
    <a href="form.html">upload more images</a>
</div>
<?
// we still have to close the original IF statement. If there was nothing posted, kill the page.
}else{die("No uploaded file present");
}
?>



På forhånd tak!


- Frederik
Avatar billede nielle Nybegynder
30. december 2007 - 15:59 #1
Noget i denne stil?

Tabellen skal udvides med et decription-felt.

#add.php#
<form action="upload-ok.php" method="post" enctype="multipart/form-data" name="uploadform">
<input type="hidden" name="MAX_FILE_SIZE" value="350000">
<input name="description" type="text" id="upload" value="Beskrivelse">
<input name="picture" type="file" id="picture" size="50">
<input name="upload" type="submit" id="upload" value="Upload">
</form>

#upload-ok.php#
<?php
// if something was posted, start the process...
if (isset($_POST['upload'])) {
    // define the posted file into variables
    $name = $_FILES['picture']['name'];
    $tmp_name = $_FILES['picture']['tmp_name'];
    $type = $_FILES['picture']['type'];
    $size = $_FILES['picture']['size'];

    // get the width & height of the file (we don't need the other stuff)
    list($width, $height, $typeb, $attr) = getimagesize($tmp_name);

    // if width is over 600 px or height is over 500 px, kill it
    if ($width > 600 || $height > 500) {
        echo $name . " dimensions exceed the 600x500 pixel limit";
?>
  <p><a href="form.html">Click here</a> to try again.
<?
        die();
    }

    // if the file size is larger than 350 KB, kill it
    if ($size > 350000) {
        echo $name . " is over 350KB. Please make it smaller.";
?>
  <p><a href="form.html">Click here</a> to try again.
<?
        die();
    }

    // if your server has magic quotes turned off, add slashes manually
    if (!get_magic_quotes_gpc()) {
        $name = addslashes($name);
    }

    // if the mime type is anything other than what we specify below, kill it
    if ($type != 'image/jpg' &&
        $type != 'image/jpeg' &&
        $type != 'image/pjpeg' &&
        $type != 'image/x-png' &&
        $type != 'image/png' &&
        $type != 'image/gif') {
        echo $type . "is not an acceptable format.";
?>
  <p><a href="form.html">Click here</a> to try again.
<?
        die();
    }

    // open up the file and extract the data/content from it
    $extract = fopen($tmp_name, 'r');
    $content = fread($extract, $size);
    $content = addslashes($content);
    fclose($extract);

    // Get the desctiption.
    $description = $_POST['description'];
    $description = mysql_real_escape_string($description);

    // connect to the database
    include "../config.php";

    // the query that will add this to the database
    $addfile = "INSERT INTO files (name, description, size, type, content) VALUES ('$name', '$description', '$size', '$type', '$content')";
    mysql_query($addfile) or die(mysql_error());

    // get the last inserted ID if we're going to display this image next
    $inserted_fid = mysql_insert_id();
    mysql_close();

    // display the image
?>
<div align="center">
    <strong><? echo $name; ?><br>
    </strong><img name="<? echo $name; ?>" src="getpicture.php?fid=<? echo $inserted_fid; ?>" alt="Unable to view image #<? echo $inserted_fid; ?>">
    <br>
    <a href="form.html">upload more images</a>
</div>
<?
    // we still have to close the original IF statement. If there was nothing posted, kill the page.
} else {
    die("No uploaded file present");
}
?>
Avatar billede Frederik Nybegynder
30. december 2007 - 16:22 #2
Jeg får følgende fejlmeddelelse:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\recaroshop.dk\test\picupload\upload-ok.php on line 58

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\xampp\htdocs\recaroshop.dk\test\picupload\upload-ok.php on line 58


Ved ikke om mit spørgsmål er forstået forkert eller om jeg bare opfatter det forkert. skal der ikke bruges et textarea eller noget? Så der kunne være mulighed for at lave linjeskift og sådan.. altså skrive lidt om billedet...
Avatar billede nielle Nybegynder
30. december 2007 - 17:47 #3
Nu har jeg bare lavet det som et alm. input=text felt, men der er intet i vejen for at du laver det som et textarea i stedet. Det er den samme grund kode der skal bruges. Hvis du ønkser at bevare linjeskift, skal der så også lige et kald til nl2br() med i koden.

Det lyder straks lidt mere underligt at den ikke acceptere mysql_real_escape_string(). Men der er måsk nok at du flytter din:

include "../config.php";

op, til lige før linjen hvor mysql_real_escape_string() bruges.
Avatar billede Frederik Nybegynder
30. december 2007 - 18:10 #4
Nu har jeg flyttet config.php længere op, og det virker nu ser det ud til.. Jeg får bare en fejl nu fra sidst i scriptet "Unable to view image #3"... Kan det være noget i min getpicture.php der ikke er sat op til tekst???


#getpicture.php#
<?
if(isset($_GET['fid']))
{
// connect to the database
include "../config.php";

$fid = $_GET['fid'];
$query = "SELECT * FROM files WHERE fid = '$fid'";
$result  = mysql_query($query) or die(mysql_error());

// define results into variables
$name=mysql_result($result,0,"name");
$size=mysql_result($result,0,"size");
$type=mysql_result($result,0,"type");
$content=mysql_result($result,0,"content");

// give our picture the proper headers...otherwise our page will be confused
header("Content-Disposition: attachment; filename=$name");
header("Content-length: $size");
header("Content-type: $type");
echo $content;

mysql_close();
}else{
die("No file ID given...");
}

?>
Avatar billede nielle Nybegynder
30. december 2007 - 18:21 #5
Jeg går ud fra at den kode har virket tidligere? ... og da den ikke prøver at gøre noget med description-feltet burde den heller ikke fejle nu.

Det eneste jeg kan forestille mig som eventuelt skulle kunne drille, er hvis du har indsat description-feltet i tabellen efter content-feltet. Jeg er ikke helt klar over årsagen, men det plejer at virke bedre hvis blobfelter, som dit content, ligger sist i SQL'en.
Avatar billede Frederik Nybegynder
30. december 2007 - 18:54 #6
Hmm.. Er lidt forvirret..



Nu ser min add.php sådan ud:

<form action="upload-ok.php" method="post" enctype="multipart/form-data" name="uploadform">
<input type="hidden" name="MAX_FILE_SIZE" value="3500000">
<input name="picture" type="file" id="picture" size="50"><br>
<textarea name="description">Beskrivelse</textarea><br>
<input name="upload" type="submit" id="upload" value="Upload">
</form>

og min getpicture.php ser sådan ud:
<?
if(isset($_GET['fid']))
{
// connect to the database
include "config.php";

$fid = $_GET['fid'];
$query = "SELECT * FROM files WHERE fid = '$fid'";
$result  = mysql_query($query) or die(mysql_error());

// define results into variables
$name=mysql_result($result,0,"name");
$size=mysql_result($result,0,"size");
$type=mysql_result($result,0,"type");
$content=mysql_result($result,0,"content");

// give our picture the proper headers...otherwise our page will be confused
header("Content-Disposition: attachment; filename=$name");
header("Content-length: $size");
header("Content-type: $type");
echo $content;

mysql_close();
}else{
die("No file ID given...");
}

?>

Hvad skal jeg skrive i getpicture.php for at hente den tilføjede tekst fra databasen??
Avatar billede nielle Nybegynder
30. december 2007 - 19:36 #7
Det kan man ikke gøre på den måde. Billedet og teksten er stadig forsellige to ting.

Den kode du har henter og viser/downloader selve billedet. For at vise teksten samtidig, så skal billedet indlejres i en større side hvor du så kan vise teksten ved siden af.
Avatar billede Frederik Nybegynder
30. december 2007 - 19:40 #8
hmmm.. forstår ikke helt hvad du mener...
Avatar billede Frederik Nybegynder
30. december 2007 - 19:59 #9
Nu har jeg tilføjet lidt til min upload-ok.php, så teksten bliver vist.. Hvordan er det så jeg bruger, så jeg kan beholde linjeskift?


<?php
// if something was posted, start the process...
if (isset($_POST['upload'])) {
    // define the posted file into variables
    $name = $_FILES['picture']['name'];
    $tmp_name = $_FILES['picture']['tmp_name'];
    $type = $_FILES['picture']['type'];
    $size = $_FILES['picture']['size'];

    // get the width & height of the file (we don't need the other stuff)
    list($width, $height, $typeb, $attr) = getimagesize($tmp_name);

    // if width is over 600 px or height is over 500 px, kill it
    if ($width > 6000 || $height > 5000) {
        echo $name . " dimensions exceed the 6000x5000 pixel limit";
?>
  <p><a href="form.html">Click here</a> to try again.
<?
        die();
    }

    // if the file size is larger than 350 KB, kill it
    if ($size > 3500000) {
        echo $name . " is over 3500KB. Please make it smaller.";
?>
  <p><a href="form.html">Click here</a> to try again.
<?
        die();
    }

    // if your server has magic quotes turned off, add slashes manually
    if (!get_magic_quotes_gpc()) {
        $name = addslashes($name);
    }

    // if the mime type is anything other than what we specify below, kill it
    if ($type != 'image/jpg' &&
        $type != 'image/jpeg' &&
        $type != 'image/pjpeg' &&
        $type != 'image/x-png' &&
        $type != 'image/png' &&
        $type != 'image/gif') {
        echo $type . "is not an acceptable format.";
?>
  <p><a href="form.html">Click here</a> to try again.
<?
        die();
    }

    // open up the file and extract the data/content from it
    $extract = fopen($tmp_name, 'r');
    $content = fread($extract, $size);
    $content = addslashes($content);
    fclose($extract);

  // connect to the database
    include "config.php";

    // Get the description.
    $description = $_POST['description'];
    $description = mysql_real_escape_string($description);



    // the query that will add this to the database
    $addfile = "INSERT INTO files (name, description, size, type, content) VALUES ('$name', '$description', '$size', '$type', '$content')";
    mysql_query($addfile) or die(mysql_error());

    // get the last inserted ID if we're going to display this image next
    $inserted_fid = mysql_insert_id();
    mysql_close();

    // display the image
?>
<div align="center">
    <strong><? echo $name; ?><br>
    </strong><img name="<? echo $name; ?>" src="getpicture.php?fid=<? echo $inserted_fid; ?>" alt="Unable to view image #<? echo $inserted_fid; ?>">
    <br><br>
<?
require("config.php");
$query = mysql_query("SELECT fid, description FROM files where fid='$inserted_fid'") or die(mysql_error());
while($row = mysql_fetch_assoc($query)) {
  echo"
  <tr>
    <td width=\"100%\">
    <p align=\"center\">
    <br>" .$row['description']. "
    </p>
    </td>

  </tr>
  ";
}
?>
    <a href="add.php">upload more images</a>
</div>
<?
    // we still have to close the original IF statement. If there was nothing posted, kill the page.
} else {
    die("No uploaded file present");
}
?>
Avatar billede nielle Nybegynder
30. december 2007 - 20:00 #10
Når du køre getpicture.php?id=123 får du kun selce billedet - ikke en hel side hvor at der også er plads til tekst.

For at indlejre det billede på en hjemmeside, skal der noget i stil med dette til:

abc <img src="getpicture.php?id=123"> def

Hvis det virker (hvad jeg ikke lige kan sige 100%) har du der en side hvor at du kan skrive teksten; F.eks. i stedet for det "def" jeg har vist.

Før at vi går videre skal du dog lige fortælle om:

abc <img src="getpicture.php?id=123"> def

rent faktisk viser en side med teksterne "abc" og "def" samt billedet.
Avatar billede nielle Nybegynder
30. december 2007 - 20:04 #11
Hvordan er det så jeg bruger, så jeg kan beholde linjeskift?>

Som sagt skal du have et kald til nl2br() med i spillet:

Enten her - før at du putter det i databasen:

    // Get the description.
    $description = $_POST['description'];
    $description = nl2br($description);
    $description = mysql_real_escape_string($description);

Eller her - efter at du har trukket ud fra databasen, og skal vise det på siden:

while($row = mysql_fetch_assoc($query)) {
  echo"
  <tr>
    <td width=\"100%\">
    <p align=\"center\">
    <br>" . nl2br($row['description']) . "
    </p>
    </td>

  </tr>
  ";
Avatar billede Frederik Nybegynder
30. december 2007 - 20:14 #12
Super ;) Det virker! Smid et svar! :D
Avatar billede nielle Nybegynder
30. december 2007 - 20:16 #13
Svar :^)
Avatar billede Frederik Nybegynder
30. december 2007 - 20:18 #14
Og 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