PHP初心者の間違いセット
開発を行うときは、すべてのエラー プロンプトをオンにしてください: error_reporting = E_ALL | E_STRICT
エラー プロンプトをブロックすることは、耳を隠してベルを盗むことと同じです。
標準化された方法でコードを作成すると、エラーが半分に減ります。
1: 変数を取得できないのはなぜですか?
ある Web ページから別の Web ページにデータ名を POST するのに、$name を出力すると値を取得できないのはなぜですか?
PHP4.2 以降のバージョンの場合register_global のデフォルトは off です
別のページから送信された変数を取得したい場合:
方法 1: PHP.ini で register_global を見つけて on に設定します。
方法 2: この extract($_POST) を先頭に置きます。受信側 Web ページ; extract($_GET);(extract($_SESSION) の前に Session_Start() が必要であることに注意してください)。
//extract ( array $var_array [, int $extract_type [, string $prefix ]] )
//この関数は、配列から現在のシンボル テーブルに変数をインポートするために使用されます。連想配列 var_array を引数として受け入れ、キー //name を変数名として、値を変数の値として使用します。キーと値のペアごとに、 //extract_type パラメーターと prefix パラメーターの影響を受ける変数が現在のシンボル テーブルに作成されます。
//import_request_variables ( string $types [, string $prefix ] ) はスーパーグローバルであり、$_ $* に抜け穴があります
方法 3: 変数を 1 つずつ読み取る $a=$_GET["a"];$b= $_POST["b"] など。この方法は面倒ですが、安全です。
2: プログラムをデバッグする
実行時に特定の変数の値を知っておく必要があります。これが私がやったことです。debug.php ファイルを作成します。その内容は次のとおりです:
PHP コード: ------------------------ -------------------------------------------------- -- --
コードをコピー
Ob_Start();
Session_Start();
Echo "
";<br/> Echo "このページで取得される _GET 変数は次のとおりです:";<br/> Print_R($_GET);<br/> Echo " このページで取得される _POST 変数は次のとおりです: ";<br/> Print_R($_POST);<br/> Echo "このページで取得される _COOKIE 変数は次のとおりです: ";<br/> Print_R($_COOKIE);<br/> Echo "このページで取得される _SESSION 変数ページは :";<br/> Print_R($_SESSION);<br/> Echo "";
---------------------- -------------------------------------------------- -- ----
次に、php.ini で include_path = "c:/php" を設定し、このフォルダーに debug.php を置きます。
今後はこのファイルをすべての Web ページに含めて、結果の変数を表示できます。名前と値。
3: session の使用方法
セッションに関連するすべてのものは、その前に関数 session_start() を呼び出す必要があります。
セッションの値の支払いは、次のように非常に簡単です:
PHP コード: ---- --- --------------------------------------------------- --- --------------------------
php4.2以降は、セッション料金を直接支払うことができます:
PHPコード:- ----- -------------------------------------- ----- ------------------------
[php]
Session_Start();
$_SESSION["name"]= "値";
[/php]
-------------------------------------- ---------- ----------------------------------
このようにセッションをキャンセルします:
PHP コード:---- -------------------------------------- ---------- ------------------------
[php]
session_start();
session_unset() ;
session_destroy();
[/php]
------------------------------------- ------------- ----------------------------------
php4.2 以降では、特定のセッション変数をキャンセルする際にバグがあります。
注:
1: Session_Start() を呼び出す前に出力を行うことはできません。たとえば、以下は間違っています。 ===================== ====================
1行
2行 [php]
3 行 Session_Start();//最初の行の前にすでに出力がありました
4 行....
5 行[/php]
================ ======================== ====
ヒント 1:
「...ヘッダーはすでに送信されました...」が表示されるたびに、これは、Session_Start()の前にブラウザに情報が出力されていることを意味します。
出力を削除すれば正常になります。 (このエラーはCOOKIEでも発生し、エラーの原因は同じです)
ヒント2:
Session_Start() がループ ステートメント内に配置されており、情報が以前にブラウザーに出力された場所を特定するのが難しい場合は、次の方法を使用できます。
1 line [php] Ob_Start();
....これがあなたのプログラムです...
2: エラーは何ですか?
警告: session_start(): open(/tmpsess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) が失敗しました:....
セッション ファイルの保存パスを指定します。
解決策:
(1) C ドライブに tmp フォルダーを作成します
( 2) php.ini を開き、session.save_path を見つけて、それを session.save_path= "c: /tmp"
4: 変数を別の Web ページに送信すると、変数の前半とスペースで始まる部分だけが取得されるのはなぜですか? すべてが失われています
PHP コード:----- -------------------------------------- ---------- ----------------------------
[php]
$Var="hello php ";//$Var に変更します=" hello php"; 結果を取得してみます。$post= "receive.php?Name=".$Var;
header("location:$post");
[/php]
----------------- -------------------------------------------------- -------------
receive.php 内容:
PHP コード:---------- ---- ------------------------------------------------ ---- --
[php]
Echo "
";<br/>Echo $_GET["Name"];<br/>Echo "";
[/php]
--- ---- ------------------------------------------------ ---- ------------------------
正しい方法は次のとおりです:
PHP コード:---------- ----- -------------------------------------- ----- ---------------
[php]
$Var="hello php";
$post= "receive.php?Name=".urlencode($Var);
header ("location:$post");
[/php]
-------------------------------- -- ------------------------------------------------ -
受信ページで Urldecode() を使用する必要はありません。変数は自動的にエンコードされます。
5: "[/php]" で終わらずに指定された長さの中国語文字をインターセプトする方法、および余分な部分は "..." で終わります
一般に、インターセプトされる変数は Mysql からのものです。まず、フィールドの長さが十分な長さであることを確認します (通常は char(200))。これには 100 文字の中国語文字を保持できます。 、句読点を含む
PHP コード: --- -------------------------------------- ------------ ------------------------
[php]
$str="このキャラクターとても長いです、^_^";
$ Short_Str=showShort($str,4);//最初の 4 つの中国語文字をインターセプトすると、結果は次のようになります: この文字...
Echo "$Short_Str";
Function csubstr( $str,$start,$len)
{
$ strlen=strlen($str);
$clen=0;
for($i=0;$i{
if ($clen>=$start+$len)
break ;
if(ord(substr($str,$i,1))>0xa0)
{
if ($clen>=$start)
$tmpstr. =substr($str,$i,2);
$i++;
}
else
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,1);
}
}
return $tmpstr;
}
関数 showShort ($str,$len)
{
$tempstr = csubstr($str,0,$len);
if ($str<>$tempstr)
$ tempstr .= "..." //終わりについては、ここを変更するだけです。
return $tempstr;
}
------ -------------------------------------------------------- ----
6: SQL ステートメントを標準化します
キーワードの誤用によるエラーが発生しないように、テーブルやフィールドの前に「`」を追加します。
もちろん、使用することはお勧めしませんキーワード。
例:
$Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your SQL string ' , '2003-07-11 00:00:00')"
"`"入力方法は? TAB キーです。
7: Html/PHP 形式の文字列を防ぐ方法解釈されませんが、そのまま表示
PHPコード:------------------------------------- ---------- --------------------------------------
[php]
$str="