php-elseifが機能しない
これは意味がありません。URLパラメータの値に従って投稿を並べ替えようとしていますが、elseifステートメントが機能していません。
これは、クエリに別のWHERE句を追加する関数です。ステートメントの問題が発生しているだけのMYSQLエラーはありません。
function sort_where($where)
{
if (isset($_GET['sort'])) {
$sort = $_GET['sort'];
if ($sort = "up") {
$where .= " AND $sort > 1";
}
elseif ($sort = "down") {
$where .= " AND $sort > 1";
}
}
return $where;
}
クエリは最終的に次のようになります
$query = "SELECT * FROM posts WHERE something = $something AND $sort > 1";
ifステートメントが機能する場合、elseifは無視されます。 ifステートメントに$sort = down
がある場合は関係なく、 up > 1
の投稿が表示されます。
答え :
解決策:
実際には、2つの内側のifのどちらも正しく機能していません。
=
ではなく==
を使用する必要があります。 1つの等号は代入を意味し、真の値に代入すると、if条件では常にtrueと評価されます。そのため、elseifは決して発生しないように見えます。
WHERE
句も修正する必要があるかもしれませんが、私には意味がありません(並べ替えていますが、{-code-4と比較しています) }
列とdown
列?)。または、それがテーブルの設計方法かもしれません...
コメントに基づいて、次のSQL WHERE
句を試して、正しい投稿が得られるかどうかを確認してください。
if($ sort == "up"){
$where。="ANDup> down";
}
elseif($ sort == "down"){
$where。="ANDdown> up";
}
答え :
解決策:
シングル=変数1=変数2を意味します
Double==は比較を意味します
また、このコードを使用する場合は、$ _ GETステートメントの前後にmysql_real_escape_string()を配置するか、ユーザー入力があるものやユーザーがSQLインジェクションを使用できるようにしてください。
例: mysql_real_escape_string($ _ GET ['sort'])であり、複数回使用している場合は、必ず変数を使用してください
修正されたコードは次のとおりです;)
function sort_where($where)
{
if (isset($_GET['sort'])) {
$sort = $_GET['sort'];
if ($sort == "up") {
$where .= " AND $sort > 1";
}
elseif ($sort == "down") {
$where .= " AND $sort > 1";
}
}
return $where;
}
答え :
解決策:
2つの問題:
if ($sort = "up") {
=
は代入演算子です。同等性をテストする場合は、ここで = =
を使用する必要があります。
また、両方の条件の本体:
if ($sort = "up") {
$where。="AND$sort> 1";
}
elseif($sort = "down"){
$where。="AND$sort> 1";
}
同一です。同じ基本文字列をクエリに追加するつもりはないと思いますか? (付与された $sort
はどちらの場合も異なりますが、とにかくそれが意味するのであれば、文字列をハードコードするだけではどうでしょうか。これは本当に紛らわしい読みであり、正確に何を伝えるのは難しいです。あなたの意図はです。)
答え :
解決策:
if ($sort = "up")
elseif ($sort = "down")
あるべきです
if ($sort == "up")
elseif ($sort == "down")
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。