2016-05-05 1 views
0

入力フィールドの値をクエリパラメータに解析して、同じフォーム内の選択フィールドの値を取得できますか?クエリパラメータへの入力フィールドの値を解析します。

コードは以下の通りです:

<FORM ACTION="login.php" METHOD=get> 

    <label for="email">Email: </label> 
    <input id="email" name="email" type="text" ><br> 

    <label for="pin">Password: </label> 
    <input id="pin" name="pin" type="password" ><br> 

    <label for="company">Company</label> 
      <select name="Company" id="company"> 
      <option>Select Company:</option> 
      <?php 
       $conn= new mysqli($servername,$username,$password,$db); 
       if ($conn->connect_error) { 
        die("Connection failed: " . $conn->connet_error); 
       } 
       $email = isset($_GET['email'])?$_GET['email']:""; 
       $sql="select company from accounts WHERE email = '$email';"; 
       $results = mysqli_query($conn, $sql); 
       if ($results->num_rows > 0){ 
        while ($row = mysqli_fetch_array($results)){ 
         echo "<option value=\"company1\">" .$row['company'] . "</option>"; 
        } 
       } 
      ?> 
      </select> 

    <input class="submit_btn" type="submit" value="Login"></input><br> 
    <a id="cust-nopin" href="javascript:;"><p class="text_centered_pass">Click here if you don't have a password</p></a> 

</FORM> 

はできないということですか?

+0

達成したいことは何ですか?私はあなたを理解できません。あなたの質問を精緻にしてください。 – TipuZaynSultan

+0

select id = "company"のselectオプションを設定するクエリのパラメータとしてinput id = "email"の値を使用したいと思います。 – Den

答えて

0

このシナリオでは、あなたの最善の策は、Ajaxのだろう。

フォームのページ:今すぐ

<form action="login.php" method=get> 

    <label for="email">Email: </label> 
    <input id="email" name="email" type="text" ><br> 

    <label for="pin">Password: </label> 
    <input id="pin" name="pin" type="password" ><br> 

    <label for="company">Company</label> 
    <select name="Company" id="company"> 
     <option value="">Select Company:</option> 
    </select> 

    <input class="submit_btn" type="submit" value="Login"></input><br> 
    <a id="cust-nopin" href="javascript:void(0);"><p class="text_centered_pass">Click here if you don't have a password</p></a> 

</form> 

jQueryのパート:

$(function() { 
     $(document).on("change, blur, keydown", "#email", function() { 
      $.ajax({ 
       url: 'path/to/ajaxfile.php', 
       type: 'GET', 
       dataType: 'json', 
       data: {email: $(this).val()}, 
      }) 
      .done(function(response) { 
       if (response.status) { 
        var html = '<option value="">Select Company:</option>' + response.html; 
        $("#company").html(html); 
       } else { 
        console.log(status.message); 
       } 
      }) 
      .fail(function(data) { 
       alert("Something went wrong please try again later."); 
       console.log(data.responseText); 
      }); 

     }); 
    }); 

そしてパス/に/ ajaxfile.php:

$conn = new mysqli($servername,$username,$password,$db); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connet_error); 
} 

if (! empty($_GET['email'])) { 
    $email = mysqli_real_escape_string($conn, $_GET['email']); 
    $sql = "SELECT company FROM accounts WHERE email = '$email'"; 
    $results = mysqli_query($conn, $sql); 
    if ($results->num_rows > 0){ 
     $html = ""; 
     while ($row = mysqli_fetch_array($results)){ 
      $html .= '<option value="' . $row['company'] . '">' . $row['company'] . '</option>'; 
     } 
     echo json_encode(array("status" => true, "html" => $html)); 
    } else { 
     echo json_encode(array("status" => false, "message" => "There is no company with that email address.")); 
    } 
} else { 
    echo json_encode(array("status" => false, "message" => "No email is there to lookup.")); 
} 

これは、あなたが達成するのを助ける必要があります何をしようとしていますか...

私はそれが助けてくれることを願っています。

+0

Worked Perfectly!ご協力ありがとうございました。 – Den

0

もちろん、入力フィールドの値をクエリのパラメータとして使用できます。これは非常に一般的なシナリオです。

$email変数を一重引用符で囲んでいるため、クエリが機能しません。だから、これは動作するはずです:

$sql="select company from accounts WHERE email = $email"; 

(末尾のセミコロンは必要ありません)。

しかし

それはSQL Injectionにあなたのコードが脆弱になりますように、データベースを照会するために、ユーザー入力を使用するこの方法は、悪い習慣です。あなたがこのようなデータベースを照会する必要がありPrepared Statements

を使用することをお勧めしますSQLインジェクションに対して保護するために

$sql="select company from accounts WHERE email = ?"; 
$stmt = $conn->prepare($sql); 
$stmt->bind_param("s", $email); 
$stmt->execute(); 
+0

この脆弱性についてのコメントありがとうございます。私は現在書かれている方法を編集します。 – Den

関連する問題