使用 PHP 语言编程
可用于创建网页的HTML嵌入语言等。PHP本身是一种在服务器上处理的语言,可以从后端数据库中获取和更新数据,然后在web浏览器中显示信息。为了学习PHP编程,将整理相关的信息和代码示例。
HTML的基礎
在写网站的时候众所周知的语言。
通过浏览器应用程序可以显示网页源代码并将其输出如下。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>QA Sheet</title>
</head>
<body>
<h1>Sample</h1>
<h2>Sample</h2>
<p>xxxxxxxxxxxxx</p>
</body>
</html>
HTML基本上是通过开始标签<标签名>和结束标签</标签名>的组合来表达的。
以下是主要的标签:
由于只有这个描述不明确,所以提供一个示例的HTML代码。
<!doctype html>
<html>
<head>
<title>主な要素</title>
</head>
<body>
<h1>タイトル</h1>
<h2>副題</h2>
<p>
これはパラグラフです。文節を記述するためタグです。
一部分だけをマーキングする場合は<span>スパン</span>を使用します。
</p>
<h3>番号付リストの例</h3>
<ol>
<li>野菜を切る</li>
<li>材料を炒める</li>
<li>盛り付ける</li>
</ol>
<h3>箇条書きの例</h3>
<ul>
<li>HTMLの基本</li>
<li>スタイルの基本</li>
<li>スクリプトの基本</li>
</ul>
<button>OKボタン</button>
<button>NGボタン</button>
<input type="text" value="hello" />
<input type="text" value="world" />
</body>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Table Test</title>
</head>
<body>
<table border="2">
<tr>
<th>Country</th>
<th>Metropolitan</th>
<th>number</th>
</tr>
<tr>
<td>Japan</td>
<td>Tokyo</td>
<td>300</td>
</tr>
<tr>
<td>America</td>
<td>New York</td>
<td>1000</td>
</tr>
<tr>
<td>
<a href="https://www.yahoo.co.jp/">yahoo.com</a>
</td>
</tr>
</table>
</body>
</html>
1. PHP编程基础
在走过程中,将容易忘记的事项列入备忘录。(不会包括过于基本的事项)
时区、日期和时间显示
time()はUNIXタイムスタンプなのでそれをyyyy/mm/dd hh:mm:ss形式に変換。2019/6に実行
<?php
date_default_timezone_set('Asia/Tokyo'); //タイムゾーンの設定
echo date("Y/m/d H:i:s") . "\n"; //「現在時刻」
echo date("Y/m/12") . "\n"; //「2019/06/12」
echo date("Y/m/t") . "\n"; //「2019/06/30」
?>
文件输入输出
<html>
<head><title>Access Log</title></head>
<body>
<?php
//デフォルトタイムゾーン定義
date_default_timezone_set('Asia/Tokyo');
print(date("Y/m/d H:i:s")."\n");
print("<p>Access Log</p>\n");
//アクセスログのファイルポインタを定義
$filepointer=fopen("./logs/accesslog_test","a+");
//アクセスログの排他制御を実現するためにファイルをLOCKする。
flock($filepointer,LOCK_EX);
//ファイルに日時 アクセス元IPアドレスの書き込みを実施。
fputs($filepointer,date("Y/m/d H:i:s "). $_SERVER["REMOTE_ADDR"] ."\n");
//ファイルロックを解除
flock($filepointer,LOCK_UN);
//ファイルポインタを先頭に戻す
rewind($filepointer);
//ファイルの読み込み実施・feofはファイルポインタの最後にTRUEを返す関数
while(!feof($filepointer)){
$fileline=fgets($filepointer);
print($fileline."<br />");
}
?>
</body>
</html>
饼干
Cookie 是一种机制,用于在浏览器访问服务器时临时写入数据。它可以记录浏览器的访问时间以及访问次数等信息。通过这种方式,服务器可以识别不同的浏览器并执行不同的处理。
在PHP中,可以使用setcookie函数来设置cookie。
setcookie( cookie名称[, cookie值 [, 有效期限 [, 路径 [, 域名 [, 安全标志]]]]])
※安全标志用TRUE/FALSE来控制是否只在SSL通信时附加cookie
※通过这种方式附加的cookie将在下一次从浏览器发送的请求头中附带。
<?php
$time=$_COOKIE["count"];
if(!isset($time)){
$time=0;
}else{
$time++;
}
setcookie("count",$time,time()+600); //Cookie名,Value,Expire Time
?>
<html>
<head>
<title>Cookie Test</title>
</head>
<body>
<?php
if($time == 0){
print("Nice to meet you!");
}elseif($time ==1){
print("Second Time!");
}elseif($time ==2){
print("Third Time!");
}else{
print("Other!");
}
?>
</body>
</html>
会话 (huì huà)
当写入session_start()时,会启动一个会话。
会话是一个用于在一系列处理中随时识别客户端的机制。
同一客户端(浏览器)的访问过程中会安全保存在服务器端。
使用cookie在客户端可能会存储重要数据的风险。
而在使用会话时,会传递一个唯一的ID(会话ID)给客户端以识别每个客户端,在服务器端对其进行判断。
<html>
<head><title>PHP TEST</title></head>
<meta charset="utf-8">
<body>
<?php
//デフォルトタイムゾーン定義
date_default_timezone_set('Asia/Tokyo');
if (!isset($_SESSION["visited"])){
print('初回の訪問です。セッションを開始します。');
$_SESSION["visited"] = 1;
$_SESSION["date"] = date("Y/m/d H:i:s");;
}else{
$visited = $_SESSION["visited"];
$visited++;
print('訪問回数は'.$visited.'です。<br>');
$_SESSION["visited"] = $visited;
if (isset($_SESSION["date"])){
print('前回の訪問日時は'.$_SESSION["date"].'です。<br>');
}
SESSION["date"] = date("Y/m/d H:i:s");
}
?>
</body>
</html>
处理HTML表单
输入HTML表单并将其输出到屏幕的示例。
使用文本框、单选按钮、复选框、下拉菜单、文本区域进行实施。以POST方法在sample.php中处理。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>QA Sheet</title>
</head>
<body>
<h1>QA Sheet!!!</h1>
<form method="post" action="sample.php">
<p>
Name:<input type="text" name="name" />
</p>
<p>
Sexuality:
<input type="radio" name="Sexuality" value="Man" /> Man
<input type="radio" name="Sexuality" value="Women" /> Women
</p>
<p>
Product:
<input type="checkbox" name="properties[]" value="CellPhone" /> CellPhone
<input type="checkbox" name="properties[]" value="Car" /> Car
<input type="checkbox" name="properties[]" value="Cottage" /> Cottage
</p>
<p>
Favorite Fruit:
<select name="Fruit">
<option>Apple</option>
<option>Orange</option>
<option>Banana</option>
</select>
</p>
<p>
<textarea name="freeanswer" rows="4" cols="40">Free Comment</textarea>
</p>
<p>
<input type="submit" value="Submit" />
<input type="reset" value="Cancel" />
</p>
</form>
</body>
</html>
以下是對上述問題的回答。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Answer Sheet</title>
</head>
<body>
<?php
$name = $_POST['name'];
$sexuality = $_POST['Sexuality'];
$properties = implode(", ",$_POST["properties"]);
$fruit = $_POST['Fruit'];
$freeanswer = $_POST['freeanswer'];
?>
次のデータを受け取りました
<br />
<table border="1">
<tr>
<th>Name</th>
<td><?php echo $name ?></td>
</tr>
<tr>
<th>Sexuality</th>
<td><?php echo $sexuality ?></td>
</tr>
<tr>
<th>Product</th>
<td><?php echo $properties ?></td>
</tr>
<tr>
<th>Fruit</th>
<td><?php echo $fruit ?></td>
</tr>
<tr>
<th>Free Answer</th>
<td><?php echo $freeanswer ?></td>
</tr>
</table>
</body>
</html>
文件上传
在PHP中,我们可以利用超全局变量\$_FILES来进行通过Web浏览器上传文件的操作。
\$_FILES是一个二维关联数组,可以获取以下信息。
upfile是在上传时,通过中指定的name值。
与えられる一時的な名前(フルパス)$_FILES[‘upfile’][‘error’]エラーコード
为了获得实际上传的文件,需要对从\$_FILES获取的文件给予名称和存储位置。
移动已上传的文件(移动前路径,移动后文件路径)。
<html>
<head><title>upload test</title></head>
<meta charset="utf-8">
<body>
----------------------Upload Testing------------------------------------
<form method="post" enctype="multipart/form-data" action="uploader.php">
<input type="file" name="upfile">
<input type="submit" value="UPLOAD">
</form>
</body>
</html>
<html>
<head><title>PHP TEST</title></head>
<meta charset="utf-8">
<body>
<p> file uploader </p>
<?php
$updir="./upload/";
$filename=$_FILES['upfile']['name'];
if (move_uploaded_file($_FILES['upfile']['tmp_name'],$updir.$filename) == FALSE){
print("Upload failed...");
print($_FILES['upfile']['error']);
}else{
print("<b>".$filename."</b> uploaded");
}
?>
</body>
</html>
使用PDO进行数据库连接处理[PHP数据对象]。
如果要在PHP中连接数据库,可以使用PDO来创建对象,然后使用PDO对象的方法来操作数据库。
1) 如何执行SQL代码
//接続定義
$dsn = 'mysql:host=db1;port=3307;dbname=testdb';
$user='admin';
$password='P#ssw0rd';
$dbh = new PDO($dsn, $user, $password);
//SQL実行部分
$dbh->query('select * from item where id=100);
//接続定義
$dsn = 'postgresql:host=XXX;port=5432;dbname=testdb';
$user='pguser01';
$password='P#ssw0rd';
$dbh = new PDO($dsn, $user, $password);
//SQL実行部分
$dbh->query('select * from item where id=100);
//接続定義
$dsn = 'mysql:host=db1;port=3307;dbname=testdb';
$user='admin';
$password='P#ssw0rd';
$dbh = new PDO($dsn, $user, $password);
//SQL実行部分
$smt=$dbh->prepare("UPDATE item SET price = :price WHERE id = :id");
$smt->execute(array(':price'=>500, ':id'=>2));
2) SQL 输出方法
通过方法1只能将 SQL 执行结果作为返回值返回,不能作为数据值使用。
可以使用 fetch 方法将数据作为值使用。
//接続定義
$dsn = 'mysql:host=db1;port=3307;dbname=testdb';
$user='admin';
$password='P#ssw0rd';
$dbh = new PDO($dsn, $user, $password);
//1レコードあたり1次元配列として取得。複数行の場合は2次元配列になる
$sql = "SELECT * FROM item";
$rows = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
var_dump($rows);
//select指定した1カラムを1次元配列として取得。
$sql = "SELECT name FROM item";
$rows = $dbh->query($sql)->fetchAll(PDO::FETCH_COLUMN);
var_dump($rows);
//接続定義
$dsn = 'mysql:host=db1;port=3307;dbname=testdb';
$user='admin';
$password='P#ssw0rd';
$dbh = new PDO($dsn, $user, $password);
$sth = $dbh->query('select * from item limit 100');
foreach($sth as $row){
print($row['id'].",".$row['name'].",".$row['description']."\n");
}
- DB 接続定義用の関数を別ファイルで保有する。
<?php
function db_connect(){
$db_user = "root"; // ユーザー名
$db_pass = "P#ssw0rd"; // パスワード
$db_host = "mysql1"; // ホスト名
$db_name = "db01"; // データベース名
$db_type = "mysql"; // データベースの種類
$dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";
try {
$pdo = new PDO($dsn, $db_user,$db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $Exception) {
die('エラー :' . $Exception->getMessage());
}
return $pdo;
}
?>
参考链接:
(Translation)
请参考以下链接: