私のウェブサイトには1つの選択ボックスと1セットのラジオボタンがあります。私はradiobuttonを変更した後にselectboxの値を保持したい。2つの投稿の後にselectの価値を保持する方法は?
「:未定義のインデックス:checkGameライン上の11
お知らせ:未定義のインデックス:checkGameライン13上のご注意」を私は選択ボックスで値を保つことができたが、私は他のラジオボタンを押したとき、私はこのエラーを取得しますここで
は私のコードです:
私のウェブサイトには1つの選択ボックスと1セットのラジオボタンがあります。私はradiobuttonを変更した後にselectboxの値を保持したい。2つの投稿の後にselectの価値を保持する方法は?
「:未定義のインデックス:checkGameライン上の11
お知らせ:未定義のインデックス:checkGameライン13上のご注意」を私は選択ボックスで値を保つことができたが、私は他のラジオボタンを押したとき、私はこのエラーを取得しますここで
は私のコードです:
はしばらくの間、コードを見ると、SQLインジェクションを防ぐための必要性を言及した後、私はその後、時間を費やし次のコードを一緒に盛り込んでみてください。コードは最初にprepared statement
の使い方を示していましたが、最終的には以下のようになりました。これらのどれもテストされていないので、ここに文法エラーがある可能性があります。
は二つの形式を有していると私の心にはポイントが見えた - そう、彼らはここに統合されているとsort
ラジオボタンは、ゼロの値を持つ隠しフィールドを持っている - ここでの考え方は、何のラジオボタンがあり、その後選択されていない場合送信された値は常に0になります。これはPOST配列を処理する場合に便利です。
各ゲームの名前は、処理が行われる前に配列に定義されています。POSTされた値が有効であることを確認できます。また、SELECT
メニューオプションとRADIO
ボタンを動的に生成できます。変数('game' & 'sort'
)は、どのボタンが押されたかにかかわらず、以前に提出された値を記憶するという本来の目的を可能にします。
<?php
session_start();
/*
include database connection script or define here
*/
$dbhost = 'localhost';
$dbuser = 'root';
$dbpwd = 'xxx';
$dbname = 'xxx';
$db = new mysqli($dbhost, $dbuser, $dbpwd, $dbname);
if(!isset($_SESSION['game']))$_SESSION['game']=false;
if(!isset($_SESSION['sort']))$_SESSION['sort']=false;
$games=array(
'Any',
'Garrys Mod',
'Counter Strike Global Offensive',
'Counter Strike Source',
'Team Fortress 2'
);
$sorts=array(
0,
'Players Descending',
'Players Ascending',
'Max Players Descending',
'Max Players Ascending'
);
$svrconn=array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(isset($_POST['submit'], $_POST['checkGame'], $_POST['playersSort']) && $_POST['checkGame'] != 'Any'){
try{
$game = filter_input(INPUT_POST, 'checkGame', FILTER_SANITIZE_STRING);
if(!in_array($game, $games)) throw new Exception('Unknown game');
$_SESSION['game']=$game;
/* create the sql statement with a placeholder `?` */
$sql = 'select `ipaddress`, `port` from `servers` where `game`=?';
/* Attempt to create the `prepared statement` */
$stmt = $db->prepare($sql);
/* statement was successfully created */
if($stmt){
/* bind a variable to the placeholder & execute query */
$stmt->bind_param('s', $game);
$result=$stmt->execute();
/* Yay! There are results to process */
if($result){
$stmt->store_result();
$stmt->bind_result($ip, $port);
while($rs=$stmt->fetch()){
$svrconn[]=array('address'=>$ip, 'port'=>$port);
}
$stmt->free_result();
$stmt->close();
$db->close();
} else {/* bogus - no results */
throw new Exception('No results');
}
} else {
throw new Exception('sql query failed to prepare');
}
}catch(Exception $e){
exit($e->getMessage());
}
}
/*
Because of the hidden field with a value of `0` this will not be invoked
unless a radio button is selected.
*/
if(!empty($_POST['playersSort'])){
try{
$sort=filter_input(INPUT_POST, 'playersSort', FILTER_SANITIZE_STRING);
if(!in_array($sort, $sorts)) throw new Exception('Unknown sort');
$_SESSION['sort']=$sort;
/*
presumably the array ($svrconn ~ originally $serverConnectionArray or $serverArray?)
is used elsewhere in the page to display content???
apply filter/sorting algorithms
*/
switch(strtolower($sort)){
case 'players descending':
uasort($svrconn, function($a,$b) {
return $b['Players'] <=> $a['Players'];
});
break;
case 'players ascending':
uasort($svrconn, function($a,$b) {
return $a['Players'] <=> $b['Players'];
});
break;
case 'max players descending':
uasort($svrconn, function($a,$b) {
return $b['MaxPlayers'] <=> $a['MaxPlayers'];
});
break;
case 'max players ascending':
uasort($svrconn, function($a,$b) {
return $a['MaxPlayers'] <=> $b['MaxPlayers'];
});
break;
}
}catch(Exception $e){
exit($e->getMessage());
}
}
}
?>
<!doctype html>
<html>
<head>
<meta charset='utf-8' />
<title>Games n stuff</title>
</head>
<body>
<form method='post'>
<fieldset>
Game:
<select name='checkGame'>
<?php
$html=array();
foreach($games as $value){
$selected=trim(strtolower($_SESSION['game']))==trim(strtolower($value)) ? 'selected=true' : '';
$html[]="<option value='$value' $selected>$value";
}
echo implode(PHP_EOL, $html);
?>
</select>
<input type='submit' name='submit' value='Filter' />
</fieldset>
<fieldset>
<?php
$html=array();
foreach($sorts as $value){
$checked=(trim(strtolower($_SESSION['sort']))==trim(strtolower($value))) ? 'checked' : '';
/*
having a hidden field means `playersSort`
will always be present in POSTed data
(unless someone is deliberately hijacking the form)
*/
if(empty($value))$html[]="<input type='hidden' name='playersSort' value='$value' />";
else $html[]="<input type='radio' name='playersSort' value='$value' $checked>$value";
}
echo implode(PHP_EOL, $html);
?>
<input type='submit' name='submit' value='Sort' />
</fieldset>
</form>
</body>
</html>
うわー!あなたの時間と労力にとても感謝します。私はこれに関連して自分のコードを改善します。ありがとう!! – Leyer
問題は、この行です:
<input type="submitSort" name="submit" value="Sort" />
あなたはそれがsubmit
あるべきときにはname
フィールドを使用して提出の名前を変更することができますsubmitSort
の種類にあなたの送信ボタンを設定しているが、タイプはsubmitボタンはず
submit
にする必要があります
私も$_SESSION
を使用して助言する。ここポスト
は簡単な例である後のものを保存するためにvaribles:
それはDに最善の方法ではないかもしれませんOそれ、その概念を示すために(任意の補償を編集してください)
$_SESSION['game'] = "";
if(isset($_POST['submit']) && $_POST['checkGame'] != 'Any')
{
$_SESSION['game'] = $_POST['checkGame'];
}
if ($_SESSION['game'] == "1") { $gameCOD = "selected"; } else $gameCOD = "";
if ($_SESSION['game'] == "2") { $gameBAT = "selected"; } else $gameBAT = "";
<form method="post">
<select name="checkGame">
<option value="1">Any</option>
<option value="2" <?php echo $gameCOD; ?> > COD </option>
<option value="3" <?php echo $gameBAT; ?> > BATTLEFIELD </option>
</select>
<input type="submit" name="submit" value="Filter"/>
</form>
大丈夫です。最初のものと同じでなければならないのですか?私はそれを試みたが、それを押すと私のサイトが壊れる。私は " 通知:未定義のインデックス:checkGameのG:\ XAMPP \ htdocs \ PHPソース - クエリマスター\例\ list.php 11行目 注意:未定義のインデックス:checkGame G:\ XAMPP \ htdocs \ PHP-Source-Query-master \ Examples \ list.php 13行目」より多くのコードで投稿を更新します。ありがとう! – Leyer
あなたのコードがちょっと混乱しているので、それは難しいと言えます:) – Jesus
Haha okey:DちょうどPHPで始まったので恐ろしいです。 – Leyer
2番目のフォームは何も影響しないようです。少なくとも、フォームが送信されたときに処理されるコードは共有されていません。あなたは、私が思ったように、ただ一つの形を持つことができました!また、SQLはSQLインジェクションに対して脆弱です。 – RamRaider
2番目のフォームのコードを追加しました。この2つの形式の理由は、コードを別の場所に置いて、もう一度考えてみたいということでした。私はおそらくまだ1つのフォームでそれを持つことができます...ありがとう!この脆弱性を修正するために何ができますか? – Leyer
私はちょうど1つのフォームを使用したときすべてのうまくいった。私は遅れていた。午前3時にコード化すべきではありません。乾杯!私はまだ脆弱性について聞くのが大好きです。 – Leyer