我尝试设置一个表单,允许用户将图像上传到服务器上的文件夹,并将标签上传到数据库,以便可以在标签中搜索图像,任何选定的图像都会显示标签列表连接到它。 即时尝试使用图像而不是文本来执行类似于stackoverflow的标记系统。 这就是我到目前为止所做的:
<form action="insert.php" method="post">
<p>
<label for="file">Filename:</label>
<input type="file" name="imageName" id="imageName">
<br />
<label for="tags">Tags</label>
<textarea name="tags" id="tags" cols="45" rows="5"></textarea>
<input type="hidden" name="member" id="member" />
<br />
<input type="submit">
</p>
</form>
那是表格,这是php
<?php
$con = mysql_connect("localhost");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("images", $con);
$sql="INSERT INTO images (imageName, tags, member)
VALUES
('$_POST[imageName]','$_POST[tags]','$_POST[member]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 200000000000000000000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
答案 0 :(得分:0)
你可以通过不同的方式来做到这一点:
使用简单HTML下拉列表(选项允许多项选择)
<select multiple="multiple" name="Select1" style="width: 129px">
<!-- start loop here-->
<option value="tag1">tag1</option>
<!-- end loop here-->
</select>
在这里,您需要从数据库加载所有标记。
答案 1 :(得分:0)
在您的HTML中:
<input type="hidden" name="member" id="member" />
,您尚未放置value
属性,该属性将包含上传图片/标签的成员的姓名。
所以改成它:
<input type="hidden" name="member" id="member" value="YOUR_MEMBER_NAME_HERE" />
此外,在PHP中,$_POST[imageName]
将不包含上传图像的名称。在PHP中有单独的超全局数组 - $_FILES
。
因此,图片名称将位于$_FILES['imageName']['name']
。
此外,您只是将图像名称放在数据库中,而不是将图像存储在任何地方。
以下是存储图像的代码。
$folder = 'NAME_OF_THE_FOLDER_WHERE_YOU_WANT_TO_SAVE_IMAGES';
if( is_uploaded_file( $_FILES['imageName']['tmp_name'] ) ) {
move_uploaded_file( $_FILES['imageName']['tmp_name'], "$folder/" . $_FILES['imageName']['name'] );
}
就上传图像时向用户显示已有的标签而言,您可以通过检查用户输入的标签是否已存在于数据库中来判断是否存在,如果是,则显示它们...并避免反复将它们插入数据库。
这是一个开始,你可以改进它。
希望它有所帮助。