ホームページ > php教程 > php手册 > php と mysql の 3 日間パス - 2 日目

php と mysql の 3 日間パス - 2 日目

WBOY
リリース: 2016-06-21 09:11:15
オリジナル
1072 人が閲覧しました

mysql

1. While ループ

このレッスンでは、さらに深く掘り下げて、PHP と MySQL を使用して、いくつかのシンプルで便利なページを作成します。昨日作成したデータベースから始めて、データベース内のデータを表示しますが、少し磨きをかけます。

まず、次のコードを使用してデータベースの内容をクエリします。




$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query(" SELECT * FROM 従業員",$db);
echo "

n";
echo " /tr>n";
while ($myrow = mysql_fetch_row($result)) {
printf("
名前役職
%s %s%sn", $myrow[1], $myrow[2], $myrow[3]);
}
echo "
n";
?>



このアプリにいくつかの新しい機能が追加されたことにお気付きかもしれません。最も明白なのは while() ループです。このループは、データベースに読み取り可能なレコードがまだある限り (mysql_fetch_row() 関数を使用)、そのレコードを変数 $myrow に割り当て、中括弧 ({}) 内の命令を実行することを意味します。ここをよく見てください、この部分はより重要です。

mysql_fetch_row() 関数に注目する必要があります。ここには少し問題があります。配列を返すのですが、配列内のフィールドには配列の添字でアクセスする必要があります。最初のフィールドには 0、2 番目のフィールドには 1 というインデックスが付けられます。これは、特定の複雑なクエリを実行するときに実行するには非常に面倒です。

それでは、ループプロセスを詳しく見てみましょう。プログラムの最初の数行は、レッスン 1 の例ですでに見ました。次に、while() ループで、クエリ結果からレコードを読み取り、そのレコードを配列 $myrow に割り当てます。次に、printf関数を使ってデータの内容を画面に表示します。その後、ループが繰り返し実行され、次のレコードが読み取られて $myrow に割り当てられます。これは、すべてのレコードが読み取られるまで続きます。

while() ループを使用する利点の 1 つは、データベース クエリがレコードを返さなかった場合でも、エラー メッセージを受け取らないことです。ループ ステートメントが最初に実行されるとき、ループ条件は満たされず、データは $myrow に割り当てられず、プログラムは直接実行されます。

しかし、クエリがデータを返さなかった場合、どうやってユーザーにそれを知らせるのでしょうか?おそらく、ユーザーに関連する情報を提供する必要があるでしょう。それは可能です。その方法を見てみましょう。 >>


2. if-else

以下のプログラムをご覧ください。




$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query(" SELECT * FROM 従業員",$db);
if ($myrow = mysql_fetch_array($result)) {
echo "n";
echo "n";
do {
printf("
名前< td>アドレス
%s %s%sn", $myrow["first"], $myrow["last"], $myrow["address"]);
}
while ($myrow = mysql_fetch_array($result));
echo " < /table>n";
} else {
echo "申し訳ありません、レコードが見つかりません! ";
}
?>




このプログラムにはたくさんの新しいコンテンツが含まれています, しかし、すべては非常に簡単です。 1 つ目は mysql_fetch_array() 関数です。この関数は mysql_fetch_row() に非常に似ていますが、1 つの違いがあります。この関数を使用すると、$myrow["first"] などの配列添字の代わりにフィールド名を通じて返されるフィールドにアクセスできます。このようにして、多くの労力を節約できます。さらに、do/while ループと if-else 条件文がプログラムに追加されます。

if-else条件文の意味は、$myrow変数へのレコードの割り当てが成功した場合は続行し、そうでない場合はelse部分にジャンプしてそこで命令を実行するということです。

do/while ループは、前のページで使用した while() ループのバリエーションです。 do/while を使用する必要がある理由は、元の if ステートメントで、クエリによって返された最初のレコードを変数 $myrow に割り当てているためです。この時点で一般的な while ループ (たとえば while ($myrow = mysql_fetch_row($result))) を実行すると、2 番目のレコードが $myrow に割り当てられ、最初のレコードはフラッシュされます。 while ループを使用すると、ループ本体を 1 回実行してからループ条件を決定できるため、クエリ結果にレコードがない場合でも、プログラムが実行されます。 else{} 部分のプログラムのこの部分の実行を確認したい場合は、SQL ステートメントを SELECT * FROM 従業員 WHERE id=6 に変更するか、他の形式に変更して、この部分にレコードが存在しないようにします。

次に、ループ if-else コードを拡張してページのコンテンツを充実させましょう

ループ ステートメントの使用方法を学びました。これはより実践的な例ですが、その前に、Web フォーム、クエリ パラメータ文字列、およびフォームの GET メソッドと POST メソッドの処理方法を理解しておく必要があります。これについては、少し前の記事「コンテンツ」で説明しました。この部分では、その記事を読むことができます

ここで、クエリ パラメータ文字列を処理する必要があります。ご存知のとおり、パラメータの内容をクエリ パラメータ文字列に書き込む方法は 3 つあります。 2 つ目は、ブラウザのアドレス バーに URL を入力するときにクエリ パラメータを直接追加する方法で、3 つ目は、Web ページのハイパーリンクにクエリ パラメータ文字列を埋め込んで、リンクの内容をスーパーリンクにする方法です。次のように: . ここでは最後の方法を使用します

最初に、従業員をリストするデータベースを再度クエリします。次のプログラムを見てください。そのほとんどはすでに馴染みのあるものです。 );
if ($myrow = mysql_fetch_array($result)) {
do {
printf("
%s %s
n", $PATH_INFO, $myrow["id"], $myrow["first "], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
echo 「申し訳ありませんが、記録が見つかりません。 ";
}
?>
すべての引用符の前にはバックスラッシュがあります。このバックスラッシュは、次の文字をプログラム コードとして扱うのではなく直接表示するように PHP に指示します。また、の使用法にも注意してください。使用されるプログラム内の変数 $PATH_INFO は、プログラム自体でアクセスでき、プログラム自体の名前とディレクトリの場所を保存するために使用されます。これは、$ を使用してプログラム自体を呼び出すためです。 PATH_INFO を使用すると、プログラムが移動された場合でも、このプログラムが他のディレクトリにある場合や、先ほど述べたように、によって生成された Web ページに含まれるハイパーリンクが正しく呼び出されることを確認できます。プログラムはプログラム自体を再度呼び出します。呼び出し時に、クエリ パラメータ文字列に「名前 = 値」などのペア形式が含まれていることを PHP が認識すると、変数と変数名が自動的に生成されます。この機能により、プログラムが初めて実行されるか 2 回目に実行されるかを判断できます。この変数は存在しますか?

この質問に対する答えが分かれば、プログラムを 2 回目に呼び出すときにいくつかの異なる結果を表示できます:


$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
// 個々のレコードを表示
// 単一レコードの内容を表示
if ($ id) {
$result = mysql_query("SELECT * FROM 従業員 WHERE id=$id",$db);
$myrow = mysql_fetch_array($result);
printf("Name: %sn
", $myrow ["first"]);
printf("姓: %sn
", $myrow["last"]);
printf("住所: %sn
", $myrow["address"] );
printf("Position: %sn
", $myrow["position"]);
} else {
// 従業員リストを表示
// 従業員リストを表示
$result = mysql_query("SELECT * FROMemployees",$db);
if ($myrow = mysql_fetch_array($result)) {
// 表示するレコードがある場合はリストを表示します
// レコードがある場合は、 list
do {
printf("%s %s
n", $PATH_INFO,
$myrow["id"] , $myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
// 表示するレコードがありません
// 表示するレコードがありませんecho "Sorry, no records found!";
}
}
?>




プログラムが複雑になってきているので、ここにコメントを追加して説明しました。何が起こったのか調べてください。 // を使用して単一行のコメントを追加することも、/* と */ を使用して大きなコメントを囲むこともできます。

この時点で、私たちは最初の本当に役立つ PHP/MySQL スクリプトを学習しました。次に、Web フォームを追加してデータベースにデータを送信する方法を見ていきます。 >>



4. サーバーにデータを送信します

これで、データベースからデータを読み取るのはそれほど難しくなくなりました。しかし、順番にデータをデータベースに送信するにはどうすればよいでしょうか?実際、これは PHP の問題ではありません。

まず、簡単な表を含むWebページを作成します。







Name:


姓:


住所:


Position:











$PATH_INFOの使い方にも注意してください。最初のレッスンで述べたように、HTML コード内のどこでも PHP を使用できます。また、テーブル内の各要素がデータベース内のフィールドに対応していることにも気づくでしょう。この対応は必須ではありません。これにより、より直観的になり、後でコードを理解しやすくなります。

また、送信ボタンに name 属性を追加したことにも注意してください。このようにして、$submit 変数がプログラムに存在するかどうかをテストできます。その後、ページが再度呼び出されたときに、ページが呼び出されたときにフォームが入力されたかどうかがわかります。

上記の Web ページのコンテンツを PHP プログラムに書き込んでから、プログラム自体を呼び出す必要はないことを指摘しておきます。フォームを表示する Web ページとフォームを処理するプログラムを、都合に応じて 2 つの Web ページ、3 つの Web ページ、またはさらに多くの Web ページに分割できます。ファイルに入れると内容がコンパクトになるだけです。

それでは、ユーザーがフォームに入力した内容を確認するためのコードを追加してみましょう。 PHP が実際にすべての変数をプログラムに渡していることを証明するために、$HTTP_POST_VARS を使用してすべてのクエリ パラメーター変数を表示します。この方法は非常に便利なデバッグ ツールです。すべての変数を表示したい場合は、$GLOBALS を使用します。






if ($submit) {


// フォーム入力を処理

while (list($name, $value) = each($ HTTP_POST_VARS)) {

echo "$name = $value
n";

}

} else{


// フォームを表示

?>



名:


姓:


Address:


位置:







} // end if , if opens

?>





これでプログラムは正常に実行され、フォームに入力された内容を取得してデータベースに送信できるようになります。 。






if ($submit) {

// フォーム入力処理中

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

$sql = "従​​業員に挿入 (最初、最後、住所、役職)
VALUES ('$first','$last','$address','$position')";

$result = mysql_query($ sql);

echo "ありがとうございます! 情報が入力されました。n";

} else{

// テーブルの内容を表示

?>



名:


姓:

住所:


位置:< ;br> ;






} // end if, end of if

? >






これでデータベースにデータが挿入されました。ただし、改善すべき課題はまだたくさんあります。ユーザーが特定のフィールドに入力しなかった場合はどうなりますか?数字が必要なテキストを入力する場合はどうすればよいですか?または、間違って記入した場合はどうすればよいですか?

心配しないでください。段階的に見ていきましょう。 >>

5. データを変更する

このチュートリアルでは、実行する SQL ステートメントを変数 ($sql) に入れ、mysql_query() を使用してデータベース クエリを実行しました。これはデバッグ時に便利です。プログラムに問題が発生した場合は、いつでも SQL ステートメントの内容を表示して、文法上のエラーがないかチェックできます。

データベースにデータを挿入する方法を学びました。次に、データベース内の既存のレコードを変更する方法を学びましょう。データ編集には、データ表示とフォーム入力によるデータベースへのデータ返という 2 つの部分が含まれます。これらの 2 つの部分についてはすでに説明しました。ただし、データの編集は少し異なります。まず、関連するデータをテーブルに表示する必要があります。

まず、最初のレッスンに戻って、Web ページに従業員の名前を表示するプログラム コードを見てみましょう。ただし、今回はデータをテーブルに表示します。プログラムは次のようになります:






$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$ db) );

if ($id) {

//データベースをクエリ

$sql = "SELECT * FROM 従業員 WHERE id=$id";

$result = mysql_query($sql)

$myrow = mysql_fetch_array ($result);

?>



">

Name:">


姓: ">


ア​​ドレス:">


Position:">







} else {

//従業員リストを表示

$result = mysql_query("SELECT * 従業員から",$db);

while ($myrow = mysql_fetch_array($result)) {

printf("%s %s
n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);

}

}

?>






対応するテーブル要素の value 属性にフィールドの内容を書き込んだだけで、これは比較的単純です。さらに一歩進んで、プログラムがユーザーが変更したコンテンツをデータベースに書き戻せるようにします。同様に、「送信」ボタンを使用して、フォーム入力コンテンツを処理するかどうかを決定します。また、使用する SQL ステートメントが若干異なることにも注意してください。






$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

if ( $id) {

if ($submit) {

$sql = "従​​業員の設定を更新します first='$first',last='$last',
address='$address',position='$position' WHERE id=$id";

$result = mysql_query($ sql);

echo "谢谢!データ変更が完了しました";

} else {

// 查询数据库

$sql = "SELECT * FROM 従業員 WHERE id=$id";

$result = mysql_query( $sql);

$myrow = mysql_fetch_array($result);

?>



">

名:">


姓:">


住址:"> ;


职位:">







}

} else {

// 显示员工列表

$result = mysql_query("SELECT * FROM 従業員",$db);

while ($myrow = mysql_fetch_array($result)) {

printf("
%s %s
n", $PATH_INFO,
$myrow["id"], $myrow["first"], $myrow["last"]);

}

}

?>






それがこのプログラムの中に含まれています。

次に、私たちはすべてのすべてを一度に追加して、素晴らしい手順を記述します。
完全なプログラム

この議論が終わる前に、追加、修正、削除の機能を持たせるために、すべてのプログラムを 1 つのプログラムに追加する予定です。






$db = mysql_connect("localhost", "root");

mysql_select_db( "mydb",$db);

if ($submit) {


// 如果没有ID,则我们是在增加记录,否则我们在修改记录

if ($id) {

$sql = "従業員の設定を更新します first='$first',last='$last',
address='$address',position='$position' WHERE id=$id";

} else {

$sql = "INSERT INTO 従業員 (first,last,address,position)
VALUES ('$first','$last','$address','$position')";
}

// 方向データベース库発行SQL コマンド

$result = mysql_query($sql);

echo "记录修改成功!

";

} elseif ($delete) {

// 删除一条记录

$sql = "DELETE FROM 従業員 WHERE id=$id";

$result = mysql_query($sql);

echo "记录删除成功!

";

} else {

// 如果我们还没有按submit按钮,那么执行下面这部分程序

if (!$id) {

// 結果が修正状態态,则显示员工列表 $result = mysql_query("SELECT * FROM従業員",$db);

while ($myrow = mysql_fetch_array($result)) {

printf("%s %s n",
$PATH_INFO, $myrow["id"], $myrow["first" ], $myrow["last"]);

printf("(DELETE)<
br>", $ PATH_INFO, $myrow["id"]);

}

}

?>



ADDレコード






if ($id ) {


// 我们在编辑修正状態态,因数选择一条记录

$sql = "SELECT * FROM 従業員 WHERE id=$id";

$result = mysql_query($sql);

$ myrow = mysql_fetch_array($result);

$id = $myrow["id"];

$first = $myrow["first"];

$last = $myrow["last"];

$address = $myrow["address"];

$position = $myrow["position"];

//ユーザーが編集および変更できる ID を表示します

?>



< ? php

}

?>

名:


姓:


住所:


Position:







}

?> ;



<`/html>


このプログラムは複雑そうに見えますが、実際は難しくありません。プログラムには 3 つの主要な部分があります。最初の if() ステートメントは、「情報の入力」データ送信ボタンが押されたかどうかをチェックします。存在する場合、プログラムは $id が存在するかどうかを確認します。存在しない場合はレコード ステータスを追加し、存在しない場合はレコード ステータスを変更します。

次に、変数 $delete が存在するかどうかを確認します。レコードが存在する場合は、そのレコードを削除します。最初の if() ステートメントでは POST メソッドを使用して送信された変数をチェックしましたが、今回は GET メソッドで渡された変数をチェックしていることに注意してください。

最後に、プログラムのデフォルトのアクションは、従業員リストとテーブルを表示することです。同様に、変数 $id が存在するかどうかを確認したいと思います。存在する場合は、その値に基づいて対応するレコードを取得し、表示します。それ以外の場合は、空のテーブルが表示されます。

これで、私たちが学んだすべてを 1 つのプログラムにまとめました。 while() ループ、if() ステートメントを使用し、基本的な SQL 操作 (SELECT、INSERT、UPDATE、DELETE) をすべて実行しました。さらに、URL やフォーム入力を通じて、異なる Web ページ間で情報を渡す方法も知っています。

3番目のレッスンでは、Webページにインテリジェントな処理機能を追加する方法を学びます。

(編集者: Beyond PHP)
[友達に勧める] [印刷版を表示] 更新日: 2003-03-21 閲覧数: 4419


ユーザーコメント 新しいコメントを追加するにはここをクリックしてください
slg25-Jul-2003 01:46

他はすべて問題ありませんが、
PATH_INFO が定義されておらず、エラーは次のとおりです:
Unknownvariable: PATH_INFO in C:apache2htdocstest3.php on line 9
BobSmith
Can誰かヒントを教えてください、ありがとう! !


yesphp
02-Aug-2003 12:27

私はこの $path_info を使用したことがありません。おそらく APACHE の
サポートが必要かもしれません。 path_info は APACHE 情報の関数で返されるためです。 。


Avalong
25-Dec-2003 10:24






if ($submit){


/ / フォーム入力を処理します

while (list($name, $value) =each($HTTP_POST_VARS)) {

echo "$name =$value
n";

}

} else{


//フォームを表示します

?>



Name:


姓:


住所:


役職:







}// endif, end of if

?>




「情報を入力」をクリックしても、まだ情報ページに入っています。




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート