php学习笔记

简介

1.PHP文件能够包含文本、HTML、CSS 以及 PHP 代码

2.PHP 脚本可放置于文档中的任何位置。<?php开头,以 ?>结尾

3.只有变量对大小写敏感,变量以 $ 符号开头,变量会在首次为其赋值时被创建

变量

PHP 有三种不同的变量作用域:

  • local(局部)
  • global(全局)
  • static(静态)

函数之外声明的变量拥有global作用域,只能在函数以外进行访问

函数内部声明的变量拥有local作用域,只能在函数内部进行访问

global 关键词用于访问函数内的全局变量

<?php
$x=5;
$y=10;

function myTest() {
  global $x,$y;
  $y=$x+$y;
}

myTest();
echo $y; // 输出 15
?>

也可以这样写

<?php
$x=5;
$y=10;

function myTest() {
  $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 

myTest();
echo $y; // 输出 15
 ?>

static 关键词用于定义静态变量

 
<?php

function myTest() {
  static $x=0;
  echo $x;
  $x++;
}

myTest();
myTest();
myTest();

?>

两种输出方法

echo 和 print 之间的差异:

  • echo - 能够输出一个以上的字符串,无返回值
  • print - 只能输出一个字符串,并始终返回 1

echo

能输出多个字符串

echo "This", " string", " was", " made", " with multiple parameters.";

能输出html标记

echo "<h2>PHP is fun!</h2>";
echo "Hello world!<br>";
echo "I'm about to learn PHP!<br>";

能输出变量

<?php
$txt1="Learn PHP";
$txt2="W3School.com.cn";
$cars=array("Volvo","BMW","SAAB");

echo $txt1;
echo "Study PHP at $txt2";
echo "My car is a {$cars[0]}";
?>

print与echo比较仅在于只能输出一个字符串


数据类型

字符串、整数、浮点数、逻辑、数组、对象、NULL

数组

定义
$cars=array("Volvo","BMW","SAAB")
调用
echo "My car is a {$cars[0]}";

对象

class Car
{
  var $color;
  function Car($color="green") {
    $this->color = $color;
  }
  function what_color() {
    return $this->color;
  }
}

字符串相关函数

常量

define("GREETING", "Welcome to W3School.com.cn!");可选的第三个参数规定常量名是否对大小写不敏感。默认是 false

函数

function functionName(参数1,参数2...) {
  被执行的代码;
}


超全局变量

:在一个脚本的全部作用域中都可用

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
<?php 
$x = 75; 
$y = 25;
 
function addition() { 
  $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}
 
addition(); 
echo $z; 
?>

$_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息
<?php 
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
元素/代码描述
$_SERVER['PHP_SELF']返回当前执行脚本的文件名。
$_SERVER['GATEWAY_INTERFACE']返回服务器使用的 CGI 规范的版本。
$_SERVER['SERVER_ADDR']返回当前运行脚本所在的服务器的 IP 地址。
$_SERVER['SERVER_NAME']返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。
$_SERVER['SERVER_SOFTWARE']返回服务器标识字符串(比如 Apache/2.2.24)。
$_SERVER['SERVER_PROTOCOL']返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。
$_SERVER['REQUEST_METHOD']返回访问页面使用的请求方法(例如 POST)。
$_SERVER['REQUEST_TIME']返回请求开始时的时间戳(例如 1577687494)。
$_SERVER['QUERY_STRING']返回查询字符串,如果是通过查询字符串访问此页面。
$_SERVER['HTTP_ACCEPT']返回来自当前请求的请求头。
$_SERVER['HTTP_ACCEPT_CHARSET']返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST']返回来自当前请求的 Host 头。
$_SERVER['HTTP_REFERER']返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。
$_SERVER['HTTPS']是否通过安全 HTTP 协议查询脚本。
$_SERVER['REMOTE_ADDR']返回浏览当前页面的用户的 IP 地址。
$_SERVER['REMOTE_HOST']返回浏览当前页面的用户的主机名。
$_SERVER['REMOTE_PORT']返回用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER['SCRIPT_FILENAME']返回当前执行脚本的绝对路径。
$_SERVER['SERVER_ADMIN']该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。
$_SERVER['SERVER_PORT']Web 服务器使用的端口。默认值为 “80”。
$_SERVER['SERVER_SIGNATURE']返回服务器版本和虚拟主机名。
$_SERVER['PATH_TRANSLATED']当前脚本所在文件系统(非文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME']返回当前脚本的路径。
$_SERVER['SCRIPT_URI']返回当前页面的 URI。

$_REQUEST 用于收集 HTML 表单提交的数据
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>

</body>
</html>

表单常用:$_POST 广泛用于收集提交 method="post" 的 HTML 表单后的表单数据。$_POST 也常用于传递变量
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_POST['fname']; 
echo $name; 
?>

</body>
</html>

表单常用:$_GET 也可用于收集提交 HTML 表单 (method="get") 之后的表单数据
<html>
<body>

<a href="test_get.php?subject=PHP&web=W3school.com.cn">测试 $GET</a>

</body>
</html>
当用户点击链接 "Test $GET",参数 "subject" 和 "web" 被发送到 "test_get.php",然后您就能够通过 $_GET 在 "test_get.php" 中访问这些值了。
下面的例子是 "test_get.php" 中的代码:
<html>
<body>

<?php 
echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
?>

</body>
</html>


表单

【表单处理】

1.用http post方法发送

2.用http get方法发送

GET vs. POST

GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, ...))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。

GET 和 POST 被视作 $_GET 和 $_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,您能够从任何函数、类或文件访问它们。

$_GET 是通过 URL 参数传递到当前脚本的变量数组。

$_POST 是通过 HTTP POST 传递到当前脚本的变量数组。

何时使用 GET?

通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大于 2000 个字符。不过,由于变量显示在 URL 中,把页面添加到书签中也更为方便。

GET 可用于发送非敏感的数据。

注释:绝不能使用 GET 来发送密码或其他敏感信息!

何时使用 POST?

通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制

此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。

不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。

提示:开发者偏爱 POST 来发送表单数据。

【表单验证】

需掌握:$_SERVER["PHP_SELF"]|$_SERVER["REQUEST_METHOD"]|trim()函数/stripslashes()函数/htmlspecialchars()函数

|

【表单必填】

先定义错误变量并初始为空$nameErr = $emailErr...="";

ifelse当empty()函数为真时为错误变量赋值

<span>块


【表单验证 - 验证名字email和url】

需掌握preg_match()函数

preg_match() 函数检索字符串的模式,如果模式存在则返回 true,否则返回 false。



高级篇

多维数组

定义
$cars = array
  (
  array("Volvo",22,18),
  array("BMW",15,13),
  array("Saab",5,2),
  array("Land Rover",17,15)
  );

输出
<?php
for ($row = 0; $row < 4; $row++) {
  echo "<p><b>Row number $row</b></p>";
  echo "<ul>";
  for ($col = 0; $col < 3; $col++) {
    echo "<li>".$cars[$row][$col]."</li>";
  }
  echo "</ul>";
}
?>

include和require的区别

如果用 include 语句引用某个文件并且 PHP 无法找到它,脚本会继续执行;如果使用 require 语句完成相同的案例,echo 语句不会继续执行,因为在 require 语句返回严重错误之后脚本就会终止执行。

include 'noFileExists.php';
echo "我有一辆 $color $car。";

require 'noFileExists.php';
echo “我有一辆 $color $car。”;

Filesystem文件函数

Filter过滤器函数

文件操作

打开/读取

readfile()函数读取文件,并把它写入输出缓冲

$myfile=fopen(filename,mode)or die(Unable to open file!);打开失败会生成一条消息

fclose($myfile);关闭文件

fread($myfile,filesize(filename));按最大字节数读取文件

fgets($myfile)函数读取文件单行内容,调用完成后,指针会移动到下一行

feof()检查是否已达到"end-of-file"(EOF)

fgetc()读取单个字符,调用完成后,指针会移动到下一字符


创建/写入

fopen()函数也用于创建文件

fwrite(aimfile,tmpfile)用于把tmpfile中的内容写入aimfile中

上传

test.html文件如下

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型

<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理

保存被上传的文件。upload.php文件如下

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

这个例子把文件保存到了名为 "upload" 的新文件夹


COOKIES

cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。


one.设置cookie。语法:setcookie(name, value, expire, path, domain);其中前三项为必填

注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)


two.$_COOKIE 变量用于取回 cookie 的值:echo $_COOKIE["name"]
<?php
// Print a cookie
echo $_COOKIE["user"];

// A way to view all cookies
print_r($_COOKIE);
?>

three.setcookie("user", "", time()-3600);
注释:删除 cookie 时,您应当使过期日期变更为过去的时间点



Session

Quetion:由于 HTTP 地址不能维持状态,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。

Answer:Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

1.session_start() 函数启动/注册会话(同时为用户分配一个UID)

注释:session_start() 函数必须位于 <html> 标签之前

2.存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量。即简单的变量赋值和输出

3.unset() 或 session_destroy() 函数删除某些 session 数据

unset($_SESSION['views']);//删除指定的session变量

session_destroy();//彻底终结session


email

mail(reciever,subject,message,headers,parameters)//前三项为必选


error

1.简单的"die()"语句

<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
else
 {
 $file=fopen("welcome.txt","r");
 }
?>

2.自定义错误和错误触发器

3.错误报告


exception

在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常,也称异常处理。

异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。

如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。

1.try throw catch的关系
<?php
//创建可抛出一个异常的函数
function f($exa)
 {
     if错误→throw new exception("提示性语句");
     else xxx;
 }
try//try中触发异常
 {
    function($myexa);
 }
//捕获异常
catch(Exception $any)
 {
 echo 'Message: ' .$any->getMessage();
 }
?>


2.自定义exception类
<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = xxx;
  return $errorMsg;
  }
 }
$email = "someone@example...com";
try
 {
 //check if 
 if错误
  throw new customException(语句/此处为$email);
  }
 }

catch (customException $e)
 {
    echo $e->errorMessage();
 }
?>

注:可继承函数父类的this->getLine()/this->getFile()/this->getMessage()等函数


3.多个异常
class SONclass extends Exception
{...}
try()
{
    if...throw new Exception(xxx);
    else...throw new SONclass(xxx);
}
catch(Exception $any)...
catch(SONclass $any)...

4.重新抛出异常

class SONclass extends Exception
{...}
try()
{
   try()
   {throw new Exception(xxx);}
   catch(Exception $any)
   {throw new SONclass(xxx);}
}
catch(SONclass $any)
{...}


5.顶层异常处理器
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');
?>

异常的规则

  • 需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
  • 每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
  • 使用多个 catch 代码块可以捕获不同种类的异常。
  • 可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。

简而言之:如果抛出了异常,就必须捕获它。


MySQL

1.连接数据库。

语法

mysql_connect(servername,username,password);

$con = mysql_connect("localhost","root","123");

脚本结束断绝连接,也可自动断绝连接

mysql_close($con);


2.创建数据库/数据库表。

CREATE DATABASE database_name用于创建数据库

mysql_query("CREATE TABLE my_db",$con)向数据库发送查询命令

if (mysql_query("CREATE DATABASE my_db",$con))
  {
  echo "Database created";
  }


CREATE TABLE table_name用于创建数据库表

CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
.......

)

mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Persons 
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);

重要事项:在创建表之前,必须首先选择数据库。通过 mysql_select_db() 函数选取数据库。

注释:当您创建 varchar 类型的数据库字段时,必须规定该字段的最大长度,例如:varchar(15)。


3.插入数据

INSERT INTO 语句用于向数据库表添加新记录。

语法

INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)
mysql_query("INSERT INTO Persons (FirstName, LastName, Age) 
VALUES ('Peter', 'Griffin', '35')");

add:将html表单元素插入数据库


4.数据从数据库中选择数据

SELECT 语句用于从数据库中选取数据。

语法

SELECT column_name(s) FROM table_name

column_name(s) * 字符代表选取表中所有数据

选择

mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");

输出

while($row = mysql_fetch_array($result))
  {
  echo $row['FirstName'] . " " . $row['LastName'];
  echo "<br />";
  }

5.WHERE条件查询

语法

SELECT column FROM table WHERE column operator value
检索条件    =    !=    >    <    >=    <=    BETWEEN    LIKE    AND

$result = mysql_query("SELECT * FROM Persons WHERE FirstName='Peter'");


6.ORDER BY对数据进行排序

语法

mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons ORDER BY age");

SELECT column_name(s) FROM table_name ORDER BY column_name DESC
注:DESC关键词设定为降序排序


7.UPDATE更新数据库表中的数据

语法

UPDATE table_name
SET column_name = new_value
WHERE column_name = some_value

mysql_select_db("my_db", $con);

mysql_query("UPDATE Persons SET Age = '36'
WHERE FirstName = 'Peter' AND LastName = 'Griffin'");

8.DELETE FROM 语句用于从数据库表中删除记录。

语法

DELETE FROM table_name
WHERE column_name = some_value

mysql_select_db("my_db", $con);

mysql_query("DELETE FROM Persons WHERE LastName='Griffin'");
9.ODBC

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值