首頁 php教程 php手册 用PHP和MySQL构建一个数据库驱动的网站(五)

用PHP和MySQL构建一个数据库驱动的网站(五)

Jun 21, 2016 am 09:10 AM
gt lt nbsp php quot

mysql|数据|数据库

 虽然看上去一切都好了,但是我们仍没有达到我们真正地与用户交互的目的,我们的用户应该能够输入任意的信息,并将它交给PHP来处理。接着我们的个性化欢迎页面的例子,我们想要让我们的用户任意地输入他(或她)的名字并将其显示到信息中,要让用户输入数据,我们需要用到HTML的表单。

这儿是表单的代码:



First Name:

Last Name:





  除了在这里你可以任意输入你的名字以外,这个表单所起的效果和我们上面的第二个连接(在查询字符串中使用firstname=Kevin&lastname=Yank)完全一样。当你按提交按钮(标志为“GO”)时,浏览器会装载welcome.php并自动为你在查询字符串中添加变量和它们的值。变量名就是在INPUT TYPE=TEXT标识中的NAME属性,变量值就是用户输入的相应的内容。

  INPUT TYPE=TEXT标识中的METHOD属性是用来告诉浏览器如何在请求中发送变量名及变量值的。GET(就是我们在上面使用的)表示在查询字符串中传递变量,但是还有另外一种选择。将变量显示在查询字符串中并不总是令我们满意的--甚至有的时候在技术上就是不可行的。如果在你的表单中包含了一个TEXTAREA标识用来让用户输入大量的文本,这部分文本也显示在查询字符串中实在是太长了,而且会超过浏览器所能支持的URL的最大长度。另外一种方法可以允许浏览器隐藏地传递信息。这种方法的代码和我们上面看到的表单的代码几乎一样,只是我们将表单的方法从GET变成了POST:



First Name:

Last Name:





  这个表单和我们之前的那个在功能上完全一样。唯一的不同是当用户在按“GO”按钮时所装载页面的URL将没有一个查询字符串。一方面,这可以让你通过表单提交大量的数据或者是敏感的数据(例如密码),而不在一个查询字符串中显示出来。另一方面,如果用户将提交表单生成的结果页添加到收藏夹,这个收藏夹是没有用的,因为它不包含提交的数据。另外,附带说一下,象AltaVista这样的搜索引擎总是利用查询字符串来提交查询条件,其主要原因就是为了便于用户将查询结果页添加到收藏夹中,以便在将来进行同样的搜索,因为搜索条件是包含在URL之中的。

  这儿讲了利用表单来实现用户与PHP的交互的基本的原理。在以后的例子中,我们将讨论一些更高级的问题和技术。

控制语句

  在我们之前看到的PHP的代码的例子中,要么是只有一个单独的向Web页面输出文本语句;要么是一系列的依次执行的语句。如果你用其他语言编写过程序,你应该知道,实际上很少有这么简单的程序。

  和任何其他的编程语言一样,PHP也提供了很方便地处理脚本中的“控制流”的方法。就是说,PHP中包含了一些特殊的语句,通过这些语句你可是不受依次执行的顺序的束缚。这种语句被称之为“控制语句”。不理解?不要担心!有一些例子会很好地帮助你。

   最基本最常用到的控制语句是if-else语句。它的结构是这样的:


if ( ) {
  //如果是真,将执行的语句。
} else {
  //(可选)如果是假,将执行的语句。
}
    这个控制语可以让我们告诉PHP根据一些条件的真假来决定相应地执行哪一组语句。如果你不觉得我这么做有点空虚,我们可以将我们刚才建立的welcome.php文件修改为:
if ( $name == "Kevin" ) {
  echo( "Welcome, oh glorious leader!" );
} else {
  echo( "Welcome, $name!" );
}



  现在,如果传递给这个页面的name变量的值是Kevin,将显示一个特殊的信息。否则,将显示一个包含输入的name的普通的信息。

  需要指出的是,在这个结构中,“else子句”(它指出了if-else结构中条件为假时执行的内容)是可选的。对于上面的例子,如果我们的目的是当适当的名字被输入时,显示特殊的信息,否则就什么也不显示。这段代码应该是这样的:


if ( $name == "Kevin" ) {
  echo( "Welcome, oh glorious leader!" );
}



  在上面条件中所使用的==是用比较两个值是否相等的运算符。要特别记住的是在这儿你需要输入两个等号。如果你输入的是一个等号,你实际上使用的是前面我们讨论过的赋值运算符,你将不再是对两个变量的值进行比较,而是给变量赋了一个新值(这个操作会附带地返回一个true)。这样做的结果不仅仅是导致这个条件永远是true,它还可能改变我们所要检查的变量的值,这可能会导致很多问题。

  防止发生这种错误有一种安全的做法,那就是象下面这样颠倒用来比较的变量和常量的位置:

if ( "Kevin" == $name ) {


  这样做的效果是完全相同的,但是当你忘了第二个等号时,我们来看看会发生什么情况。PHP会试图将变量($name)的值插入常量("Kevin")中。因为你不能改变常量的值,PHP会中断并提示一个错误信息,这将立即提示你忘了第二个等于号!

  条件可以比单个的比较是否相等来得更复杂。回忆我们修改的welcome.php3,它是可以同时获取firstname和lastname的。如果我们想要为某个特定的人显示一个特殊的信息,我们可以同时比较这两个变量:


if ( "Kevin" == $firstname and "Yank" == $lastname ) {
  echo( "Welcome, oh glorious leader!" );
}



  只有$firstname的值是Kevin,而且$lastname的值是Yank时这个条件才会返回真。and的意义就是只有两个比较都为真时,整个条件才会返回真。还有一个符号是or,这使得两个比较中至少有一个为真时,整个条件就返回真。如果你对JavaScript和C中的运算符(&&(and)和||(or))熟悉的话,你也可以在PHP中同样地使用它们。

  在下面我们将看到一些更复杂的比较。现在,我们只需要对if-else语句有个基本的理解就可以了。

  另一个常用的PHP控制语句是while循环。if-else语句使我们可以根据条件选择是否执行一组语句,while循环使我们可以根据条件来决定重复执行一组语句多少次。while循环的基本格式应该是这样的:


while ( ) {
  //只要是真时反复执行的语句
}



  这和一个没有else子句的if-else 语句非常相象。不同点在于当条件为真时语句执行完后,将不再是接着执行结束符(})后面的语句,而是再次检查条件。如果这个条件仍为真。将会重复执行语句,直到条件不再为真时为止。当这个条件首次返回假时(不管是第几次检查它),将会跳转执行循环后面的语句(在结束符后面)。

  这样的循环可以用来处理一个事物的较长的列表(例如存储在数据库中的笑话),下面我们举了一个简单的例子:计数到10。


$count = 1;
while ($count   echo( "$count " );
  $count++;
}



  我知道这段语句可能看上去挺恐怖,但是我们可以一行行地来看它。第一行定义了一个叫$count的变量并将其赋值为1。第二行是while循环的开始,条件是$count小于或等于(
  现在我们可以看看这段程序是如何执行的了。当第一次检查条件时,$count的值是1,所以条件为真。$count的值(1)被输出,接着$count被赋予了一个新值2。当第二次检查条件时条件仍为真,所以2 被输出,并赋了一个新值3 。这个过程被继续下去,输出了3 ,4 ,5 ,6 ,7 ,8 ,9 直到10 。最后,$count被赋予值11,条件为假,循环结束。最终的结果是输出了这样一个字符串“1 2 3 4 5 6 7 8 9 10”。

  在这个例子的条件中我们使用了一个新的运算符:=(大于或等于),(大于)和!=(不等于)。最后一个也可以使用于字符串比较中。

多用途的页面

  如果你想在你建立的网站的每一个网页的顶端都显示访问者的姓名。使用我们前面的自动显示欢迎信息的例子,我们已经基本上成功了一半。现在我们只要对我们示例解决这几个问题就行了:

  我们需要在站点的每一个页面都显示,而不是仅仅在一个页面上。

  我们无法控制在我们的站点上那一个页面会首先显示。

  第一个问题的解决不是太困难的。当我们在一个页面上获得了用户名这个变量后,我们可以在任何请求中通过将其添加到一个查询字符串来传递这个变量:

A link


  请注意我们在HTML标识符的中间嵌入了PHP的代码。实际上这是非常常用的。我们已经对echo这个函数很熟悉,但是我们还不熟悉urlencode函数。这个函数的功能是将字符串中一些特殊的字符(例如空格)转换成特定的编码,以使它们能够在查询字符串中显示。例如,如果$name变量的值是"Kevin Yank",其中的空格在查询字符串中不允许存在,urlencode的输出将是Kevin+Yank,在newpage.php中建立$name时,值将会被自动转换回来。

  Ok,现在已经可以将用户名传递给我们站点的第一个连接了。现在我们所需要的就是在其第一次出现时,要能获得它的值。在我们上面的例子中,我们已经做了一个HTML页面用来处理获得用户名的表单。而问题是我们不能强迫用户在每一次访问我们的站点时都从这个页面开始。

  解决方案是在我们站点的每一个页面都检查是否指定了一个用户名,如果需要,应该提求用户输入用户名。这意味着我们站点上的每一个页面都必须能显示用户名,在未指定用户名时,应提示用户输入。如果你现在就想到了使用if-else语句,那证明你的学习能力真的不错!

  我们的“多功能页面”应该根据不同的条件显示完全不同的内容,这个页面的源程序将会是这样的:




Multi-Purpose Page Outline


) { ?>









  这段程序初看上去很混乱,但是事实上这仍然是普通的if-else语句,只不过在其中插入了HTML代码,而不是我们之前使用的PHP语句。这个例子说明了PHP的一个很大的优点:你可以自由地选择在什么时候进行或退出“PHP模式”。你可以将看成是返回到“普通的HTML模式”的命令。这样上面的例子就变得很容易理解了。

  if-else语句还有另外的一种格式,使用这种格式将使你的程序更易读懂。如果使用这种格式,我们的“多功能页面”的源程序将是这样的:




Multi-Purpose Page Outline


): ?>









  Ok,现在我们已经有了所有我们需要的工具,让我们看看我们的站点中的一个样页:




Sample Page



  

Your name:


  

This paragraph contains a
link that passes the
name variable on to the next document.



  
  
METHOD=GET>
  Please enter your name:
  
  







  在上面的程序中出现了两个新的东西,但是理解它们应该不是太困难的。首先,我们在条件中使用了一个新的函数:isset。当变量已经被赋值(在我们这里也就是指提供了用户名),该函数将返回(输出)一个逻辑真;当变量没有被赋值(在我们这里也就是指没有提供用户名),该函数将返回(输出)一个逻辑假。第二个新东西是在指定FORM标志中的ACTION属性中使用了$PHP_SELF变量。这个变量是自动产生的系统变量之一。具体地说,$PHP_SELF总是被设置成当前页面的URL。当一个表单在提交时指向同一个页面时,这给我们提供一个简单的做法。只不过这时的 $name变量已经被赋值了。

  将这一段加到你的网站上的所有网页上后,不管访问者第一次访问的是什么网页,都会被提示输入用户名。只有在输入了用户名并按了“GO”,才能到达他们真正想要访问的网页。输入的用户名会被通过每个连接中的查询字符串传递到之后的各个页面,这样就可以确保只要求访问者输入一次用户名。

结语

  在这一章内,我们介绍了PHP的所有的基本语法:语句、变量、运算符以及控制语句。我们的例子是非常的简单。但是事实上PHP的强大功能在于它内置的数百个函数,利用这些函数你可以访问MySQL数据库中的数据来发送邮件,可以通过动态产生的图象来建立PDF文件,你还可以做其他的很多事情。

  在第四章,我们将探讨如果利用MySQL在Web上发布我们在上一章中建立的笑话数据库!



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

See all articles