torsdag 13 oktober 2011
Lagra bilder i Mysql (skapa dynamiskt galleri)
Lagra bilder i Mysql (skapa dynamiskt galleri)
I detta inlägg kommer jag gå igenom hur man laddar upp bilder till din databas och sedan hanterar (lägger till tar bort) dem. Ursprungliga har jag hittat på nätet.
/*Uppdaterad,
fixat sql fråga. tack till peetra
*/
Det vi ska börja med är att skapa tabellen i vår databas.
CREATE TABLE `img_gallery` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(64) character SET utf8 NOT NULL, `ext` varchar(8) character SET utf8 NOT NULL, `image_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `data` mediumblob NOT NULL, PRIMARY KEY (`id`) );
Nästa steg är att skapa en Phpfil, namge den till "image.php" eller något passande, jag har lagt all kod i samma fil.
<?php
$db_host = "";
//Användarnamn för vår MySQL databas
$db_username = "";
//Lösenord för vår MySQL databas
$db_pass = "";
//namn för vår MySQL databas
$db_name = "";
$table = 'img_gallery';
//
if (!mysql_connect($db_host, $db_username, $db_pass))
die("Can't connect to database");
if (!mysql_select_db($db_name))
die("Can't select database");
function sql_safe($s)
{
if (get_magic_quotes_gpc())
$s = stripslashes($s);
return mysql_real_escape_string($s);
}
//___________________________________________________________________________________________________________________________
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$title = trim(sql_safe($_POST['title']));
$text = trim(sql_safe($_POST['text']));
if ($title == '') // om titeln inte är satt
$title = 'Okänd titel';// Så använder vi detta som titel
if (isset($_FILES['photo']))
{
@list(, , $imtype, ) = getimagesize($_FILES['photo']['tmp_name']);
if ($imtype == 3) // Kollar bildtyp
$ext="png";
elseif ($imtype == 2)
$ext="jpeg";
elseif ($imtype == 1)
$ext="gif";
else
$msg = 'Error: unknown file format';
if (!isset($msg)){
$data = file_get_contents($_FILES['photo']['tmp_name']);
$data = mysql_real_escape_string($data);
mysql_query("INSERT INTO {$table}
SET ext='$ext', title='$title',
data='$data', text='$text'");
$msg = 'Filen laddades upp!';
}
}
elseif (isset($_GET['title']))
$msg = 'Error: filen laddades inte upp';
//___________________________________________________________________________________________________________________________
if(!empty($_REQUEST['Delete'])){
$id = intval($_POST['opt']);
mysql_query("DELETE FROM {$table} WHERE id=$id");
$msg = 'Bild Raderad';
}
$notemsg = 'Ladda upp bild';
//___________________________________________________________________________________________________________________________
if(!empty($_REQUEST['Change'])){
$id = intval($_POST['opt']);
$result = mysql_query("SELECT id, title, data, text FROM {$table} WHERE id=$id");
list($id, $imgtitle, $imgdata, $imgtext) = mysql_fetch_row($result);
$notemsg = 'Ändra bilddata';
$savebutton = '<label for="photo">Foto:</label><br>
<input type="file" name="updatephoto" id="updatephoto"><br><br> <input type="submit" name="Save" value="Spara">';
}
//___________________________________________________________________________________________________________________________
if(!empty($_REQUEST['Save'])){
if (isset($_FILES['updatephoto'])){
@list(, , $imtype, ) = getimagesize($_FILES['updatephoto']['tmp_name']);
if ($imtype == 3)
$ext="png";
elseif ($imtype == 2)
$ext="jpeg";
elseif ($imtype == 1)
$ext="gif";
else
$errormsg = 'Error: Okänt filformat';
if (!isset($errormsg)){
$data = file_get_contents($_FILES['updatephoto']['tmp_name']);
$data = mysql_real_escape_string($data);
}
}
$id = intval($_POST['opt']);
mysql_query("UPDATE {$table} SET ext='$ext', title='$_POST[title]', data='$data', text='$_POST[text]' WHERE id='$id'");
$msg = 'Sparat';
}
//___________________________________________________________________________________________________________________________
}
elseif (isset($_GET['show'])){
$id = intval($_GET['show']);
$result = mysql_query("SELECT ext, UNIX_TIMESTAMP(image_time), data
FROM {$table}
WHERE id=$id LIMIT 1");
if (mysql_num_rows($result) == 0)
die('no image');
list($ext, $image_time, $data) = mysql_fetch_row($result);
$send_304 = false;
if (php_sapi_name() == 'apache'){
$ar = apache_request_headers();
if (isset($ar['If-Modified-Since']) &&
($ar['If-Modified-Since'] != '') &&
(strtotime($ar['If-Modified-Since']) >= $image_time))
$send_304 = true;
}
if ($send_304){
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $ts).' GMT', true, 304);
exit();
}
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $image_time).' GMT',
true, 200);
header('Expires: '.gmdate('D, d M Y H:i:s', $image_time + 86400*365).' GMT',
true, 200);
header('Content-Length: '.strlen($data));
header("Content-type: image/{$ext}");
echo $data;
exit();
}
?>
<html><head>
<title>Bildgalleri</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
if (isset($msg)) {
?>
<p style="font-weight: bold;"><?=$msg?>
<br>
<a href="<?=$PHP_SELF?>">Ladda om sida</a>
</p>
<?php
}
?>
<h2>Uppladdade bilder:</h2>
<form action="<?=$PHP_SELF?>" method="post">
<?php
$result = mysql_query("SELECT id, image_time, title FROM {$table} ORDER BY id DESC");
if (mysql_num_rows($result) == 0) // om tabellen är tom
echo '<ul><li>Inga bilder hämtades..</li></ul>';
else
{
echo '<ul>';
while(list($id, $image_time, $title) = mysql_fetch_row($result))
{
// Skriver ut
echo "<li><input type='radio' name='opt' value='{$id}'>";
echo "<a href='{$PHP_SELF}?show={$id}'>{$title}</a> – ";
echo "<small>{$image_time}</small></li>";
}
echo '</ul>';
echo '<input type="submit" name="Delete" value="Radera Vald">';
echo '<input type="submit" name="Change" value="Ändra Vald">';
}
?>
</form>
<h2><?php echo $notemsg; ?></h2>
<form action="<?=$PHP_SELF?>" method="POST" enctype="multipart/form-data">
<label for="title">Titel:</label><br>
<input type="text" name="title" id="title" value="<?php echo $imgtitle;?>" size="30"><br><br>
<label for="text">Bildtext:</label><br>
<textarea name="text" rows="10" cols="30"><?php echo $imgtext;?></textarea><br><br>
<?php echo "<input type='hidden' name='opt' value=".$_POST['opt'].">"; ?>
<?php
if(empty($_REQUEST['Change']))
{
echo '<label for="photo">Foto:</label><br>
<input type="file" name="photo" id="photo"><br><br>
<input type="submit" value="Ladda upp">';
}
echo $savebutton;
?>
</form>
</body>
</html>
Starta och kör.
Det kan kännas som väldigt mycket kod, och lite förklaring, men tanken är att du själv ska anpassa den efter hur du vill ha den. Och att jag slipper skriva så mycket ;)
Har du problem så kommentera gärna nedan, så hjälper jag till.
Prenumerera på:
Kommentarer till inlägget (Atom)
Du har glömt fältet 'text' i SQL-frågan.
SvaraRadera