2017-12-03 11 views
2

ここで少し混乱します。何らかの理由で私の結果が空白に戻ってきています。私は、ユーザーが姓と名字を入力し、ドロップダウンリストで5つの職種を選んでフォームを記入できるようにしようとしています。フォームを送信すると、アクションPHPはその特定のジョブに関する情報をデータベースから取り出し(SQL select文を使用して)、ユーザーにいくつかの結果を表示します。私が抱えている問題は、引き出された変数が空に戻ってくるという結果です。私はこの選択ステートメントを動作させるために6つの異なる方法を試しましたが、それは動かないでしょう。SQLから変数を取得するSelect文from where where PHPドロップダウン選択ボックス

ここに私のフォームがあり、私はdisplayasselect関数を処理してサーバーに接続するPHPを持っています(何らかの理由でここにコードを貼り付けるのが面倒です)...しかし、すべてのことがどんなところでもうまくいくことを確認しています。 PHPの後に私のフォームは次のようになります。

<form class="form-inline" method="get" action="jobTitlePull.php"> 
    <div class="form-group"> 
     <label for="firstName">First Name: </label> 
     <input type="text" name = "fname" id="firstName"/> 
    </div> 
    <div class="form-group"> 
     <label for="lastName">Last Name: </label> 
     <input type="text" name = "lname" id="lastName"> 
    </div> 
     <div class="form-group"> 
     <label for="jobTitle">Job Title: </label> 
     <?php 
      displayAsSelect($list); 
     ?> 
    </div> 
    <input type="submit" class="btn btn-default"></button> 
</form> 

すべてのものがフォームに表示されます。

私が抱いている問題は、ここで私がjobTitlePull.phpと呼んでいる私のアクションPHPから来ています。私のコードは次のとおりです。

<?php 
    $serverName = "xxxxxx"; 
    $userName = "xxxxxx"; 
    $passWord = "xxxxxx"; 
    $database = "xxxxxx"; // last 4 fields purposefully masked. 
    $firstName = $_GET["fname"]; 
    $lastName = $_GET["lname"]; 
    $jobTitle = $_GET["jobName"]; 
    $conn = mysqli_connect($serverName, $userName, $passWord, $database); 
    if (!$conn){ 
     die ("<p>Connection failed: ".mysqli_connect_error()."</p>"); 
    } 
    $queryString = "SELECT jobName, description, posType, basePay FROM Titles WHERE jobName = '$jobTitle'"; 
    $result = $conn->query($queryString); 
    if(!$result){ 
     die ("<p>Query failed</p>"); 
    } 
    $record = mysqli_fetch_assoc($result); //I think my problem MAY lie here?? 
    $desc = $record['description']; //or maybe I'm declaring variables wrong? 
    $pos = $record['posType']; 
    $base = $record['basePay']; 
    echo "<h4>Hello $firstName $lastName Job Title: $jobTitle Job Description: $desc Position Type: $pos Base Pay: $base</h4>"; 
    mysqli_close($conn); 
?> 

select文のフィールドはすべて正しいです。私はWHERE jobName = '$jobTitle'からWHERE jobName = jobNameに変更すると、whileステートメントを使用してループスルーし、データベースのタイトル部分のすべてのフィールドのすべてのデータをプリントアウトできるようになるため、これを知っています。しかし、私はドロップダウンのためのデータが必要です。しかし、私が$jobName$jobTitleに(そして$jobTitleが正しい情報を引っ張っていると)同値化すると、$desc$pos、$ baseの変数があるecho文の部分で空白の結果が出ます。

助けてください。

おかげ

+0

データをフェッチするときにオブジェクト指向インターフェイスを使用しようとしましたか?つまり、$ record = $ result-> fetch_assoc();また、SQLインジェクションを防ぐために[prepared statement](https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection)を使用して調べる必要があります。また、あなたがすでにそれを知っているなら、 'jobName'を取得する理由は何ですか? – Cyclonecode

+0

あなたの問題は、 '$ _GET'配列から得られたデータに空白などが含まれていると思います。$ jobTitle = trim($ _ GET ['jobName']);'。 'displayAsSelect()'関数がどのように実装されているかを示すことができれば素晴らしいでしょう。 – Cyclonecode

+0

displayAsSelect()関数を表示します。 – Mihai

答えて

0

私はあなたの現在のクエリに少し異なるアプローチを取ること、そしてまた、あなたがコードを処理する方法に、あなたの安全のアプローチのいくつかを検討し提案します。かなりのeveryrhing

ファーストは同じまま:

$serverName = "xxxxxx"; 
$userName = "xxxxxx"; 
$passWord = "xxxxxx"; 
$database = "xxxxxx"; // last 4 fields purposefully masked. 

はあなたが準備Statemtnsを扱っているとき、それが容易になりますOOPメソッドへの接続を変更し

$conn = new mysqli($serverName, $userName, $passWord, $database); 
if (!$mysqli->connect_error){ 
    die ("<p>Connection failed: ". $mysqli->connect_error() ."</p>"); 
} 

にいくつかのフィルタを追加するには、変数

  1. $_GETを使用しているため、URLをデコードすることが重要ですあなたがそれを掲示しているときにあなたのブラウザが変数をエンコードする場合には、
  2. htmlentitiesは、htmlタグがなく、コードが実行されないようにします。

これは次のようになります。そして、あなたは、クエリにあなたが持っている今、あなた

if($stmt = $mysqli->prepare($queryString)) { 
    //bind the parameter of `jobName` 
    $stmt->bind_param('s', $jobName); 
    // execute the query 
    $stmt->execute(); 

    // get all of the results 
    $results = $stmt->get_result(); 
    // fetch the results in an associative array 
    $row = $result->fetch_assoc(); 

    // close stmt connection 
    $stmt->close(); 
} else { 
    $error = array(
     'is_error' => true, 
     'error' => 'There was a problem preparing the SQL' 
    ); 

    print_r($error); 
} 

を準備する必要があり

// let's start changing your query here 
// use prepared statements 
$queryString = "SELECT jobName, description, posType, basePay FROM Titles WHERE jobName = ?"; 

:それでは、いくつかの重要な変更を見てみましょう

$firstName = urldecode(htmlentities($_GET["fname"])); 
$lastName = urldecode(htmlentities($_GET["lname"])); 
$jobTitle = urldecode(htmlentities($_GET["jobName"])); 

$rowの配列内のすべてのレコードをあなたが必要とすることをするためにそれを使用してください。

print_r($row); 

乾杯して、データが存在することを確認できます。

関連する問題