WebGL Tutorial
and more

PHP Documentation

撰写时间:2023-07-05

修订时间:2024-02-16

Form

设置HTML表单 datetime-local的value值

下面的情况在Safari浏览器中遇到。

第一种情况

在网页中可以正常显示,但却显示为:

2023/05/08 19:23

如果要带秒数也可以,但必须为0.

第二种情况

在网页中可以正常显示,但却显示为:

2023/05/08 19:23

但如果改为:

也就是后面加上了非零的秒值,则可显示,但提交时却显示请输入有效值的错误提示,并导致无法提交。

第三种情况

// or

在网页中显示时各组件是灰色的,显示为:

2023/05/08 12:30

可以提交,但参数实际上并未传递。而如果通过界面进行选择设置,各组件变为正常颜色,就可正常提交。

PHP设置本地时区值

首先,由于本地或远程服务器的PHP的默认时区可能为UTC,因此在处理与时间相关的事宜时,必须先设置时区。

date_default_timezone_set("Asia/Shanghai"); $datetime = new DateTime(); $timeStr = $datetime->format('Y-m-d H:i');

然后设置input:

value='<?php echo $timeStr; ?>'

Submission

GET 还是 POST

GET会在浏览器的地址栏中显示参数。POST则不会。

GET的参数有字符限制,且会暴露在大众之下。它的好处是,可以为特定的参数在浏览器中予以收藏。

POST的好处是机密,可一次性地处理众多参数。默认情况下应优先使用POST,除非它有收藏的必要。

Validation

Escaping Special Chars

<?php $yourname = htmlspecialchars($_POST['yourname']); $email = htmlspecialchars($_POST['email']); ?>

Additional Consideration

function check_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; }

Required and Optional Inputs

$yourname = check_input($_POST['yourname'], "Enter your name!"); function check_input($data, $problem='') { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); if ($problem && strlen($data) == 0) { die($problem); } return $data; }

Validating Emails

$email = htmlspecialchars($_POST['email']); if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { die("E-mail address not valid"); }

Validating Website URL

$url = htmlspecialchars($_POST['website']); if (!preg_match("/^(https?:\/\/+[\w\-]+\.[\w\-]+)/i",$url)) { die("URL address not valid"); }

Redirect after Validation

header('Location:index.html');

基本语法

PHP需要编译的内容

只要在<?php?>之范围内的内容,都是PHP需要编译的内容。

<?php echo 'Hello, PHP'; ?>

PHP支持一种称为short echo tag的方式<?= ?>

<?= 'Hello, PHP'; ?>

其效果与上面的输出一致。

第3种方式是<? ?>:

<? 'Hello, PHP'; ?>

但这种方式,需要在php.ini配置文件中激活short_open_tag选项。因此这种方式并不常用。

如果某个PHP文件被用于includerequire,并且该文件只有PHP语句,则最好不用添加结尾标签。这样做可以避免不必要的空白符添加至文件末尾,且你还可以在之后添加headers进response中。

条件语句

普通的条件语句如下:

<?php if ($起卦信息['起卦方式'] == '按农历时间') { ?> let dateStr = "<?= $起卦信息['农历时间'] ?>"; 梅花易数Obj = new 农历时间梅花易数(dateStr); <?php } ?>

PHP支持下列比较简洁的混用语句:

<?php if ($expression == true): ?>

This will show if the expression is true.

<?php else: ?>

Otherwise this will show.

<?php endif; ?>

因此,上面的条件语句可写成:

<?php if ($起卦信息['起卦方式'] == '按农历时间'): ?> let dateStr = "<?= $起卦信息['农历时间'] ?>"; 梅花易数Obj = new 农历时间梅花易数(dateStr); <?php endif; ?>

格式更加简洁、直观。

字符串

字符串拼接

第1种是在双引号的字符串中直接引用变量。

$greeting = "Hi"; $user_name = 'Mike'; echo "$greeting, $user_name. How are you?";

注意,单引号的字符串不会解析其中的变量。

第2种是使用句号.来拼接字符串。

$user = 'Sarkuya'; $str = "Hi, " . $user . ", how are you?"; echo $str;

第3种是使用sprintf函数来构建字符串。

$user = 'Sarkuya'; $age = 25; $fmt_str = "Hello, %s. Are you %d years old?"; $out_str = sprintf($fmt_str, $user, $age); echo $out_str;

数组

字典式数组查找索引值

字典式数组是没有基于数字的索引值的。有时我们需要取得数组中特定元素的索引值,以便进行诸如加1或减1的运算。

$arr = array( "name" => "Mike", "age" => 25 ); echo $arr // Warning: Undefined array key 0

array_keysarray_values函数可返回数组对象的键或值所组成的数组。而这两个数组都是基于数字为索引值的。

$idx_key_map = array_keys($arr); print_r($idx_key_map);

显示:

Array ( [0] => name [1] => age )

接着,使用特定键名称在此数组中查找索引值:

$curr_idx = array_search("age", $idx_key_map); echo $curr_idx; // 1

现在根据此索引值取得$idx_key_amp的前1个元素的键名:

$prev_element_key = $idx_key_map[$curr_idx - 1]; echo $prev_element_key; // name

最后,根据此键名,访问arry数组中的元素值。

echo $arr[$prev_element_key]; // Mike

有点绕且易出错。可以将上面这些步骤打包为一个函数:

$arr = array( "name" => "Mike", "age" => 25 ); function get_prev_propname($arr, $prop_name) { $idx_key_map = array_keys($arr); $curr_idx = array_search($prop_name, $idx_key_map); $prev_element_key = $idx_key_map[$curr_idx - 1]; return $prev_element_key; } $prev_prop_name = get_prev_propname($arr, "age"); echo $prev_prop_name; // name echo $arr[$prev_prop_name]; // Mike

服务器

查看服务器信息

phpinfo();

这种方式只能在测试时使用,不能被外界访问。如果要查看远程服务器的信息,可临时新建一个文件调用此命令,查看后立即从远程服务器中删除。

在Console查看PHP变量值

在调试阶段,经常需要将PHP变量值在Console中输出。

$msg = "Hello"; $expr = "<script>console.log(\"$msg\")</script>"; echo $expr;

PHP先生成JavaScript的语句,然后再传入PHP的变量值。

感悟

PHP发挥作用的领域是在服务器端,但我们有时可能却犯了一个低级错误:将需在客户端发生的事情交由PHP来完成。

参考资源

PHP

  1. PHP TUTORIAL HOME
  2. MySQL Improved Extension
  3. PHP include
  4. PHP DateTime::format
  5. PHP tags
  6. PHP Strings
  7. PHP Array Functions

PHP Form

  1. myphpform.com

HTTP

  1. HTTP 1.1