Lad os nu lige tage én ting ad gangen ... billed upload først ;o)
Det er ikke ret meget, jeg ved om din applikation, men jeg går udfra, din bruger er logget ind, når vedkommende skal uploade et billede - og at brugeren ligger med en ID i en DB-tabel et eller andet sted. Den kunne se sådan ud:
CREATE TABLE IF NOT EXISTS users (
id int(10) unsigned NOT NULL auto_increment,
username char(60) NOT NULL DEFAULT '0',
pass char(40) NOT NULL DEFAULT '0',
email char(60) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
UNIQUE KEY user (username)
);
Så kunne du have en tabel til uploadede billeder à la:
CREATE TABLE IF NOT EXISTS pictures (
userid int(10) unsigned NOT NULL DEFAULT '0',
url char(80) NOT NULL DEFAULT '0',
KEY userid (userid)
);
I 'pictures' refererer 'userid' til 'id' i 'users'. På den måde kan den enkelte bruger have flere billeder knyttet til sin profil - og desuden belastes 'users' tabellen ikke, sålænge den skal bruges i situationer uden billeder.
Nedenstående kode vil kunne uploade et billede, knyttet til en bruger-ID, som du har skrevet ud som et skjult felt i formen på baggrund af brugerens login:
<input type="hidden" name="userId" value="123">
Husk at oprette en upload-mappe på serveren og giv den skrive rettigheder. Ret tilsidst de tre første variabler og test dokumentet på serveren:
<?php
// Ret herfra:
$upDir = "images/";
$allowedTypes = array("jpg"=>1, "jpeg"=>1, "gif"=>1, "png"=>1);
$dbInfo = array(
"server" => "localhost",
"user" => "",
"pass" => "",
"defDB" => "test"
);
// Ret hertil
function uploadImage() {
global $upDir, $allowedTypes, $dbInfo;
if (is_uploaded_file($_FILES["upFile"]["tmp_name"])) {
$ext = strtolower( pathinfo($_FILES["upFile"]["name"], PATHINFO_EXTENSION) );
if ($allowedTypes[$ext]) {
if ( move_uploaded_file($_FILES["upFile"]["tmp_name"], $upDir.basename($_FILES["upFile"]["name"])) ) {
$mysqli = new mysqli($dbInfo["server"], $dbInfo["user"], $dbInfo["pass"], $dbInfo["defDB"]);
if ($stmt = $mysqli->prepare("INSERT INTO pictures (userid, url) VALUES (?, ?)")) {
$userid = $_POST["userId"];
$fileName = $upDir.basename($_FILES["upFile"]["name"]);
if ($stmt->bind_param("ss", $userid, $fileName)) {
if ($stmt->execute()) return "Filen [".$_FILES["upFile"]["name"]."] blev uploaded.";
else return "Fejl: Kunne ikke indsætte i databasen.";
}
else return "Fejl: Kunne ikke binde parametre ved indsættelse i databasen.";
}
else return "Fejl: Kunne ikke forberede indsættelse i databasen.";
}
else return "Fejl: Kunne ikke kopiere filen.";
}
else return "Fejl: Ulovlig fil-extension.";
}
else return "Fejl: Kunne ikke finde en uploaded fil.";
}
if (isset($_POST["contxt"])) {
switch ($_POST["contxt"]) {
case "upload":
$message = uploadImage();
header("Location: ".$_SERVER["PHP_SELF"]."?msg=".urlencode($message));
exit();
break;
default:
header("Location: ".$_SERVER["PHP_SELF"]."?msg=".urlencode("Ukendt kontekst."));
exit();
}
} else {
$message = $_GET["msg"];
$class = strpos($message, "Fejl:")===false ? "message" : "error";
$message = "<p class='".$class."'>".$_GET["msg"]."</p>";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "
http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Upload Test</title>
<style type="text/css">
html, body {
height: 100%;
margin: 0;
padding: 0;
font: 0.85em verdana, sans-serif;
}
p.message {
font-weight: bold;
}
p.error {
font-weight: bold;
color: red;
}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<?php print $message ?>
<form action="<?php print $_SERVER["PHP_SELF"] ?>" method="post" enctype="multipart/form-data">
<p><input type="hidden" name="contxt" value="upload">
<input type="hidden" name="userId" value="123">
<input type="file" name="upFile"></p>
<p><button type="submit">Upload</button></p>
</form>
</body>
</html>