Php 为什么我收到此$\u会话变量的未定义索引错误

Php 为什么我收到此$\u会话变量的未定义索引错误,php,pdo,mysqli,Php,Pdo,Mysqli,我不知道为什么我会收到这个错误,但它一直说我在下面代码的第35行有一个未定义的索引:AudioFile: <?php ini_set('display_errors',1); session_start(); ?> <body> <?php // connect to the database include('connect.php'); /* check connection */ if (mysqli_connect_errno

我不知道为什么我会收到这个错误,但它一直说我在下面代码的第35行有一个未定义的索引:AudioFile:

<?php

 ini_set('display_errors',1); 


session_start();

?>

<body>

<?php

 // connect to the database
 include('connect.php');

  /* check connection */
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
  }

  unlink("AudioFiles/" . $_SESSION['AudioFile']);  

$delete = $mysqli->prepare('DELETE FROM Audio WHERE AudioId = ?'); 
$delete->bind_param("i",$_SESSION['lastAudioID']); 
$delete->execute(); 

$deleteaud = $mysqli->prepare('DELETE FROM Audio_Question WHERE AudioId = ?'); 
$deleteaud->bind_param("i",$_SESSION['lastAudioID']); 
$deleteaud->execute(); 


?>


</body>
</html>

我不太明白为什么我会收到这个索引错误。有人知道我为什么会收到这个错误吗

我在下面的audioupload.php页面中定义了$\u会话变量

        <?php

ini_set('session.gc_maxlifetime',12*60*60);
ini_set('session.gc_divisor', '1');
ini_set('session.gc_probability', '1');
ini_set('session.cookie_lifetime', '0');
require_once 'init.php'; 


session_start();

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<?php
 ini_set('display_errors',1); 
 error_reporting(E_ALL);

 // connect to the database
 include('connect.php');

  /* check connection */
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
  }

$result = 0;

    if ((($_FILES["fileAudio"]["type"] == "audio/wav")
|| ($_FILES["fileAudio"]["type"] == "audio/wma")
|| ($_FILES["fileAudio"]["type"] == "audio/mp3")
|| ($_FILES["fileAudio"]["type"] == "audio/m3u")
|| ($_FILES["fileAudio"]["type"] == "audio/iff")
|| ($_FILES["fileAudio"]["type"] == "audio/mid")
|| ($_FILES["fileAudio"]["type"] == "audio/m4a")
|| ($_FILES["fileAudio"]["type"] == "audio/mpa")
|| ($_FILES["fileAudio"]["type"] == "audio/aif")
|| ($_FILES["fileAudio"]["type"] == "audio/wa"))
&& ($_FILES['fileAudio']['size'] > 0))
  {

if( file_exists("AudioFiles/".$_FILES['fileAudio']['name'])) {
    $parts = explode(".",$_FILES['fileAudio']['name']);
    $ext = array_pop($parts);
    $base = implode(".",$parts);
    $n = 2;

    while( file_exists("AudioFiles/".$base."_".$n.".".$ext)) $n++;
    $_FILES['fileAudio']['name'] = $base."_".$n.".".$ext;

    move_uploaded_file($_FILES["fileAudio"]["tmp_name"],
    "AudioFiles/" . $_FILES["fileAudio"]["name"]);
    $result = 1; 

}
    else
      {
      move_uploaded_file($_FILES["fileAudio"]["tmp_name"],
      "AudioFiles/" . $_FILES["fileAudio"]["name"]);
      $result = 1;

  }

    $audiosql = "INSERT INTO Audio (AudioFile) 
    VALUES (?)";

        if (!$insert = $mysqli->prepare($audiosql)) {
      // Handle errors with prepare operation here
    }

        //Dont pass data directly to bind_param store it in a variable
$insert->bind_param("s",$aud);

//Assign the variable
$aud = 'AudioFiles/'.$_FILES['fileAudio']['name'];

 $insert->execute();

        if ($insert->errno) {
          // Handle query error here
        }

        $insert->close();

 $lastAudioID = $mysqli->insert_id;   

$_SESSION['lastAudioID'] = $lastAudioID; 
$_SESSION['AudioFile'] = $_FILES["fileAudio"]["name"]; 

 $sessid =  $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '');         

$sessionquery = "SELECT SessionId FROM Session WHERE (SessionName = ?)";

    if (!$sessionstmt = $mysqli->prepare($sessionquery)) {
  // Handle errors with prepare operation here
  echo __LINE__.': '.$mysqli->error;
}

// Bind parameter for statement
$sessionstmt->bind_param("s", $sessid);

// Execute the statement
$sessionstmt->execute();

            if ($sessionstmt->errno) 
            {
                // Handle query error here
                echo __LINE__.': '.$sessionstmt->error;
                break 1;
            }

// This is what matters. With MySQLi you have to bind result fields to
// variables before calling fetch()
$sessionstmt->bind_result($sessionid);

// This populates $optionid
$sessionstmt->fetch();

    $sessionstmt->close();      

 $audioquestionsql = "INSERT INTO Audio_Question (AudioId, SessionId, QuestionId)  
    VALUES (?, ?, ?)"; 

     if (!$insertaudioquestion = $mysqli->prepare($audioquestionsql)) { 
      // Handle errors with prepare operation here 
       echo "Prepare statement err audioquestion"; 
    } 

$qnum = (int)$_POST['numaudio'];

$insertaudioquestion->bind_param("iii",$lastAudioID, $sessionid, $qnum); 

    $insertaudioquestion->execute(); 

                if ($insertaudioquestion->errno) { 
          // Handle query error here 
        } 

        $insertaudioquestion->close(); 

      }

?>

  <script language="javascript" type="text/javascript">window.top.stopAudioUpload(<?php echo $result; ?>, '<?php echo $_FILES['fileAudio']['name'] ?>');</script>  

</body>
</html>

window.top.stopAudioUpload(,'');

未定义索引表示$\u会话中不存在键“lastAudioID”。您可以通过以下方式进行检查:

if(array_key_exists('lastAudioID', $_SESSION)) {
  // Key exists
}
似乎您没有在代码中设置键(或设置不正确)

编辑:
这可能是因为您在已经输出了某些内容之后才包含了文件。在输出任何内容之前,请尝试包含该文件。我很确定就是这样。

是否在任何地方定义了会话['AudioFile']?这意味着会话变量不包含索引
AudioFile
。您在哪里设置“AudioFile”的会话变量(
$\U会话['AudioFile']=…;
)?我已在另一个包含代码的页面或在上面更新的问题中定义了会话变量我已在另一个包含代码的页面或在上面更新的问题中定义了会话变量,因此请尝试var_dump($_session)看看它是否被保存。好吧,这很奇怪,但是在谷歌浏览器中它保存了它,所以我没有得到索引错误,但是在firefox、safari和opera中。它没有保存它,因此未定义索引注意,我没有得到的是,我已经为上传图像和视频做了相同的代码,只是稍微更改了变量名,它们工作得很好,所以我不知道为什么这个会出现问题。这可能是因为您在输出了一些内容后包含了您的文件。在输出任何内容之前,请尝试包含该文件。我敢肯定就是这样。