web技术概论第四周作业

Hw1-1.

> SELECT party.Party_Num,party.Time,party.Place,guest.Guest_Name,guest.Age 
FROM guest,party,guest_party WHERE
party.Party_Num=guest_party.Party_Num  AND
guest_party.Guest_Num=guest.Guest_Num  AND
party.Place='Peking University'

Hw1-2.

> $result = mysql_query($query); 
//Produce the column labels 
while ($next_element = each($row)) {
      $next_element = each($row);
      $next_key = $next_element['key'];
      echo $next_key;
      }

Hw1-3.

  • There are a couple of differences between CGI program and PHP
    program. Firstly, from the server’s point of view, CGI program is
    independent from HTML. It can be written in perl, shell, c and etc.
    Those programs take the input from user and give their output. On the
    other hand, PHP program is embedded into HTML.
  • Secondly, from the browser’s point of view, it is aware of the
    existence of CGI program. Because it has to request to execute
    them. However, PHP is interpreted totally by server so that the
    browser doesn’t have to know about PHP. The browser feels that
    they are just the same as pure HTML.
  • Thirdly, PHP is more flexible than CGI. Because PHP can easily
    handle the elements in html and can embedded in any part of HTML.

Hw2.

  • 因为之前就接触过PHP,所以搭建服务器的过程中没有遇到什么问题。

Hw3.

  • 这里要求我们改写上一次作业,通过PHP+MySQL来实现。我还是延续了上一次的框架,把submit,query,delete分成三个php文件。这样整个结构就和上一次作业完全一样,也更具对比性。切身体会是,使用了MySQL之后PHP需要做的内容简化了很多。因为SQL本质上就是提供了文件管理的抽象层。不像上次的CGI程序,需要自己管理文件格式、文件序号,使用了SQL只需要调用INSERT,ADD,DELETE就能解决。这里还涉及到几个有趣的点:
  • 1.这次的课件中把非法字符提出来讨论了。这是一个之前未曾注意的地方。输入的非法字符可能导致HTML不能渲染,或者导致MySQL不能执行。这里重点解决了这两者。使用addslash可以把输入的非法字符转义,而htmlchar则可以把非法的HTML字符转为合法再输出。例如:o’s 或者\<\?之类的输入如今都可以处理了。
  • 2.重点调研了数据库语句中Key的含义。发现这是管理数据库的一个非常重要的地方。重点了解了Primary Key, Unique Key, Index等等的区别。
  • 3.实际书写PHP代码时一直被他的数组长度搞晕。老师的代码中也有只输出前一半数组的例子。原来PHP对待Hash数组的办法是,前一半用数字标志,后一半用字符标志;如果没有字符就简单的只有前半部分。虽然用起来挺方便,但这样多功能真的好吗。。。感觉还是hash数组单独设个结构才合理啊。

Hw4-optinal.

  • 作业四其实就是进一步完善样例的SQL表格,只是多了两个表,本质上没有什么区别。然而,我输入grant命令,发现我们原来只有权限操作一张表格。我就按照一张表格写了很多代码。总算能勉强运行,相关文件放在了主页的第四题下面了。不过目前mysql的格式改成了第三题的,没有第四题的表格。这里也有一些值得讨论的内容。
  • 1.一张表管理三张表格的内容,首先是必须有单独的table_index标志三者的类别。但还有另一个重要的问题,那就是三张表格的主键如今都不能作为主键了,因为并不是每张表格都有Guest_ID之类的域。所以Primary Key必须改为Unique Key。这一降级会导致其他问题,比如Unique Key不要求非空之类。所幸这里的Unique Key是我们自行管理的,不会产生问题。
  • 2.改成了Unique Key之后,我们其实是通过table_index和某个Unique Key来定位一条记录的。那么添加记录的时候就必须先数数上面index_table一样的记录有多少。这一步query其实非常费时,如果记录多了根本不可取。
  • 3.失去了递增的Primary Key我们对信息的检索慢了很多,为了弥补,可以加上对index_table的索引,使得查询时加速不少。
  • 4.题外话:其实相比上面所说的查询有多少条记录,感觉插入数据的速度其实更慢。网上说,每次执行MySQL的时候就会启动一个新事务,执行插入后再关闭。一种更好的办法是,多条语句一起插入值,减小耗费。
  • 5.最后反思了一下为什么把三章表格放在一起会凭空多处这么多事情orz。根本而言,是我们这种做法破坏了分层,php部分本身不应该去管自己的信息怎么存储的,直接告诉SQL想存什么就可以了,但现在则不行。所以php还需要另外管理序号等等。所以,如果不是老师权限的设置,最好还是不要这样做。

你可能感兴趣的:(web技术概论第四周作业)