0

わかりました、私は映画のオンライン予約システムを行っていることを説明します...ユーザーは映画を選択できます --> 映画 --> ショーのページに到達しました

これは、特定の映画や映画館の番組を検索するコードです。

<?php
require('classes/show_class.php');
$show=new show($_GET["cinema_id"]);  //CAN I MAKE 2 GETS LIKE THIS?? MAYBE THIS
$show=new show($_GET["movie_id"]);   // IS THE ERROR

$showcinemas = $show->get_show_cinemas();


    echo '<table border="1">';
    echo '<tr><td align="center"><b>CINEMA<b></td></tr>';

foreach ($showcinemas as $show)
{
    $show_id = $show['show_id'];
    $show_datetime = $show['show_datetime'];
    $cinema_id = $show['cinema_id'];
    $movie_id = $show['movie_id'];

    echo '<tr>';
    echo '<td>';
    echo "<a href='show_theater.php?cinema_id={$cinema_id}&movie_id={$movie_id}&show_id={$show_id}'>" . $show_datetime . '</a>';
    echo '</td>';
    echo '</tr>';

}
    echo '</table>';
?>

このページの出力は次のとおりです: CINEMA 2013-03-03 14:00:00 <-- これは cinema_id=1&movie_id=1&show_id=1 ですが、movie_id=2&cinema_id=5 を使用しました

私は今それを明確にしたことを願っています...ありがとう

これは show_class.php です

public function __construct()
{


    $query = mysql_query(
            "SELECT *
            FROM movie, cinema
            "
        );

    $results = mysql_fetch_assoc($query);

    $this->movie_id = $results['movie_id'];
    $this->movie_name = $results['movie_name'];
    $this->movie_category = $results['movie_category'];
    $this->cinema_id = $results['cinema_id'];
    $this->cinema_name = $results['cinema_name'];
}


public function get_show_cinemas()
{
    $query = mysql_query(
        "SELECT show.show_datetime, show.show_id, cinema.cinema_id, movie.movie_id
    FROM `cinema`
    JOIN `theater` ON `theater`.`cinema_id` = `cinema`.`cinema_id`
    JOIN  `show` ON  `show`.`theater_id` =  `theater`.`theater_id` 
    JOIN `movie` ON `movie`.`movie_id` =  `show`.`movie_id`
    WHERE  `cinema`.`cinema_id` = {$this->cinema_id} AND `movie`.`movie_id` = {$this->movie_id} "
    );

    while( $cinema =  mysql_fetch_assoc( $query ) )
    {
        $results[] = $cinema;
    }

    return $results;        
}
4

2 に答える 2

3

ショー クラスは一度だけ初期化する必要があります。他のパラメーター (cinema_id と movie_id) をクラスのメンバー変数にするか、クラス コンストラクターに渡してみてください。

  class show {
    public function __construct($cinema_id, $show_id) { //do work }
  }

また

  class show {
     public $cinema_id, $show_id;
     public function __construct() { }
     public function setCinemaId($cinema_id)
     {
       $this->cinema_id = $cinema_id;
     }
     public function setShowId($show_id)
     {
       $this->show_id = $show_id;
     }
     public function fetchShowCinemas()
     {
       if(!empty($this->show_id) && !empty($this->cinema_id)) { //do work }
     }
  }

それから

  $show = new show();
  $show->setCinemaId($_GET['cinema_id']);
  $show->setShowId($_GET['show_id']);
  $showCinemas = $show->fetchShowCinemas();
于 2013-04-03T17:53:44.967 に答える
1

Show クラスのコンストラクターを更新して、値をパラメーターとして受け入れるか、クラスがインスタンス化された後にこれらの変数を設定する関数を含める必要があります。

class Show {
    public $cinemaId;
    public $movieId;

    public function __construct($cinemaId, $movieId)
    {
        this->cinemaId = $cinemaId;
        this->movieId = $movieId;
    }

    public function __construct() { }

    public function setCinemaId($cinemaId)
    {
      $this->cinemaId = $cinemaId;
    }

    public function setMovieId($movieId)
    {
      $this->movieId= $movieId;
    }

    public function getShows() 
    {
       // do work  
    }
}

SQL インジェクションを防ぐために値をエスケープする必要があります。

$cinemaId = mysql_real_escape_string($_GET['cinema_id'])
$movieId = mysql_real_escape_string($_GET['movie_id'])

方法 A:

$show = new Show($cinemaId, $movieId);
$show->getShows();

方法 B:

$show = new Show();
$show->setCinemaId($cinemaId);
$show->setMovieId($movieId);
$show->getShows();
于 2013-04-03T18:01:20.257 に答える