使用 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基本上是通过开始标签<标签名>和结束标签</标签名>的组合来表达的。
以下是主要的标签:

タグ名用途h1見出し1h2見出し2h3見出し3p段落ul箇条下記ol番号付きリストliリストの項目br改行bottonボタンinputインプットa文書間リンク記述tableテーブルtrテーブルの行tdテーブルのセル(データ)thテーブルのセル(見出し)ahrefにリダイレクト先アドレスを記載すると定義した文字列クリックによりリダイレクトされる

由于只有这个描述不明确,所以提供一个示例的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>
スクリーンショット 2019-06-24 14.42.18.png
<!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>
スクリーンショット 2019-06-24 15.02.52.png

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>
スクリーンショット 2019-06-26 15.29.43.png

以下是對上述問題的回答。

<!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>
スクリーンショット 2019-06-26 15.31.18.png

文件上传

在PHP中,我们可以利用超全局变量\$_FILES来进行通过Web浏览器上传文件的操作。
\$_FILES是一个二维关联数组,可以获取以下信息。
upfile是在上传时,通过中指定的name值。

要素意味$_FILES[‘upfile’][‘name’]元ファイル名$_FILES[‘upfile’][‘type’]ブラウザによって得られるMIME型$_FILES[‘upfile’][‘size’]アップロードされたファイルサイズ(byte)$_FILES[‘upfile’][‘tmp_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;
}
?>

参考链接:

【PHP】会員登録・ログインシステムを作ってみた

(Translation)
请参考以下链接:

【PHP】会員登録・ログインシステムを作ってみた