您的位置:首页 > 编程语言 > PHP开发

php基础学习总结(1)

2014-11-09 02:09 447 查看
这一节,和各位分享一下一些楼主初学遇到的奇葩错误,也许能帮到你。

写出来也好,正好时刻提醒自己防止错误再犯。

我假定你是看视频(PHP00,张恩民,韩顺平)起步,那么按照视频顺序,应该逐步接触这些。

(2).我们都希望代码一把过,但是往往都是fatal error,warning,甚至有时候parse error ,一大堆,反正楼主以前看到这些单词都会吓尿了。所以,我们承认错误无可避免总会有的。那么我们需要去策略排查错误:

首先,我给出易错点:

基本语法错误:分号忘写,错写成中文分号,标点符号用了中文的(单引或双引或逗号),变量命名忘了$,括号不匹配,。。。。。。(奇葩一堆,自己慢慢积累错误吧)错多了自己注意总结哪里容易写错,写成文档,自己不再犯错就行。相信我,错多了就好了,我是这么过来的。
编码出问题(乱码):分页面乱码和数据库存储数据乱码。见(3)

sql语句出错:见(4).(5)
经常有undefine valiable(未定义变量报错),除了确实我们没有定义这个变量外(或者我们手残,把变量写错了。比如:$name写成$nmae,这个应该只有剁手能解决了。。。)但还有问题并不是这样,见(6)

接下来,我们需要确定到底是那一块出问题:

用到var_dump, echo , print_r去一个个板块试错。

比如:

(3).编码:(包括编辑器页面编码,数据库编码,数据表单编码,html页面编码,和php页面编码,执行数据的提交与获取,和浏览器页面编码)

关于编辑器编码(如果你用notepad),注意写html或者PHP都应该编辑前设置好编码(最后用utf8,通用)

关于数据库编码,在建数据库时候一定要选好字符集(选utf8-bin),否则很有可能后面数据乱码。很蛋疼的问题。。。
关于数据表单,自己不需要改,如果你在建数据库时已经选好字符集,否则,你需要修改数据表去保持所有页面一致编码(utf8)
关于html页面编码,注意在写html(比如用于提交数据或者展示内容的页面)之前,一定要在<meta/>标签中修改字符集为(utf8),否则经常会莫名页面乱码。
关于php页面编码控制:使用<header>表头,简单说就是这样:
执行数据交互,比如往数据库放数据,从数据库拉取数据,都是必须保证每个页面都执行了这句: mysql_query("set names 'utf8'");

其实你可以写一个单独php页面,在里面写上所有php页面公用部分(比如这句话),之后include,就可以一劳永逸了。

不要轻易省略或是写错这句,等你后来学sql语句,发现这是你提交数据接受数据,在页面保持编码一致的重要保障。

浏览器,像ie你就直接右键调好,火狐略麻烦,但是你一般页面代码都正确处理好编码问题,是不会在浏览器上出现问题的。出问题再调吧。

(4).数据库sql语句的错误:

注意基本四个写法:多用吧,多多在数据库上操练,在本地写一个提交数据到数据库的php文件,之后在百度上搜大量sql例子,自己在本地慢慢写,提交到数据库。
注意单引号和双引号:这一点,初学时楼主深受其害:比如常见这么几个错误:

这是标准的语句:
$sql = "insert into lyb
(id, user, title, content, lastdate)
values
('', '$_POST[user]', '$_POST[title]', '$_POST[content]', now())" ;


但我们可能会犯三个错误:

(id, user, title, content, lastdate)字段这里自作主张加引号(单引双引都会有人干得出来),其实字段是不允许加引号的。。。

('', '$_POST[user]', '$_POST[title]', '$_POST[content]', now())<pre name="code" class="php">原本我们是要把 $_POST[title]这个值给title,但是经常会用初学者把$_POST[title]的引号弄丢或者写成“”双引。最后系统都会报错。



<pre name="code" class="php">记住,这里只能用单引,还必须每个字段都加单引,不能省(当你字段是数字,可能你省了单引或许在数据库插入没问题,但如果是中文,嘿嘿。。。你会疯的,所以必带单引号)



SQL语句必须写引号,包括变量的赋值,这是基本的语法,(但有时候初学者会忽略)比如这样:$sql = " ..... ", $name = "章浩";
sql语句还会有很多问题,比如写错了语句结构,漏写了字段(我们页面插入数据库的字段和数据库表的字段不匹配),那么这种问题在初学sql经常会出现。那么我们如果真的写错了,应该怎样去找出错误呢(当你确定只是sql的问题,其他没错误或者不影响sql排错),那么接下来就该说一下,怎么找SQL语句的错误了。

(5).当sql语句出问题,我们又不好看出来哪里出问题了。首先,我们在出错页面使用var_dump弄出我们的sql语句执行情况:比如这句:

之后,把这句sql弄到数据库,在数据表的sql里面copy一下,看运行正常否。如果不是,从结构和拼写上去查找错误。

(6).在学超全局数组post,get,cookie,seession,凡是涉及到数据的接受,养成习惯,未知数据是否存在,应该用isset或者empty去检测是否为空,例如这样:

<?php
if (isset($_POST['submiting']))
{
$writer = $_POST['writer'] ;
$title = $_POST['title'] ;
$content = $_POST['content'] ;
}
?>

如果你不这样做,就会发现一旦某些变量因为某些原因没有正常赋值,你会得到一大批的 undefine valiable(未定义的变量)。所以为了安全性和程序严谨,我们都要先判断变量非空,再去使用它。对于做一些注册系统啊,做什么函数啊,也应该是这样的思路。先对变量做下检测,符合条件再去使用它。

(7).在学习php基础的时候,养成即使可以用常量(特别是那些可能会改动的字段)使用变量(也不是绝对,看情况定)。比如这里,在连接数据库的conn.php文件里,“主机名”,“用户名”, ”密码“ ,都是显然在不同服务器上,对于不同管理员需要改动的字段,我们应该做成变量名,然后让用户去选择填写(即使我们可能只是在自己笔记本主机上使用。。。)

如果这样写,修改三个字段很麻烦。不好。

<?php
<?php
$conn = @ mysql_connect('localhost', 'root','') or die("there is a error");
mysql_select_db("news", $conn);
mysql_query("set names 'utf8'");
?>

?>


这样就好多了,要改别人就很容易知道怎么做了,写个开发文档也可以很清楚告诉别人改哪几个变量了。
<?php
$host ="localhost" ;                       //根据实际情况填写,这是主机名
$name ="root" ;                            //根据实际情况填写,这是用户名
$pass = "" ;                               //根据实际情况填写,这是密码
$conn = @mysql_connect("$host", "$name", "$pass") or die("连接服务器出错") ;
$sele = @mysql_select_db("vote_db") or die("数据库出错");
mysql_query("set names 'utf8'") ;
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: