詳細については投稿メタを使用する必要がありますが、それを行いたい場合は、SQL からデータを取得して表示する完全な方法を次に示します。
必須: PHP および MySQL を実行するサーバー。Web 経由で使用またはテストしていない場合は、PC に WAMP をインストールするか、Mac で Apache を有効にするか、Linux マシンに Apache をインストールする必要があります。必要なスキル:
MySQL データベースとテーブルの作成 基本的な HTML: フォームとフォーム要素の作成 基本的な PHP: 変数の作成 echo ステートメント
実際のアプリケーションを作成することで、このトピックを調べます。私たちの目標は、車両 (車) の MySQL データベースにアクセスし、メーカーおよび/または販売/リースの可用性によって動的に選択することです。MySQL データベースを作成する
サーバー上に MySQL データベースを作成する方法については、すでによく知っているはずです。特定のヘルプについては、他のチュートリアルやリファレンスを参照してください。良い情報源は w3schools.com です。
データベースに「myDatabase」などの名前を付けます。このデータベースのセットアップに使用されたユーザー名と使用されたパスワードを追跡します。多くの場合 localhost であるサーバー名も必要になりますが、サーバー/Web ホストによって異なります。不明な点がある場合は、ドキュメントを確認してください。新しいテーブルを作成する
このデータベース内に新しいテーブルを作成します。車両に名前を付けたり、その他の名前を付けたりします。ここでは、5 つのフィールドと 7 つの行を含むテーブルを作成します。次のように 5 つのフィールドを作成しました。
field: increment, Type: int(1), Extra: auto_increment, Primary Key
field: make, Type: varchar(15), Index
field: model, Type: varchar(15)
field: year, Type: year(4)
field: availability, Type: varchar(5), Index
「make」および「availability」フィールドは索引付けされており、検索がより効率的になります。このサイズのテーブルの場合はそれほど重要ではありませんが、大きなテーブルの場合はパフォーマンスが向上します。フィールドにデータを挿入します。この例では、テーブルは次のようになります。
インクリメント メーカー モデル年 在庫状況
1 フォード フィエスタ 2011 販売
2 フォード マスタング 2011 販売
3 フォード マスタング 2010 リース
4 フォード フィエスタ 2010 リース
5 シボレー ボルト 2011 販売
6 シボレー ボルト 2011 リース
7 シボレー ボルト 2010 リース
ウェブページを作成する
Web ページを作成し、名前を付けて、.html または .php のいずれか好きな形式で保存します。このページには、メーカー (この例ではフォードまたはシボレー) および/または在庫状況 (車両が販売されているかリースされているか) に基づいて、ユーザーが車の検索を絞り込むことができるラジオ ボタン付きのフォームが含まれます。 . ラジオボタンのあるフォームを作成する
これは単純なフォームで、2 つのラジオ ボタン グループがあります。1 つは車両メーカーを選択し、もう 1 つは車両の可用性を選択します。フォームには送信ボタンがあり、アクションとして php ページ 'vehicles.php' に投稿します。CSSで好きなようにスタイリングできます。コードは次のとおりです。
<form name="input" action="vehicles.php" method="post">
<fieldset>
<legend>Make you are looking for:</legend>
<input type="radio" name="make" value="ford" /> Ford
<input type="radio" name="make" value="chevy" /> Chevy
<input type="radio" name="make" value="all" checked /> All
</fieldset>
<fieldset>
<legend>Looking to:</legend>
<input type="radio" name="availability" value="sale" /> Buy
<input type="radio" name="availability" value="lease" /> Rent
<input type="radio" name="availability" value="all" checked /> All
</fieldset>
<input type="submit" value="Submit" />
</form>
フォームを見てみましょう
この送信されたフォームは、ファイル 'vehicles.php' に値を送信してトリガーします。これは、このフォームでクリックされたアイテムを処理し、MySQL データベースにクエリを実行して要求された情報を返すファイルです。
最初のラジオ ボタン グループは、データベース テーブルの同じフィールドに対応するように「make」という名前が付けられています。選択できる値は、データベース テーブルの「make」フィールドのデータと同じです。つまり、データベースには「ford」と「chevy」のデータがあるため、ボタンには大文字と小文字を区別する同じ値を使用します。「すべて」ボタンの値は「すべて」で、後で説明するように特殊なケースです。2 番目のラジオ ボタン グループは、データベース テーブルの同じフィールドに対応するように「availability」という名前が付けられ、値はデータベース テーブルの「availability」フィールドのデータと同じです (「sale」、「lease」、および特殊なケース「すべて」)。
このフォームは「vehicles.php」に投稿するので、次はそれを作成しましょう。PHPファイル
新しい空の php ファイルを作成し、「vehicles.php」という名前を付けます。このページ/ファイルは、いくつかのことを達成する必要があります。
ラジオ ボタンから値を受け取る データベースに接続する ラジオ ボタンから渡された値に基づいてデータベースをクエリする 正しい情報を出力する
PHP を書く
データベースにアクセスするには、ユーザー名、パスワード、データベース名、サーバー名、およびデータベース テーブル名が必要です。ユーザー名、パスワード、およびデータベース名を php 変数に配置することから始めましょう。
$username="myUserName";
$password="myPassWord";
$database="myDatabaseName";
この情報を独自の別の php ファイル (たとえば「config.php」という名前) に配置することで、これを少し安全にすることができます。次に、メインの php ファイルにインクルードまたはリクエストすることでアクセスします。ルート フォルダーの外に配置すると、別のセキュリティ レイヤーが追加されます。
ob_start();
require("config.php");
ob_end_clean();
出力バッファリング (ob) を開始、終了、消去 (クリーン) するコマンド内にラップすると、いくつかのセキュリティ問題も増加します。セキュリティ ニーズに最適に対応するには、PHP リソースを参照してください。リクエスト用のいくつかの変数を作成します
次に、リクエストとして使用する変数をいくつか作成します。これらは、フォームの 2 つのラジオ ボタン グループから送信される値になります。したがって、最初の '$req' は、'make' ボタン グループから取得した値と等しくなります。2 番目の $req2' は、'availability' ラジオ ボタン グループから取得した値と等しくなります。
$req=$_REQUEST['make'];
$req2=$_REQUEST['availability'];
データベースに接続する
次に、データベースに接続できます。開いている接続は、ある時点で閉じる必要があります。PHP のこれまたはその他の詳細についてブラッシュアップする必要がある場合は、他の PHP ドキュメントおよびマニュアルを参照してください。
mysql_connect("localhost",$username,$password);
mysql_select_db($database) or die( "Unable to select database");
「localhost」は、データベースが配置されているサーバーの名前です。これは、サーバーによって異なります。多くのサーバーでは、「localhost」として配置されています。その他は、「sql28e8d34f.carrierzone.com」などの特定のアドレスになります。特定の設定については、Web ホストまたはサーバー管理者にお問い合わせください。
接続に問題がある場合は、「データベースを選択できません」というメッセージが表示されます。作業するテーブルを選択してください
単純なシナリオでは、どのデータベース テーブルで作業するかを指定するだけです。この例では、'vehicles' テーブルから作業しています。このテーブルの選択 (すべての行を通過) する単純なコードは次のようになります。
$query="SELECT * FROM vehicles";
私たちがやりたいことは、それよりも少し複雑です。確認してみましょう。最初に、どの「make」が選択されたかを確認します。「ford」が選択された場合、「make」フィールドに「ford」が入力されている行のみを考慮します。同様に、「chevy」が選択された場合、値が「chevy」の「make」フィールドのみを選択します。ただし、「すべて」を選択した場合は、すべての行を検討する必要があります。
同様に、「購入」または「リース」ボタンが選択された場合は、「購入」または「リース」のいずれかの行のみが表示され、「すべて」が選択された場合はすべての行が考慮されます。
1 つのフィールドから選択するのもかなり簡単です。たとえば、'ford' の行のみを考慮するには、フィールド 'make' が 'ford' である vehicle テーブルからすべての行を SELECT するクエリを実行できます。それは次のようになります。
$query="SELECT * FROM vehicles WHERE make='ford'";
どの「make」が選択されるかわからないため、値をハードコーディングすることはできません。フォームで選択されたボタンから渡された値を使用したいと考えています。この値を「$req」として保存したことを思い出してください。したがって、このクエリを次のように作成できます。
$query="SELECT * FROM vehicles WHERE make='$req'";
そんなに悪くない。ただし、make と可用性の両方を確認したいので、'$req' を使用して 'make' を検索し、'$req2' を使用して可用性を検索するクエリを使用できます。
$query="SELECT * FROM vehicles WHERE make='$req' AND availability='$req2'";
わかった。それでも悪くない。しかし、ボタンの 1 つまたは両方が「すべて」に選択された場合はどうなるでしょうか。基本的に、これら 2 つのラジオ ボタン グループを使用すると、4 つの異なるシナリオが発生する可能性があります。
特定のメーカーが選択され、特定の可用性が選択された 「メーカー」に対して「すべて」が選択され、特定の可用性が選択された 特定のメーカーが選択され、「可用性」に対して「すべて」が選択された 両方に対して「すべて」が選択された'make' と 'availability'
おそらくこれを処理する他の方法があります。これを一連の「if/else」条件として行うことにしました。4 つの条件を処理するコードは次のとおりです。
if ($req!="all" && $req2!="all") $query="SELECT * FROM vehicles WHERE make='$req' AND availability='$req2'";
else if($req=="all" && $req2!="all" ) $query="SELECT * FROM vehicles WHERE availability='$req2'";
else if($req!="all" && $req2=="all" ) $query="SELECT * FROM vehicles WHERE make='$req'";
else if($req=="all" || $req2=="all" ) $query="SELECT * FROM vehicles";
これらの条件はすべて、値が「all」に設定されているかどうかを確認しているだけであることに気付くかもしれません。
if(&req=='all')
またはそれが何か他のものとして設定されたかどうか(したがって、「すべて」と等しくない):
if(&req!='all')
クエリを終了して接続を閉じる
次の 4 行の標準コードを使用して、クエリを終了し、接続を閉じます。そこから、変数 '$result' に格納されている要求した情報を含む行と、変数 '$num' に格納されているこの情報が含まれる行数の両方を学習します。また、接続が閉じられていることに注意してください。詳細については、PHP のマニュアルを参照してください。
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_query($result);
mysql_close();
この情報の使用
この情報を実際に使用できるようになりました。必要なのは、要求されたデータを含む行を反復 (ループ) し、これを出力 (php 用語で「エコー」) することです。これを行うには、「for」ループを使用します。これを行うために「while」ループを使用する人もいます。当面のケースに応じて、2 つの違いは微妙な場合もあれば深刻な場合もあります。この場合、それは問題ではないので、どちらでも機能します。
$i=0;
for ($i; $i < $num; $i++){
$f12=mysql_result($result,$i,"model");
$f13=mysql_result($result,$i,"year");
$f14=mysql_result($result,$i,"availability");
2 行目の開始中括弧はまだ閉じていないことに注意してください。間もなく閉店します。説明
変数 '$i' が作成され、その初期値が整数ゼロに設定されます。'for' ループは $i が 0 に等しいところから始まり、$i がクエリからの正しい行の数である '$num' の値より小さい間続きます。各反復の後、$i は 1 ($i++) ずつ増加します。変数 $f12 は、値 $i を持つクエリの行の 'model' の値に設定されます。変数 $f13 は、値 $i を持つクエリの行の「年」の値に設定されます。変数 $f14 は、値 $i を持つクエリの行の 'availability' の値に設定されます。
これをページに印刷
あとは、この情報をページに出力するだけです。これを行うには、3 つの変数をそれぞれの間にスペースを含めて連結 (結合) し、3 番目の変数の後に改行を追加します。コードの 2 行目は、閉じ中かっこで「for」ループを閉じます。
echo $f12." ".$f13." ".$f14." ";
}
完全な html コードは次のとおりです。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
</head>
<body>
<form name="input" action="vehicles.php" method="post">
<fieldset>
<legend>Make you are looking for:</legend>
<input type="radio" name="make" value="ford" /> Ford
<input type="radio" name="make" value="chevy" /> Chevy
<input type="radio" name="make" value="all" checked /> All
</fieldset>
<fieldset>
<legend>Looking to:</legend>
<input type="radio" name="availability" value="sale" /> Buy
<input type="radio" name="availability" value="lease" /> Lease
<input type="radio" name="availability" value="all" checked /> All
</fieldset>
<input type="submit" value="Submit" />
</form>
</body>
</html>
「vehicle.php」の完全なコードは次のとおりです。
<?php
ob_start();
require("config.php");
ob_end_clean();
$req=$_REQUEST['make'];
$req2=$_REQUEST['availability'];
mysql_connect("localhost",$username,$password);
mysql_select_db($database) or die( "Unable to select database");
if ($req!="all" && $req2!="all") $query="SELECT * FROM vehicles WHERE make='$req' AND availability='$req2'";
else if($req=="all" && $req2!="all" ) $query="SELECT * FROM vehicles WHERE availability='$req2'";
else if($req!="all" && $req2=="all" ) $query="SELECT * FROM vehicles WHERE make='$req'";
else if($req=="all" || $req2=="all" ) $query="SELECT * FROM vehicles";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_query($result);
mysql_close();
$i=0;
for ($i; $i < $num; $i++){
$f12=mysql_result($result,$i,"model");
$f13=mysql_result($result,$i,"year");
$f14=mysql_result($result,$i,"availability");
echo $f12." ".$f13." ".$f14."<br />";
}
?>
データベースのパスワードなどを含む「config.php」の完全なコードは次のとおりです。
<?php
$username="myUserName";
$password="myPassWord";
$database="myDatabaseName";
?>