2013-01-23 21 views
17

私はAJAXオートコンプリートを使用しようとしています.2つの言語を相乗効果で動作させるためにいくつか問題があります。複数のパラメータを持つPHP isset()

私はしかし、別の$ _POSTを追加することによって、私はライン上のエラー5.

<?php 

require_once '../Configuration.php'; 
if (isset($_POST['search_term'] . $_POST['postcode']) == true && empty ($_POST['search_term'] . $_POST['postcode']) == false) { 
$search_term = mysql_real_escape_string($_POST['search_term'] . $_POST['postcode']); 
$query = mysql_query("SELECT `customer_name`,`postcode` FROM `Customers` WHERE `customer_name` LIKE '$search_term%' "); 
while(($row = mysql_fetch_assoc($query)) !== false) { 
    //loop 
    echo '<li>',$row['customer_name'] . $row['postcode'] '</li>'; 
} 
} 


?> 

それはこれを投げている理由について何かアドバイスを取得するには、以下のスニペットが動作するだけ1 $ _POSTを持つすべてのissetsを置き換えますエラーは非常に高く評価されるだろう。ありがとう。

私はちょうど最初のロジックを取得しようとしています、私はmysqliのを使用する必要があります理解:)

のJs:

Primary.js:

$(document).ready(function() { 
$('.autosuggest').keyup(function() { 

    var search_term = $(this).attr('value'); 
    var postcode = $_GET['postcode']; 
    //alert(search_term); takes what is typed in the input and alerts it 
    $.post('ajax/search.php', {search_term:search_term, postcode:postcode},  function (data) { 
     $('.result').html(data); 
     $('.result li').click(function() { 
      var result_value = $(this).text(); 
      $('.autosuggest').attr('value', result_value); 
      $('.result').html(''); 

     }); 
    }); 
}); 
}); 
+1

一つ 'isset'でPHP isset()のためのPHPのOR (||)論理演算子を使用してください。ところで 'isset == true'は冗長です。 – dualed

答えて

48

なければなりません変数の参照ではなく、式(あなたの場合は連結)。しかし、あなたは一緒にこのようなグループ、複数の条件ができます。

if (isset($_POST['search_term'], $_POST['postcode'])) { 
} 

これはisset()すべての引数が設定されているとnullが含まれていない場合にのみtrue戻ります。

isset($var)isset($var) == trueは同じ効果があるので、後者はやや冗長です。

更新

あなたの表現の2番目の部分は、このようempty()を使用しています。

empty ($_POST['search_term'] . $_POST['postcode']) == false 

これは、上記と同様の理由で間違っています。

isset($_POST['search_term'], $_POST['postcode']) && 
    $_POST['search_term'] && 
    $_POST['postcode'] 

か、同等の式を使用して:その時点ですでに変数が設定されているかどうかをチェックする必要がありますので、あなたがそうのような完全な式をショートカットすることができますので、実際には、あなたは、ここにempty()を必要としない

をあなたが入力を管理するために filter機能を使用することを検討すべきである
!empty($_POST['search_term']) && !empty($_POST['postcode']) 

決勝思考

$data = filter_input_array(INPUT_POST, array(
    'search_term' => array(
     'filter' => FILTER_UNSAFE_RAW, 
     'flags' => FILTER_NULL_ON_FAILURE, 
    ), 
    'postcode' => array(
     'filter' => FILTER_UNSAFE_RAW, 
     'flags' => FILTER_NULL_ON_FAILURE, 
    ), 
)); 

if ($data === null || in_array(null, $data, true)) { 
    // some fields are missing or their values didn't pass the filter 
    die("You did something naughty"); 
} 

// $data['search_term'] and $data['postcode'] contains the fields you want 

Btwでは、送信された値のさまざまな部分をチェックするようにフィルタをカスタマイズできます。

+0

メモ - PHP 5.5.0以降、 'empty()'も明示的に式をサポートしています。 – Boaz

+0

あなたは私にとってはるかに進んだことがあります。私は文字通りPHPを学んでいます。ありがとう –

6

isset()のパラメータがあるべきカンマ記号(,)で区切られ、ドット記号(.)で区切られていません。現在のコードでは、変数を別々のパラメータとして渡すのではなく、単一のパラメータに連結します。

ように、元のコードは統一string値として変数を評価:正しいフォーム変数として個別に評価しながら

isset($_POST['search_term'] . $_POST['postcode']) // Incorrect 

isset()にパラメータ(複数も可)

isset($_POST['search_term'], $_POST['postcode']) // Correct 
6

あなただけの必要があります。

if (!empty($_POST['search_term']) && !empty($_POST['postcode'])) 

isset && !emptyは冗長です。

1

複数のオペレータ 例えば配列インデックスあたり

if (isset($_POST['room']) || ($_POST['cottage']) || ($_POST['villa'])) { 

} 
+0

これは間違っていて、 '$ _POST ['room']'が設定されていて残りがそうでない場合には通知を生成します。単一の 'isset'でこれらをすべてラップし、最後の2つの変数を引数として渡す必要があります。あるいは、それらを独自の' isset'で囲む必要があります。 –

関連する問題