打开页面时出现通知错误

时间:2012-01-24 00:43:04

标签: php javascript

希望这个问题有道理。如果在文本框中输入的房间号在数据库中,我想使用javascript显示消息。如果它在数据库中,则不显示任何内容(""),如果它不在数据库中,则显示消息"房间无效"。

问题是当我打开存储文本框的页面时,它会出现一条通知说:

  

注意:未定义的索引:roomChosen在第287行的/web/stud/Mobile_app/create_session.php

现在我相信它说明此错误的原因是因为在打开此页面之前没有发布任何内容。这是假设发布在文本框中输入的房间号,但显然房间号的文本框在同一页面上,因此它不能在页面打开之前发布。我想要的是用户这样做:

步骤1:输入文本框中的房间号码

第2步:点击提交按钮

步骤3:检查文本框中的房间号是否在数据库中

步骤4:根据房间号码是否在数据库中显示消息

所以我想知道的是如何存储php编码,以便在点击提交按钮后检查文本框中的房间号是否在数据库中?

下面是房间号码文本框和提交按钮的html:

//textbox where room number is entered in

<p><strong>10: Room:</strong> <input type="text" id="room" name="roomChosen" roomthere="<?php echo $room_there; ?>" />

//message displayed if room number is in database or not

<br/><span id="roomAlert"></span></p>  


// submit button 

<p><input class="questionBtn" type="button" value="Prepare Questions" name="prequestion" onClick="myClickHandler()"/></p>

下面是php检查文本框中的房间号是否在数据库中:

$room_there = true;

$roomresult = mysql_query( "SELECT Room FROM Room WHERE Room = " . (int) $_POST['roomChosen']);

if( mysql_num_rows( $roomresult ) == 0 ) $room_there = false;

下面是单击时处理提交按钮的处理程序:

function myClickHandler(){
    if(validation()){
        showConfirm();
    }
}

房间号码文本框的Javascript验证:

var roomTextO = document.getElementById("room"); 

var errRoomMsgO = document.getElementById("roomAlert");

          if (roomTextO.value == ""){
          errRoomMsgO.innerHTML = "Please Enter in a Room Number";
          isDataValid = false;

            }else if (!trimmedRoomText.length){
          errRoomMsgO.innerHTML = "Please Enter in a Room Number"; 
          isDataValid = false;  

      }else if(roomTextO.getAttribute("roomthere") == false){
          errRoomMsgO.innerHTML = "This Room is Invalid"; 

        }else{
                errRoomMsgO.innerHTML = ""; 
            }

2 个答案:

答案 0 :(得分:1)

在完成所有逻辑之前,只需检查值是否存在。

if (!empty($_POST['roomChosen'])) {
    // Check database, and output whatever you need here
}

此外,虽然您现在通过将用户输入转换为int来保证安全,但您可能会学习使用PDO进行准备好的查询,因此您不会意外地打开安全漏洞。

答案 1 :(得分:1)

这是一个PHP问题,您可以在第287行的create_session.php中找到它。

什么是hapenning是你使用数组而不是初始化它。

例如,我可以输入以下内容来抛出此错误:

$arr = '';
$arr[ 'notgoingtohappen' ] = 'arr var is a string here, not an array';

它也往往发生在多维数组上。例如:

$arr = array();
$arr[ 'notgoingtohappen' ][ 'error' ]; 'the first part here is ok, second is not.'

要更正任一实例,只需调用var即可。例如,从最后一个示例中,如果在第2行之前调用,则以下行将解决该问题:

$arr[ 'notgoingtohappen' ] = array();

当使用带有$variables的多维数组作为键时,有时您不知道数组是否已初始化。在这些情况下,请执行以下操作以防止压缩任何数组:

if( !is_array( $arr[ 'notgoingtohappen' ] ) ) {
     $arr[ 'notgoingtohappen' ] = array();
}