Chinaunix

标题: [html]关于表单的问题,请教高手 [打印本页]

作者: yhp050    时间: 2005-11-28 10:50
标题: [html]关于表单的问题,请教高手
我写了下面的代码:
<form action="upload.php" method="post">
  <input type="text" name="dbname">
  <input type="text" name="scname">
  <input type="file" name="address">

  <input type="submit" name="upload" value="上传">
  <input type="reset" name="rewrite" value="重置">
</form>

想在upload.php里用move_uploaded_file把file文件传到服务器上去,并同时把两个text的值传到upload.php里,但是move_uploaded_file函数要求在form属性里添加enctype="multipart/form-data",而添加了这项之后,两个text的值就传不过去了,请教这是怎么回事儿啊?该怎么解决呢?
作者: HonestQiao    时间: 2005-11-28 10:55
原帖由 yhp050 于 2005-11-28 10:50 发表
我写了下面的代码:
<form action="upload.php" method="post">
  <input type="text" name="dbname">
  <input type="text" name="s ...



不可能的事情,我这边都是这样子的,都没有遇到过的。

你是什么web服务器啊?
作者: yhp050    时间: 2005-11-28 10:56
apache的web服务器

[ 本帖最后由 yhp050 于 2005-11-28 11:01 编辑 ]
作者: UIRL    时间: 2005-11-28 11:05
给出upload.php中的代码看看,应该是这里面有错误
作者: yhp050    时间: 2005-11-28 11:18
<?
echo $_POST[dbname];
?>
就这一句,但是运行时什么也没有
作者: yhp050    时间: 2005-11-28 11:23
然后我把index.php中form的enctype="multipart/form-data"去掉,就能显示,真是奇怪
作者: hitty    时间: 2005-11-28 11:40
这是微软的表单安全保护措施,防止某些人企图通过WEB获取本地文件

想给file表单加 value 值这是不可能的
作者: UIRL    时间: 2005-11-28 12:04
我测试可以得到dbname值

我用的apache2.0, php5.0.4

我经常使用PHP上传图片,在表单中同时赋给每张上传的图片一个图片描述。没有遇到楼主所说的问题。

[ 本帖最后由 UIRL 于 2005-11-28 12:05 编辑 ]
作者: hitty    时间: 2005-11-28 13:19


[ 本帖最后由 hitty 于 2005-11-28 16:57 编辑 ]
作者: yhp050    时间: 2005-11-28 14:35
高手指点啊
作者: dataclose1    时间: 2005-11-28 16:26

  1. <form enctype="multipart/form-data" action="__URL__" method="POST">
  2.     <!-- MAX_FILE_SIZE must precede the file input field -->
  3.     <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
  4.     <!-- Name of input element determines name in $_FILES array -->
  5.     Send this file: <input name="userfile" type="file" />
  6.     <input type="submit" value="Send File" />
  7. </form>

复制代码



$_FILES['userfile']['name']
客户端机器文件的原名称。

$_FILES['userfile']['type']
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。

$_FILES['userfile']['size']
已上传文件的大小,单位为字节。

$_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。

$_FILES['userfile']['error']
和该文件上传相关的错误代码





  1. $uploaddir = '/var/www/uploads/';
  2. $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

  3. echo '<pre>';
  4. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  5.    echo "File is valid, and was successfully uploaded. ";
  6. } else {
  7.    echo "Possible file upload attack! ";
  8. }
复制代码

作者: yhp050    时间: 2005-11-28 16:35
我这样写的代码:
if(move_uploaded_file($_FILES['address']['tmp_name'], "/usr/www/vod/".$_POST[subject]."/".$_FILES["address"]["name"]))
{
echo "<p align='center'>上传文件成功!</p><br>";
}
else
{
echo "<p align='center'>上传文件失败!</p><br>";
结果出现如下错误!

Warning: move_uploaded_file(/usr/www/vod/yingyu/poeme.ape): failed to open stream: Permission denied in /usr/www/media/admin/upload.php on line 61

Warning: move_uploaded_file(): Unable to move '/var/tmp/phpM1eknO' to '/usr/www/vod/yingyu/poeme.ape' in /usr/www/media/admin/upload.php on line 61

但是usr/www/vod/yingyu/目录下明明是有权限的,请问是怎么回事啊?
作者: wobushiwo    时间: 2005-11-28 16:37
lz 把

echo $_POST[dbname];

试改为

echo $_POST["dbname"];

我怀疑你定义 dbname 常量了
作者: dataclose1    时间: 2005-11-28 16:40
原帖由 yhp050 于 2005-11-28 16:35 发表
我这样写的代码:
if(move_uploaded_file($_FILES['address']['tmp_name'], "/usr/www/vod/".$_POST[subject]."/".$_FILES["address"]["name"]))
{
echo "< ...



你先看看你的这个 文件夹~~ 有没有 写的权限~

建议对你要操作的文件夹~ chmod($path,0777);
作者: wobushiwo    时间: 2005-11-28 16:41
试把你的所有目录里设为 755  或 777,调试一下

注意,是所有目录层(因为有一些空间比较奇怪像该死的 51)
作者: yhp050    时间: 2005-11-28 20:41
我把整个目录设成了766,还是不行
作者: wobushiwo    时间: 2005-11-28 21:05
echo $_POST[dbname];

问题解决了没啊?

应该还是目录权限问题,是 777 哦,是所有的目录,要确定是所有的层次哦

不然的话,就试把文件保存在公开访问的根目录(一般都行),调试一下
作者: amer    时间: 2005-11-28 21:24
上传文件不是用$_POST吧

$_FILES试试啊
作者: gaoyikun    时间: 2005-11-29 00:23
原帖由 yhp050 于 2005-11-28 16:35 发表
我这样写的代码:
if(move_uploaded_file($_FILES['address']['tmp_name'], "/usr/www/vod/".$_POST[subject]."/".$_FILES["address"]["name"]))
{
echo "< ...
$_POST[subject]?????这个变量来自哪儿?在你的表单里没有啊。
还有,如果每上传一个文件都要放到$_POST[subject]这个文件夹里的话,显然每次都要新建一个$_POST[subject]文件夹,很简单,加一句mkdir($_POST[subject])就行了,如果$_POST[subject]这个文件夹不存在的话,当然不可能move_uploaded_file($_FILES['address']['tmp_name'], "/usr/www/vod/".$_POST[subject]."/".$_FILES["address"]["name"])成功了
作者: 夜猫子    时间: 2005-11-29 00:37
检查一下php是否打开了安全模式,你的目录的所有人是否和web服务器运行时帐号一致,在安全模式下,会检查你正在操作的文件或者目录是否具有和执行的程序相同的UID
作者: yhp050    时间: 2005-11-29 09:28
呵呵,问题解决了,果然像wobushiwo 所说的,要所有层次的文件夹的权限都是777才行,谢谢,谢谢大家了,




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2