簡體   English   中英

php isset()上的變量未定義索引提交

[英]php variable undefined index on isset() submit

很抱歉,如果這是一個愚蠢的問題,但是我被這個問題困擾了幾個小時,我得到的最接近的答案是來自這篇文章,但問題尚未解決。

我從一個簡單的表單中的復選框獲取數據。 表單操作將用戶帶到下一頁,我使用以下方法從復選框中獲取值

$event = $_Post['matchId'];
var_dump($event) confirms values has been received correctly(see image)

在此處輸入圖片說明

$ event的值是一個數組,因此我正在執行以下操作

foreach($event as $key => $eventId)
//some code

所有人都在forloop中工作,但是,一旦我單擊提交,isset()函數就會被觸發,但會出現錯誤:

未定義索引:matchId

forloop的參數無效

任何想法我在這里做錯了,如果您需要更多信息,請告訴我

更新請求的isset代碼

    $event= $_POST['matchId'];
var_dump($event);
foreach($event as $key => $eventId){
$sql = "Select * FROM events WHERE event_id = $eventId";
$result = mysql_query($sql);

$i=0;//counter
while($row=mysql_fetch_array($result)){

    $team1 = $row['team1'];
    $team2 = $row['team2'];
    $id[$i]= $row['event_id']; 

    echo'<h3>'.$team1.' VS '.$team2.'</h3>';
    echo'<select name="id[]">';
            echo'<option value="'.$row['team1'].'">'.$team1.'</option>';
            echo'<option value="'.$row['team2'].'">'.$team2.'</option>';
            echo'</select>';    

            echo'By <select name="score[]">';
            echo'<option value="1">1</option>';
            echo'<option value="2">2</option>';
            echo'<option value="3">3</option>';
            echo'<option value="4">4</option>';
            echo'<option value="5">5</option>';
            echo'<option value="6">6</option>';
            echo'<option value="7">7</option>';
            echo'<option value="8">8</option>';
            echo'<option value="9">9</option>';
            echo'<option value="10">10</option>';
            echo'<option value="11">11</option>';
            echo'<option value="12">12</option>';
            echo'<option value="13">13</option>';
            echo'<option value="14">14</option>';
            echo'<option value="15">15</option>';
            echo'<option value="16">16</option>';
            echo'<option value="17">17</option>';
            echo'<option value="18">18</option>';
            echo'<option value="19">19</option>';
            echo'<option value="20">20</option>';
            echo'</select>';    
        $i++;
}//while
}//for
echo'</legend></fieldset>';
echo'<input type="submit" class="buttono" value="Submit" name="submit" />';
echo'</form>';
echo'</div><!--news-->';
if(isset($_POST['submit'])){    
$x=0;
foreach($_POST['id'] as $key => $winner){
    $score = $_POST['score'][$key];
    var_dump($score);
    $winnerb = $id[$key];
    echo($winner."-".$winnerb);
    $sql="INSERT INTO picks(member_nr,event_id,pick,score)
            VALUES('$userId','$winnerb','$winner','$score')";
            mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
}//for
}//end isset

如果未設置任何復選框,則不會設置$_POST['id'] ,從而導致該警告。

還要注意,除非您在輸入元素的name屬性中顯式設置$key值,否則您不能依賴$key值。 var_dump()的圖像表明您沒有這樣做。

您也有一個SQL注入問題。 您應該切換到PDO或mysqli並使用帶有綁定變量的准備好的語句。

錯誤在這部分上-

$event= $_POST['matchId'];
var_dump($event);
foreach($event as $key => $eventId){
$sql = "Select * FROM events WHERE event_id = '$event'";
$result = mysql_query($sql);
.....

$_POST['matchId']不存在。 您應該為此添加支票-

if (!empty($_POST['matchId'])) { //fetch & display data }
else { //display some error or something like this }

$event事件為空,因為缺少$_POST['matchId'] 因此,它給出了關於foreach的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM