注冊頁面
<body >
<h1>注冊頁面</h1>
<form action="zhucechuli.php" method="post">
<div>用戶名:<input type="text" name="uid"/> </div>
<div>密碼:<input type="text" name="pwd"/> </div>
<div>姓名:<input type="text" name="name"/> </div>
<div>性別:<input type="text" name="sex"> </div>
<div>生日:<input type="text" name="birthday"> </div>
<input type="submit" value="注冊"/>
</form>
</body>
<?php
$uid=$_POST["uid"];
$pwd=$_POST["pwd"];
$name=$_POST["name"];
$sex=$_POST["sex"];
$birthday=$_POST["birthday"];
include ("LZY.class.php");
$db=new LZY();
$sql="insert into zhuce VALUES ('{$uid}','{$pwd}','{$name}','{$sex}','{$birthday}',0)";
if($db->query($sql,0))
{
header("location:zhuceyemiandenglu.php");
}
喜歡用JavaScript編寫代碼嗎,但是對于某些項目必須使用PHP嗎?請繼續(xù)閱讀以了解如何使用有趣的圖書館將兩者結合起來。
自2000年以來我一直在使用PHP,并且使用JavaScript的時間更長。在過去的十年里,JavaScript已經發(fā)生了巨大的變化。它從一開始就有一個很有前途的設計,并且隨著轉向ES2015(Harmony)而獲得了目前令人難以置信的形狀。PHP雖然沒有改變那么多。顯然,它注定會永遠遭受自己的遺產。它到達90年代中期,作為一個簡單的CGI應用程序來維護Rasmus Lerdorf的主頁,并且更像是自發(fā)地發(fā)展起來的。這導致語法不一致,功能和基于OOP的資產混合在一起,缺乏體面的語言規(guī)范。所以每次我切換到PHP時,我都會錯過JavaScript的合理性,可預測性和靈活性。這讓我想到了一個可以為PHP帶來類似JavaScript的開發(fā)體驗的庫。最終,使用JavaScript(Underscore除外)方法擴展PHP類型的Extras,解鎖鏈接,并引入PlainObject代表對象文字的 類型。
該庫使用JavaScript和Underscore.js方法豐富了以下PHP類型:數組(包括順序和關聯(lián)),字符串,數字(整數,浮點數,NaN),函數(可調用),集合(Iterable,ArrayObject,Iterator)和布爾值。每個添加的方法都是表示類型的類的靜態(tài)方法。因此,我們可以直接訪問任何內容,而不需要創(chuàng)建鏈 Arrays::map。
這有什么好處?我們來看看下面的代碼片段:
<?php
use \Dsheiko\Extras\Arrays;
function numToArray(int $value, int $index, array $array): array
{
return [$value];
}
$res=Arrays::map(range(1,3), "numToArray"); // [[1],[2],[3]]
不同的是\array_map, 庫方法的接口與任何其他數組extras一致。第一個參數始終是源數組,接下來會迭代/預測回調,如果需要則返回其他任何內容。更?使用PHP數組函數,我們需要記住哪一個只接受源或引用的引用。 Arrays::*方法總是接受獨立的值和引用。
你有沒有注意到回調參數列表?是的,它根據ECMAScript規(guī)范進行了擴展。除了值之外,它總是接收元素索引(關聯(lián)數組中的鍵)和初始數組。
另外,所有添加的方法都可以連接在一起:
<?php
use \Dsheiko\Extras\Arrays;
$res=Arrays::chain([1, 2, 3])
->map(function($num){ return $num + 1; })
->filter(function($num){ return $num > 1; })
->reduce(function($carry, $num){ return $carry + $num; }, 0)
->value();
對我來說,它看起來比以下更干凈:
$array=[1, 2, 3];
$array=\array_map(function($num){ return $num + 1; }, $array);
$array=\array_filter($array, function($num){ return $num > 1; });
$array=\array_reduce($array, function($carry, $num){ return $carry + $num; }, 0);
什么其他類型呢?如果我們接受一個字符串,它的工作原理是一樣的:
<?php
use \Dsheiko\Extras\Strings;
function sanitizeSearchTerm(string $value, int $maxLength): string
{
return Strings::chain($value)
->trim()
->replace('`[^0-9\-_ \p{L}]`u', ' ')
->replace('` +`', ' ')
->substr(0, $maxLength)
->value();
}
此外,我們還可以在同一鏈中操作多種類型:
<?php
use \Dsheiko\Extras\Arrays;
$res=Arrays::chain(["foo"=> "FOO", "bar"=> "BAR"])
// input: array, output: string
->reduce(function($carry, $val, $key){ return $carry . " {$key}:{$val} "; }, "")
// input: string, output: integer
->indexOf("bar:")
// input: integer, output: double
->toFixed(2)
->value();
實際上,你甚至不需要猜測入口點的類型。相反,你可以使用類型:
<?php
use \Dsheiko\Extras\Any;
$res=Any::chain(new \ArrayObject([1,2,3]))
->toArray() // value is [1,2,3]
->map(function($num){ return [ "num"=> $num ]; })
// value is [[ "num"=> 1, ..]]
->reduce(function($carry, $arr){
$carry .=$arr["num"];
return $carry;
}, "") // value is "123"
->replace("/2/", "") // value is "13"
->then(function($value){
if (empty($value)) {
throw new \Exception("Empty value");
}
return $value;
})
->value();
正如你在這個例子中看到的,我也使用then類似于Promise API 的鏈式方法 。它接受鏈條的實際價值,并根據鏈條是否被修改進一步傳遞。
沒有說服?那么,我們對類型做了很多操作,尤其是對于數組。數組函數有助于隔離迭代范圍并提高性能,但在展示開發(fā)人員意圖時,它們并不那么方便。實際上,我們經常解決類似的邏輯任務,我們可以簡單地重用現(xiàn)有的模式。Extras庫包含一組Underscore.js方法。它有所作為。試想一下,您有一系列鍵值對象(實際上是關聯(lián)數組),其中攜帶有關劇院中所有劇本的數據。根據用戶應用的過濾器,您需要搜索匹配的播放。每次使用回調時\array_filter, 您都可以使用 Arrays:where:
$listOfPlays=[
["title"=> "Cymbeline", "author"=> "Shakespeare", "year"=> 1611],
["title"=> "The Tempest", "author"=> "Shakespeare", "year"=> 1611],
["title"=> "Hamlet", "author"=> "Shakespeare", "year"=> 1603]
];
$res=Arrays::where($listOfPlays, ["author"=> "Shakespeare", "year"=> 1611]);
// [
// ["title"=> "Cymbeline", "author"=> "Shakespeare", "year"=> 1611],
// ["title"=> "The Tempest", "author"=> "Shakespeare", "year"=> 1611],
// ]
或者,假設您有一個描述產品的鍵值數據結構。您需要提取包含您選擇的唯一對的較小對象(此處為關聯(lián)數組):
$res=Arrays::pick([
'name'=> 'moe',
'age'=> 50,
'userid'=> 'moe1',
//… 100 more lines
], 'name', 'age');
// ['name'=> 'moe', 'age'=> 50, ]
正如您可能注意到的,Extras可以反映PHP數組中的JavaScript類型數組和對象(分別為順序和關聯(lián))。此外,可以從中獲得類似于JavaScript普通對象的類型:
use \Dsheiko\Extras\Arrays;
$po=Arrays::object(["foo"=> "FOO", "bar"=> ["baz"=> "BAZ"]]);
echo $po->foo; // FOO
echo $po->bar->baz; // BAZ
該類型繼承了Underscore Object方法:
use \Dsheiko\Extras\Arrays;
$po=Arrays::object([
"start"=> 5,
"end"=> 12,
]);
$res=$po->mapObject(function($val){
return $val + 5;
}) // PlainObject{ "start": 10, "end": 17 }
->invert(); // PlainObject{ 10: "start", 17: "end" }
Extras是一個可通過作曲者使用的PHP包:
composer require "dsheiko/extras"
它旨在改進PHP的開發(fā)體驗。也就是說,它提供了一種具有一致的命名約定和一致的參數順序的類型操縱工具帶。任何交付的方法都是可鏈接的。除了PHP泛型類型之外,該軟件包還帶有PlainObject,它類似于JavaScript普通對象。包方法遵循相應的JavaScript和Underscore.js / Lodash方法的語法和邏輯。
app/admin/controller創(chuàng)建Login.php文件(注意首字母需要大寫):
把login_index.html模板文件放在view/admin模板目錄里(模板文件下載地址我會放在后面):
打開127.0.0.1/admin.php/login/index.html后臺登錄頁面,輸入正確的賬號和密碼提示登錄成功并跳轉到127.0.0.1/admin.php/index/index.html
打開app/middleware.php文件,開啟Session初始化:
在app創(chuàng)建AdminController.php文件:
接著打開app/admin/controller/Index.php,
把
use app\BaseController;
改成
use app\AdminController;
把
class Index extends BaseController;
改成
class Index extends AdminController;
接著在第55行添加:
session('user', null);
最后本篇教程所有代碼都放在我的Gitee,歡迎查閱學習
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。