PHP的基础语法
◆数据库的三种类型(教科书P288~9)
而后面的两个选项在理论上是有的,但几乎没有实际应用例子。
◆关系型数据库(教科书第290~1页)
数据库将逐行进行处理。
每行必须包含一个主键。使用该键来选择数据。
主键的条件是“唯一且非空”。
■视图表
外键
用于连接tbl(指表)之间的关键字(如共同的id等)。
■ 标准化
将表进行分割,以防止不一致和遗漏。
(非正规形式→第一正规形式→第二→第三)
-
- 第一正規形
繰り返しを除く(繰り返し部分を切り離し、新たなレコードとして挿入する)
第二正規形
関係する部分ごとにtblを分ける
将以下内容以中文母语进行改述,只需要提供一种选择:
|商品编号|商品名称|单价|数量|
↓
|编号|数量| |编号|名称|单价|
分成两部分。
-
- 第三正規形
主キー以外に依存している列を取り出し、tblを分ける
◆使用SQL操作数据库(教科书P310~1)
■DB和PHP之间的数据交互指令(代表性的)
SELECT
書込INSERT INTO
更新UPDATE
削除DELETE
tblやDB作成CREATE
※CREATE不经常使用。
选择的条件
WHERE
結合JOIN
从~中选择全部数据
-
- ロールバック:障害が起きる前段階に戻す
- ロールフォワード:以降を手動で処理
◆PHP
PHP在服务器端是一种编程语言,当服务器收到PHP文件的请求时,在服务器端机器上进行PHP部分的处理,并将结果传递给请求者。
-
- ファイル拡張子 :「.php」
-
- プログラムエリア:「 此外,PHP具有访问各种数据库的能力,目前使用PHP最常访问的数据库是MySQL。
MAMP(Mac使用)
Apache(服务器)
免费服务器xfree
请注意phpMyAdmin配置已过时
Lollipop
Sakura(付费但价格便宜的服务器)
与XAMPP相同的配置
源码在GitHub上开放
◆XAMPP的初始設定
■更改配置文件
保留设置文件(.ini)的备份。
-
-
- C:\xampp\php の「php.ini」をデスクトップにコピペ
-
-
-
- 「php.ini.bak」に名前変更し、フォルダに戻す
-
修改php.ini文件
-
-
- 「mbstring.language = Japanese」の頭にある「;」(コメントアウト)を消す
-
-
-
- date.timezone=~を「date.timezone=”Asia/Tokyo”」に修正
-
重新启动XAMPP,并点击Apache&MySQL的[start]按钮。
-
-
- Moduleが薄緑になり、下に赤文字エラー出ないことを確認したらOK!
-
以默认设置打开文件结构。
删除位于htdocs目录下的”index.php”文件。
2)打开 http://localhost/ (直接加入书签)
◆htdocs(C:\xampp\htdocs)→ htdocs(C:\xampp\htdocs)
在本地使用XAMPP进行工作。
将文件保存在「xampp文件夹」的「htdocs」中。除此之外的地方放置,PHP将无法处理。
(相当于在托管服务器上,租用并放置文件或文件夹的位置!)
■访问时,请输入”http://localhost/ “!!
在XAMPP中处理PHP文件并在浏览器中显示,需要在URL中输入”http://localhost/~”,然后输入文件夹名称和文件名进行访问。
注意:只有htdocs文件夹是“http://localhost”地址。
◆关于XAMPP的按钮
– information_schema
– mysql
– performance_schema
– phpmyadmin
◆ 回应文(输出)
echo "ここに表示する内容";
在那個位置輸出指定的內容(文字等)。
<p><?php echo "Hello,I'm a PHP!"; ?></p>
//  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄↑ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
//ここがPHPとして処理され、指定した文字列が書き出される
//(「<p>Hello~PHP!</p>」となり、ブラウザで出力)
-
-
- echoの””中にpタグ含めて書くより、pタグでechoを包む形が多い!!
-
PHPで処理する量を減らすため、タグが確定してる時は中にPHP
PHPエリア内はスペース効かないので、ソース汚くなる……
■在echo中的逗号 “,”。
将字符串连接起来。可以将字符串和变量连接在一起。
echo "<p>「",$number,"」は、奇数です。</p>",PHP_EOL;
 ̄  ̄  ̄
◆源代码的换行
■ 「PHP_EOL」… 输出源代码的换行
echo "<p>「",$number,"」は、奇数です。</p>",PHP_EOL;
//  ̄ ̄ ̄ ̄
◆注释
■/*~*/
■/*~*/
多行(块注释)
■//(需要用中文进行同义改写)
一排
请用中文进行转述,只需给出一种选项:
一行 (yī
一排 (yī
一列 (yī liè)
◆「”」和「’」的区别
在echo文件中
-
-
- 「”~”」
-
内部の変数を評価し、値に変換して出力
「’~’」
内部の変数は評価せず、変数名そのまま出力
◆$ ~(变量的命名)
■ 「$~」
给变量取名字
●mt_rand(生成随机数)
■ 「mt_rand(min, max)」-「mt_rand(最小值,最大值)」
随机获取
mt_rand()和rand()具有相同的功能,是rand()的别名。
两者都可以在括号内获取一个在”min~max”范围内的随机数。
如果省略了括号(),则会获得以下输入的随机数。
-
-
- min:「0」
-
-
-
- max:そのシステムで扱える最大の整数
-
◆var_dump()函数
在括号内写上变量时,会输出该变量的类型和内容。
类似于JavaScript的console.log效果。
$a = 1;
var_dump($a); //int(1) と出力
◆错误
-
-
- パースエラー/シンタックスエラー
-
致命的!画面に何も出ない
FatalErrorなど
そこまで処理し、エラーで停止
警告
エラー出るだけで処理する
※最后全部删除包括警告!
◆可变变量
在变量名中使用变量,并将变量名设为可变。
$var=1;
$var_name='var';
echo $$var_name;
//  ̄ ̄↑ ̄ ̄
// まず、「$var_name」が評価されて「$var_name」の中身が「$var」
// となり、その後に「$var」が評価され「1」がechoされる
◆超级全局变量
「$_ほにゃほにゃ」と呼ばれるものは、スーパーグローバル変数として知られています。
$_GET
formのmethod=”get”で受け取った変数$_POST
formのmethod=”post”で受け取った変数$_COOKIE
cookieから受け取った変数$_SESSION
セッション変数◆变量的范围
■全球范围
PHP没有块级作用域!
■ 本地范围
在函数内部是本地的!!
◆固定值
■ define()函数
<?php
define('book','Perfect PHP');
■const 关键字
可以用类似JavaScript的方式进行设置。(适用于PHP5.3及以上版本)
<?php
const BOOK = 'Perfect PHP';
◆printfによる小数点以下の強制出力
printf()
echoの場合
小数点以下&以降0しかない時、省略(整数に)される。
◆型判定
is_string()
文字列is_int()
整数is_float()
浮動小数点is_numeric()
数値として扱えるか判定()の値を判定し、「true」or「false」が返る。
◆类型检查
获取类型()函数
返回()内的对象的类型。
◆字符串的连接运算符
用「。」进行。
◆変数の計算の順番(メモ)
$a=1;
$b=$a ++;
//  ̄ ̄ ̄~aまで先に処理
【结果】
$a…2
$b…1
【结果】
$a为2,
$b为1。
$a=;
$b=++$a;
//  ̄ ̄++~が先に処理
【结果】
$a…2
$b…2
◆数组
$配列名=array(中身1,~,);
添字数组和关联数组都是用相同的命令创建的。(由于使用相同的函数创建,可以看作添字数组和关联数组是同一个东西!)
在PHP中,如果没有指定键,将自动将索引作为键来创建数组。
以下两个代码段创建了相同的数组!
$arr=array(
'a',
'b',
'c',
);
$arr=array(
0=>'a',
1=>'b',
2=>'c',
);
数组是一种数据结构,可以按特定顺序存储多个元素的集合。
-
-
- 値の変更 :可能
-
-
-
- キーの変更:不可!
-
<?php
$one = array(
1,
1.0,
'1', //複数の型も入れられる
);
$fruits = array(
'peach',
'apple' => 'red', //連想配列(appleがキー
);
echo $fruits[1],PHP_EOL; //「peach」と表示
echo $fruits['apple'],PHP_EOL;//「red」と表示
$arr=array(); //空の配列
◆在数组中插入或删除元素
array_splice(配列,〇番目から,△個削除し,そこに挿入する)
◆如果
可以以与JavaScript相似的方式使用。
与JS的区别之一是
elseif命令
else ifも問題なく使用でき、かつelseifという形も使用できる。
if(~){
// ︙
}
else if(~){
// ︙
if(~){
// ︙
}
elseif(~){
// ︙
实际上有一个名为”elseif”的指令。
■与JS的不同之处②
-
-
- ブロックの代わりに「:」「endif」を使用できる
-
if(~):
// ここに処理
else:
// ここに処理
endif;
◆在PHP中的switch
PHP的switch语句会进行case和”==”判定。
(教科书上使用的是”===”,但正确的是”==”)
◆遍历
和使用for循环遍历数组的效果一样!
foreach(配列名 as ここで使う変数)
// ↑  ̄ ̄ ̄ ̄ ̄ ̄ ̄$value等が定番
//添字なくても処理してくれる
按顺序将数组的值从头开始赋给指定的变量,进行循环处理。
如果返回的值为false,表示(在数组的最后一个数据之后)没有更多的数据,那么就结束循环处理。
除了取得值之外,还可以获取键。
foreach(配列名 as キーを受ける変数 => 値を受ける変数)
//  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄$key等が定番
◆通过foreach循环引用
因此,如果在foreach循环结束后向$color赋值,那么它会写入数组的最后一个数据。
为了避免这种情况发生,当进行引用时,需要立即解除变量的引用!!
unset(変数名)
重置指定的变量的函数。
◆约会 (yuē huì)
date(フォーマット);
■格式列表
Y
年4桁y
年2桁m
月(二桁の数字)n
月d
日(二桁の数字)j
日D
曜日3文字l
曜日フルスペルw
曜日(数字)G
時間24時g
時間12時H
時間24時2桁h
時間12時2桁i
分2桁s
秒2桁echo date("Ymd");// 20010310
$today = date("H:i:s");// 17:16:18
$today = date("Y-m-d H:i:s");
// 2001-03-10 17:16:18 (MySQL の DATETIME フォーマット)
◆退出()、终止()
一起执行PHP的强制终止命令。
この関数実行後は、そのPHPファイルのそれ以降の処理はしない。
()内に文章を設定すると、終了時にそれを出力する。
<?php
die ('ここで終了~!'); //画面上に文字表示
echo 'ここは処理されないよ';
?>
◆array_map()函数
array_map(関数,配列)
对于第2个参数指定的数组中的每个元素,执行第1个参数的函数
 ̄ ̄ ̄ ̄ ̄↑ ̄ ̄ ̄ ̄
(将数组元素的值逐个作为参数传递给第1个参数的函数,并将返回值赋给该元素)
闭包(教科书P114)
包括本地作用域和定义位置作用域的函数。
function() use($関数内で利用したい外の変数名){ ここに処理 }
// ↓2が親
$my_pow = function($times = 2){
// ↓親の引数を使う宣言
return function ($v) use(&$times){
//  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄returnで指定した関数の戻り値をreturnする
return pow($v,$times);
}
}
//引数を渡されなければ「2」(親を使う)、渡されたらその値を使う
$cube = $my_pow(3);//returnで関数が入る
echo $cube(2);//2の3べき乗(2*2*2)、結果は8
echo $cube(4);//4の3べき乗(4*4*4)、結果は64
関数に「;」は不要だが、
無名関数は変数に関数を代入しているので最後に「;」($suu=関数;)
◆指数运算
pow(元の数,べき乗の数);
◆htmlspecialchars()函数
htmlspecialchars(値,ENT_QUOTES,文字コード)
ENT_QUOTES
で「’」「”」両方対象第3引数文字コード-
-
- 第1引数の値の中で、htmlではそのままでは出力されない文字をエスケープ処理する
-
「>」→「&gr;」、「<」→「<」など
-
-
- 第2引数
-
ENT_COMPAT ダブルクオートは変換しますがシングルクオートは変換しません。
ENT_QUOTES シングルクオートとダブルクオートを共に変換します。
ENT_NOQUOTES
︙
ユーザーの入力したものはエスケープ処理必須!!1!
◆formデータ受取(教科書174P)
在HTML一侧,按以下形式接收数据。
get →「$_GET[‘name属性値’]」
post→「$_POST[‘name属性値’]」
<body>
<?php if(isset($_GET['name']) && strlen($_GET['name']) > 0): ?>
<p><?php echo htmlspecialchars($_GET['name'],ENT_QUOTES,'UTF-8'); ?>さん、こん
にちは</p>
<?php endif; ?>
<form action="form.php" method="get">
<p>名前:<input type="text" name="name">
<input type="submit" value="送信">
</form>
</body>
◆计数()
count(配列)
配列の要素数を取得
◆表单确认页面→接收
1)
htmlを書くとき、inputのtypeを「hidden」にすると、ブラウザ上に表示されない。
(ソースには表示される)
<input type="hidden" name="~" value="<?php echo ~;?">
の形で、ユーザの入力したものをvalueに設定していく。
■返回确认画面的按钮
<input type="button" value="戻る" onclick="history.go(-1)">
//  ̄ ̄ ̄ ̄↑ ̄ ̄ ̄
// JavaScriptで一つ前のページへ戻る
// (「-1」は1ページ分戻る)
◆正規表現によるチェック(教科書510P)
preg_match(正規表現,チェックする文字列)
※ 唯一需要提供的是,从头到尾(除非是特殊情况,如电子邮件地址等)
※ “~/u”是指定UTF-8的使用
if (preg_match("/^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9、。\n\r]+$/u",$message)) {
$message = $message;
}else{
$error = '変な記号は使わないでね。';
}
■ 郵遞區號 格式檢查
if (preg_match('/^([0-9]{3})(-[0-9]{4})?$/i', $data)) {
■电话号码 格式检查
if (preg_match('/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/', $data)) {
■检查数值格式
if (preg_match('/^[0-9]+$/', $data)) {
■英文字校对检查
if (preg_match('/^[a-zA-Z]+$/', $data)) { // 英字の場合
■英数字格式检查
if (preg_match('/^[a-zA-Z0-9]+$/', $data)) { // 英数字の場合 }
■电子邮件地址格式检查
if (preg_match("/^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@[A-Za-z0-9_.-]+\.[A-Za-z0-9]+$/", $mail)) { // メールアドレスやで
■汉字·平假名·片假名的格式检查
mb_regex_encoding("UTF-8");
if (preg_match("/^[ぁ-んァ-ヶー一-龠]+$/u",$name)) {
◆表单的文件提交和保存
$_FILES['name属性値']['コード']
■ 代码(以下五种)
name
ユーザが決めたファイル名tmp_name
ファイルの一時保管場所size
ファイルサイズ(byte)type
ファイルのmimeタイプ(拡張子など)error
エラーコード(0~8)<エラーコード>
0:成功
1:php.ini(サーバ側の設定)で制限したサイズをオーバー
2:HTMLで制限したサイズをオーバー
3:ファイルが一部しか転送されていない
4:ファイルが全部転送されていない
5:欠番
6:テンポラリーフォルダ(一時保管場所)がない
7:書き込み失敗
8:PHPの拡張モジュールによる制限
■htmlによるファイルサイズ制限
<form ~~>
︙
<input type="hidden" name="MAX_FILE_SIZE" value="byte数">
<input type="file" name="~"> ↑←※順番固定!!!!
◆从临时存放处移动到保存文件夹
一旦存储的文件,在从特定的PHP文件转移到其他文件执行后将被删除。因此,只有在通过