2017-02-26 8 views
0

現在、私はユーザーが2つの値(この場合は2つの郵便番号)を入力できるようにするいくつかのコードを作成しています。コードと等しいかまたはコード間の値。たとえば、それぞれ123456と234567が開始郵便番号と終了郵便番号として入力された場合、その範囲の郵便番号のみを持つ顧客が返されます。ユーザーフォームの定義済みの値から顧客リストを返すphp/sql form

SQLコマンドで直接指定した範囲でハードコーディングすることで、SQLでこれを実行できました。しかし、私はユーザーが入力する変数でこれを行いたいと思います。私はそれが最後のフェッチコマンドで行われると信じています。

私は私が欲しいものを得るために##と## BETWEEN WHEREジップを使用することができ、最初の$のSQL文で
$SQL = "SELECT LastName, FirstName, Address1, City, State, Zip FROM Customers ORDER BY LastName ASC;"; 
try { 
    $sth = $conn->prepare($SQL); 
    $sth->execute(); 
} catch (PDOException $e) { 
    echo "Error selecting customer records: " . $e->getMessage(); 
    die; 
} 

echo "Query excecuted successfully. <br />"; 

if($sth->rowCount()==0) { 
    echo "No records returned. <br />"; 
    die; 
} else { 
    echo $sth->rowCount() . " records returned. <br /> <br />"; 
} 

while($result = $sth->fetch()){ 
    //in an array, refer to column with string inside brackets ['rid'] 
    echo "LastName: " . $result['LastName'] . "<br />"; 
    echo "FirstName: " . $result['FirstName'] . "<br />"; 
    echo "Address1: " . $result['Address1'] . "<br />"; 
    echo "City: " . $result['City'] . "<br />"; 
    echo "State: " . $result['State'] . "<br />"; 
    echo "Zip: " . $result['Zip'] . "<br /> <br />"; 
} 

が、私は、ユーザー定義の変数を使用したいです。それについてどうすればいいのですか?私はかなり広範囲に見えましたが、適切な用語を使用してはいけません。

+1

[あなたのサイトの唯一のユーザーではありません] –

+0

このリンクをご利用いただきありがとうございます![https://phpdelusions.net/programming#reporting_errors]私は自分の慣行をより良いものに変えるために最善を尽くします。 – Sparky

答えて

2

使用プレースホルダ(?)と->execute()で暗黙的にそれらにユーザー入力をバインド:

$zipFrom = $_POST['zipFrom']; 
$zipTo = $_POST['zipTo']; 
// TODO: validate input data 

$SQL = "SELECT LastName, FirstName, Address1, City, State, Zip 
     FROM Customers 
     WHERE Zip BETWEEN ? AND ? 
     ORDER BY LastName ASC"; 
$sth = $conn->prepare($SQL); 
$sth->execute([$zipFrom, $zipTo]); 

あなたはまた、あなたのクエリを読みやすくするために名前のプレースホルダを使用することができます。

$SQL = "SELECT LastName, FirstName, Address1, City, State, Zip 
     FROM Customers 
     WHERE Zip BETWEEN :zip_from AND :zip_to 
     ORDER BY LastName ASC"; 
$sth = $conn->prepare($SQL); 
$sth->execute([ 
    'zip_from' => $zipFrom, 
    'zip_to' => $zipTo 
]); 

あなたは置くことができますコードをtry-catch-blockに追加します。しかし、エラーメッセージをダンプしたいだけの場合は、何もしないでください。

+0

助けてくれてありがとう!これは私がやらなければならないと思っていたことのようなものですが、それを検索するための正しい言葉を思いつくことはできませんでした。私は両方の例を使用して、読みやすいように2番目の例が気に入っていることを発見しました。しかし、最後の部分では、エラーメッセージを完全に削除するだけですか?それは一種ではありませんが、エラーが発生したときに私のエラーを理解するのに多かれ少なかれ、一般的なエラーメッセージよりも簡単なので、私には分かりません。まだ学んでいて、提案にはオープンです!もう一度ありがとう! – Sparky

+0

@ Sparky「エラーメッセージを完全に削除するだけですか? - はい。 "一般的なエラーメッセージ"には、ファイル名と行番号だけでなく、スタックトレース(関数呼び出しトレース)も含まれるため、コードの修正箇所を簡単に見つけることができます。 「壊れた」コードは、エラーがトリガーされた場所であるとは限りません。 IMHOエラー/例外を処理する最良の方法は、グローバルハンドラを書くことです。 [set_error_handler()](http://php.net/manual/en/function.set-error-handler.php)を見てください。 –

関連する問題