Php 将数组与会话或POST一起使用

Php 将数组与会话或POST一起使用,php,arrays,Php,Arrays,我试图使用php的$\u POST特性或$\u SESSION特性从上一页获取基于表单数据的数组。每当我尝试使用$\u会话时,我都会收到错误:“脚本试图执行一个方法或访问一个不完整对象的属性。”下面是我尝试执行的一个想法。任何帮助都会很好,请提前感谢 <?php // initialize a session include 'hoteldetails.php'; session_start(); ?> <html>

我试图使用php的$\u POST特性或$\u SESSION特性从上一页获取基于表单数据的数组。每当我尝试使用$\u会话时,我都会收到错误:“脚本试图执行一个方法或访问一个不完整对象的属性。”下面是我尝试执行的一个想法。任何帮助都会很好,请提前感谢

     <?php

    // initialize a session
    include 'hoteldetails.php';
    session_start();

    ?>

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        <center><h1>Room Reserves</h1>
        <h2>Search</h2></center>
        <h3>Login <br/> Sign up</h3>
        </head>
        <body>



        <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">

            Please enter City, State or Zipcode:<input type="text" name="location">

            <input type="date" name="startdate" value="startdate"> 

             to <input type="date" name="enddate" value="enddate"> 

            <br/>

            Minimum price:<select name="minimumprice">
                <option value="0">No Minimum</option>
                <option value="49">$50</option>
                <option value="99">$100</option>
                <option value="199">$200</option>
            </select> 

            Maximum price:<select name="maximumprice">
                <option value="9999">No Maximum</option>
                <option value="101">$100</option>
                <option value="201">$200</option>
                <option value="301">$300</option>

            </select> 



            Beds:<select name="beds">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
            </select> 

            Bathrooms:<select name="baths">
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
            </select> 

            <br/>

            <input type="submit" name="Search" value="Search">



        </form>

    <?php 

    try{
    $dbconn= pg_connect("host=localhost port=5432 dbname=roomReserves user=superUser password=F3Poriginal");
    }
    catch(PDOException $e){
          echo $e->getMessage();    
    }

    if(isset($_POST['Search'])){
        if($_POST['startdate']==null || $_POST['enddate']==null || $_POST['location']==null){
            echo "One or more fields are empty, please try again.";
        }

    else{
    $query = "SELECT * FROM hotellist WHERE zip=75007"; 
    $rs = pg_query($dbconn, $query) or die("Cannot execute query: $query\n");
  //  $hotelsdetail=array();
     $_SESSION['hotelsdeets']=array();
    $hotelpos=0;

    while ($row = pg_fetch_row($rs)) {
        $serverInfo= explode(" ",$row[2]);
        $hotelsdb= pg_connect("host=$serverInfo[0] port=$serverInfo[1] dbname=$serverInfo[2] user=$serverInfo[3] password=$serverInfo[4]");
        $queryresult = "SELECT * FROM hotelinfo where beds= CAST('".$_POST['beds']."' AS INT) AND baths= CAST(baths='".$_POST['baths']."' AS INT) AND price BETWEEN CAST('".$_POST['minimumprice']."' AS INT) AND CAST('".$_POST['maximumprice']."' AS INT)";
        $hotelrs = pg_query($hotelsdb, $queryresult) or die("Cannot query hotel info: $queryresult\n");
        $matchesquery=false;

        while($hotelrow=pg_fetch_row($hotelrs) && $matchesquery==false){
            $matchesquery=true;        
            $date = $_POST['startdate'];   
            $endDate= $_POST['enddate'];
                $hotelroomrs=pg_fetch_row($hotelrs);       
                $hotelroom=$hotelroomrs[0];
                $hotelprice=$hotelroomrs[1];

            while ($date < $endDate  && $matchesquery==true && $hotelroomrs[0]!=null) {
                $isavail="SELECT * FROM hotelinfo where roomnumber= CAST('".$hotelroom."' AS INT) AND date= CAST('".$date."' AS date)";
                $roomexists=pg_query($hotelsdb, $isavail);
                $roomdets=pg_fetch_row($roomexists);
                if($roomdets[0]==null){
                    $matchesquery=false;
                }            
            $date = date ("Y-m-d", strtotime("+1 day", strtotime($date)));           

            }   
            if($matchesquery==true && $hotelroomrs[0]!=null){
             $_SESSION['hotelsdeets'][$hotelpos]=new hoteldetails();
             $_SESSION['hotelsdeets'][$hotelpos]->sethotelinfo($row);
             $_SESSION['hotelsdeets'][$hotelpos]->setprice($hotelprice);
            $hotelpos++;
            }
            }     
            pg_close($hotelsdb);    
        } 
        header("Location: ./searchresults.php");    
      }   
    }

    pg_close($dbconn); 

    ?>



<?php

session_start();

?>

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    <center><h1>Room Reserves</h1>
    <h2>Results</h2></center>
    <h3>Login<br/>Sign up</h3>
    </head>
    <body>
<?PHP

//$searchinfo->$hotelsdetail[0]->sethotelinfo(1);


echo  $_SESSION['hotelsdeets'][0]->gethotelinfo()[1];

?>
   </body>
</html>


class hoteldetails {
private $hotelinfo;
private $price;

public function sethotelinfo($hotelinfo){
    $this->hotelinfo=$hotelinfo;
}

public function setprice($price){
    $this->price=$price;
}

public function gethotelinfo(){
    return $this->hotelinfo;
}

public function get($var){
    return $this->{$var};
}

}

客房预订
搜寻
登录
注册
首先,您需要打开和关闭php标记:

<?PHP
    session_start();
?>
    <html>
        <head>

        </head>
        <body>

<?PHP
$colors=array();
array_push($colors, "green");
array_push($colors, "white");
array_push($colors, "yellow");
array_push($colors, "black");

$_SESSION['color']=$colors;
?>

        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <input type="submit" name="Search" value="Search">
        </form>

<?php
if(isset($_POST['Search'])){
header("Location: page2.php");
}

?>


我在哪里错过了关闭标签?这只是一个例子,所以我实际上没有尝试编译它。我更新了注释作为答案。你能把给你带来麻烦的代码贴出来吗?为什么要以如此复杂的方式创建阵列?最后一件事,它到底在哪里给了你错误(你能按字面意思粘贴错误文本吗)?因为它是一个从表单结果中提取的对象数组。我会在几分钟后发布,谢谢!然后阅读下面的建议:
注意:如果使用array_push()向数组添加一个元素,最好使用$array[]=因为这样就不会有调用函数的开销刚刚发布,但目前不是很干净(友好警告)。