这几天的学习下来.PHP和C/C++有太多的相似之处了.所以简单的入门现在看来已经没有问题了.但是因为选取的是一本快速入门的书籍,难免有些知识点比较粗糙.比如下面两个问题就让我吃了点亏.
1. 表单的文件标签无法获取到文件名.
在书籍里面了解到,表单<form>有三个属性,method, action,name .其中那么标记表单的名字,method表示使用哪种方式提交表达,可选get/post.action指定处理表单的动作.可以指定一个php页面或者干脆就在当前页面处理.这一点实在很神奇并且方便.因为表单只要指定了php的页面,变量什么的都是和php共享的.
表单下面可选的标签有input select option textarea , 其中option是select的一个子标签.
而input又可以拓展成很多类别的标签,通过input的type属性指定.目前我接触到的主要有text password file submit reset image . 从左到右,依次是文本,密码,文件,提交,重置,图片. 这里图片的意思不是用来展示的,而是用来替换submit使用的.而file属性即提供一个供用户上传文件的渠道.书中给出的例子,我对照着敲了一下,也试着获取了一下文件信息,但是总是失败,返回的一直是空.书中完全没有给出任何解释.源码如下:
<html> <head> <title> 注册您的个人信息 </title> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <h1> 请输入您的个人信息 </h1> <form name=regist method=post action="php/regist.php" > 姓名: <input type=text name=username maxlength=20 size=20 value=请输入用户名 /> <br> 学号: <input type=text name=id maxlength=20 size=20/><br> 邮箱: <input type=text name=mail maxlength=20 size=20/><br> 密码: <input type=password name=password maxlength=40 size=20/><br> 确认密码: <input type=password name=conform maxlength=40 size=20/><br> 头像: <input type=file name=pic /><br> <input type="image" name="image1" src="pic222094.jpg" alt="submit" width=60 height=60 /><br> <input type=reset value=重置> </form> </body> </html>通过搜集资料,发现很多同学也遇到了相同的问题.可能和我看的是一样的书吧.不过总算是经过一番努力以后找到了原因,原来是因为默认情况下,html仅仅支持text/html格式的文件传输.而表单需要多格式支持.所以解决办法就是.在form中添加属性 enctype="multipart/form-data" . ok问题解决.
我的regist.php的内容如下:
<?php header("Content-Type:text/html;charset=utf-8"); echo "user info is as follow: <br>"; echo "name is ".$_POST[username]."<br>"; echo "number is ".$_POST[id]."<br>"; echo "mail is ".$_POST[mail]."<br>"; echo "password is ".$_POST[password]."<br>"; print_r($_FILES); ?>上传一个文件,测试一下:
输入界面如下,我写入一些信息,因为是字符界面,所以头像部分是我手写进去的.
输出界面如下.可以看到文件是有信息的.其中name表示在客户端的文件名,type表示文件类型.tmp_name表示在服务器端的临时文件名
2. 表单的图像标签不显示图像.
这个问题在大学的时候也遇到过,当时解决了.但是转眼这么多年过去了.哪里还记得住啊.不过运气号,试了几下就又想起解决办法了.
最初我指定的路径是我其它的目录.所以图片无法显示,后来我把图片放在了apache工作的根目录,即/var/www/html目录下,就可以正常显示了.想想也是,如果哪里的文件都能显示,apache何必还要我们配置工作ROOT_DIRECTORY呢.
3. php乱码问题
我们知道在html页面中,编码问题是通过meta标签指定http-equiv的方式来指定的.但是跳转到php页面以后,这个标签失效了.php又成了乱码.怎么办,想必是一定有现成的函数可以使用的.所以就网上查了一下,果然.
在PHP文件的开头处加入 header("Content-Type="text/html;charset=utf-8");问题解决.
ok.这就是这几天学习PHP遇到的一些的问题.总结一下,尤其是第一个问题,查了很久才找到一个合理的解释.接下来的几天我会继续加深理解,争取本周能够写出一个小东西.