AJAXオートコンプリートで作業しようとしていますが、2つの言語を相乗効果で動作させるのに問題があります。
すべてのissetsを1つの$ _POSTのみに置き換えると、以下のスニペットが機能しますが、別の$ _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>';
}
}
?>
このエラーがスローされる理由についてのアドバイスは大歓迎です。ありがとう。
私は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('');
});
});
});
});
isset()
へのパラメーターは、式(ユーザーの場合は連結)ではなく、変数参照でなければなりません。ただし、次のように複数の条件をグループ化できます。
if (isset($_POST['search_term'], $_POST['postcode'])) {
}
これは、allisset()
への引数が設定され、true
を含まない場合にのみ、null
を返します。
isset($var)
とisset($var) == true
は同じ効果があるため、後者はやや冗長です。
更新
式の2番目の部分では、次のようにempty()
を使用します。
empty ($_POST['search_term'] . $_POST['postcode']) == false
これは上記と同じ理由で間違っています。実際、ここではempty()
は必要ありません。その時までに変数が設定されているかどうかを既にチェックしているので、次のように完全な式をショートカットできます。
isset($_POST['search_term'], $_POST['postcode']) &&
$_POST['search_term'] &&
$_POST['postcode']
または、同等の式を使用します。
!empty($_POST['search_term']) && !empty($_POST['postcode'])
最終的な考え
filter
関数を使用して入力を管理することを検討する必要があります。
$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
ところで、送信した値のさまざまな部分をチェックするためにフィルターをカスタマイズできます。
isset()
のパラメーターは、コンマ記号(,
)ドット記号(.
)。現在のコードは、変数を個別のパラメーターとして渡すのではなく、単一のパラメーターに連結します。
したがって、元のコードは変数を統一されたstring
値として評価します。
isset($_POST['search_term'] . $_POST['postcode']) // Incorrect
正しいフォームは変数としてそれらを個別に評価しますが:
isset($_POST['search_term'], $_POST['postcode']) // Correct
あなただけが必要です:
if (!empty($_POST['search_term']) && !empty($_POST['postcode']))
isset && !empty
は冗長です。
複数の演算子を使用してphp OR (||)
に対してphpのisset()
論理演算子を使用します。
if (isset($_POST['room']) || ($_POST['cottage']) || ($_POST['villa'])) {
}