2016-09-16 19 views
0

私のデータベースからのデータを表示するMySQLクエリがあります。URLに基​​づいて異なるMySQLクエリを実行する

$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')"; 

このクエリは、MySQLデータベースのデータをページのHTMLテーブルに表示します。 URLに基​​づいてこの$sqlクエリに小さな変更を加える必要があります。これは可能ですか?

理想的には、それはのようなものを動作します:

もし/またはindex.phpを、これを実行します。

$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')"; 

/london.php場合は、これを実行します。そこ

$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE Studio = 'London' date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')"; 

1ページあたりのクエリのわずかな変更であり、結果はStudio = 'London'と表示されます。これは私がlondon.phpにロンドンに関係する結果しか表示できないようにするためです。

これを達成するにはどうすればよいでしょうか?ご協力ありがとうございました。ここで

は私の完全なスクリプトです:

<?php 

require_once 'config.php'; 

// create connection 
$conn = new mysqli($currentConfig['host'], $currentConfig['user'],    $currentConfig['pass'], $currentConfig['name']); 
// check connection 
if ($conn->connect_error) { 
die('Connection failed: '.$conn->connect_error); 
} 

$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m') AND Studio = 'Splash London'"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
// output data of each row 
    while ($row = $result->fetch_assoc()) { 
    $wip = $row['WIP']; 
    $total_billing = $row['TotalBilling']; 

    // US national money format 
    setlocale(LC_MONETARY, 'en_US'); 

    // echo data into HTML table 
    echo 
    '<tbody>'.'<tr>'.'<td>'. money_format('%(#10n',$total_billing) . "\n" .'</td>'.'<td>'. money_format('%(#10n',$wip) . "\n" .'</td>'; 
    } 
} else { 
echo 'No results'; 
} 
$conn->close(); 
+0

ifステートメントを作成する – rak007

答えて

1

たぶん、あなたは$_SERVER['REQUEST_URI']を使用することができます。

たとえば、完全なリンクがある場合:http://www.mypage.com/index.php

$_SERVER[HTTP_HOST]

$_SERVER[REQUEST_URI]は "/index.php"

だから、あなたは行うことができました "www.mypage.com" があります。

if($_SERVER[REQUEST_URI] == "/london.php"){ 
    $sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE Studio = 'London' date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')"; 
} 
else{ 
    $sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')"; 
} 
+0

これは機能しますが、複数のファイル(都市ごとに1つ)を作成する必要があります。 DRY(あなた自身を繰り返さないでください)のために、gviewの答えが良いです。 –

+0

@BrianSchroeter私は実際には完全に同意します。 OPがちょうどこのようなものを探していた場合、私はちょうど "明らかで直接的な解決策"を出しました。しかし、gviewの答えは正しいものです。 – nanocv

3

はい、これはサーバサイドスクリプトでできる最も基本的な種類のものです。

まず、複数のスクリプトは必要ありません。 index.phpはうまくいくでしょう。

スタジオのパラメータを追加します。

ので、必要に応じて、あなたが使用することになり、次のいずれか

http://../index.php 

または

http://..index.php?studio=london 

それはこの利点があることをこの時点で明らかにされるべきであることをあなたは以外のデータベース内の他のスタジオを持っている場合ロンドン、このコードはまだ動作します。あなたのスクリプトの先頭に

if (isset($_GET['studio']) { 
    $studio = $_GET['studio']; 
} else { 
    $studio = ''; 
} 

今あなたが渡されたURLパラメータがあったかどうかに基づいて、別のクエリを実行することができます。

if ($studio == '') { 
    // $sql = ... 
} else { 
    $sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE Studio = '$studio' date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')"; 
} 

このように、このコードは簡単にSQLインジェクションすることができます。クエリの実行方法の詳細は、使用しているクライアントライブラリによって異なります。文字列に変数を置き、その変数をバインドする代わりに、mysqliまたはPDOとパラメータのバインディングを使用する必要があります。例えば

$sql = "SELECT SUM(InvoiceAmount) AS TotalBilling,SUM(ClientCostToDate) AS WIP FROM Estimates WHERE Studio = :studio date_format(InvoiceDate, '%Y-%m')=date_format(now(), '%Y-%m')"; 

は、より多くの詳細については、mysqliのやPDOのための適切なマニュアルエントリーを見てみましょう。

関連する問題