2016-01-21 3 views
0

По какой-то причине я получаю это уведомление в своем коде.Извещение: переменная кажется неинициализированной

переменной $ сопп, кажется, неинициализированным

Я не понимаю, почему я вижу это уведомление. Я думаю, что я ввожу свой include в нужное место.

Class Calendar { 
    public function show() { 
    include './includes/dbconn.php'; 
    include_once './includes/functions.php'; 

    for($i=0; $i<$weeksInMonth; $i++){ 
     //Create days in a week 
     for($j=1;$j<=7;$j++){ 

     $cal_date = (string)$this->currentDate; 
     $tutor_date = display_tutor_schedule($conn,$cal_date); 

     if(isset($tutor_date[$j]['date'])){ 
      $content.=$this->_showDay($i*7+$j, $tutor_date[$j]['date']); 
     }else { 
      $content.=$this->_showDay($i*7+$j, 0); 
     } 
    } 

    $content .="</tr>"; 
    } 

    } 

} 

Моя $conn переменная приходит от include './includes/dbconn.php';. Поскольку я не получаю ошибку базы данных PHP, например «Не подключен к базе данных» или что-то в этом роде, я предполагаю, что мое соединение правильно.

functions.php

function display_tutor_schedule($conn,$tutor_date){ 

$query = "select * from [dbo].[TUTOR_SCHEDULE] " 
     . "LEFT JOIN [dbo].[TUTOR] " 
     . "ON [dbo].[TUTOR_SCHEDULE].tutor_id = [dbo].[TUTOR].tutor_id " 
     . "LEFT JOIN [dbo].[STATUS] " 
     . "ON [dbo].[STATUS].status_id = [dbo].[TUTOR_SCHEDULE].status_id " 
     . "WHERE [dbo].[TUTOR_SCHEDULE].date = '$tutor_date' " ; 

$stmt = sqlsrv_query($conn,$query); 

$i = 0; 
$appt_detail = array(); 
while ($row = sqlsrv_fetch_array($stmt)){ 
    $appt_detail[$i]['date'] = $row['date']; 
    $appt_detail[$i]['t_shedule_id'] = $row['t_shedule_id']; 
    $appt_detail[$i]['start_time'] = $row['start_time']; 
    $appt_detail[$i]['end_time'] = $row['end_time']; 
    $appt_detail[$i]['tutor_fname'] = $row['tutor_fname']; 
    $appt_detail[$i]['tutor_lname'] = $row['tutor_lname']; 
    $appt_detail[$i]['status_name'] = $row['status_name']; 
    $appt_detail[$i]['status_id'] = $row['status_id']; 

    $i++; 
} 




return $appt_detail; 

} 

my_class.php

<?php 

$calendar = new Calendar(); 
echo $calendar->show(); 

?> 

dbconn.php

$serverName = "myserver"; 
$connectionInfo = array("Database" => "my_database", "UID" => "user", "PWD" => "pwd"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 
+0

Вы используете PhpStorm? –

+1

Мы понятия не имеем, что '/ includes/functions.php' содержит/делает так, что нет разумного способа угадать решение. – PeeHaa

+0

@MahmoudTantawy nop, netbeans –

ответ

0

Если вы используя netbeans или phpstorm, тогда это может быть проблема с IDE.

Проверить https://netbeans.org/projects/php/lists/users/archive/2013-03/message/49 и phpstorm warning php variable might not have been defined

Тем не менее, желательно, чтобы вы показать нам файлы, содержащие, чтобы проверить их.

+0

Подождите, пожалуйста. OP даже не запускал код? – PeeHaa

+0

Он говорит: «Поскольку я не получаю ошибку базы данных php, например, не связанную с базой данных или что-то в этом роде, я предполагаю, что мое соединение правильно». –

+1

Похоже, что он получает ошибку в IDE, и при запуске кода все в порядке, но не уверен! –

-2

Поскольку переменная сначала инициализируется в dbconn.php, среда IDE может не распознать ее. Вставьте

$conn = null; 

после строки

public function show() { 
+0

Файл включен в область действия, где он вызывается. – PeeHaa

+0

@PeeHaa точно, потому что это моя область действия, хотя у меня не было бы проблем =/ –

+0

@ArielMaduro, что дает вам ошибку? Это когда вы запускаете PHP-код или это предупреждение IDE? – PeeHaa

-2

Не использовать включает или глобальные для переменных, это плохо.

Вместо этого вы должны использовать классы

class Database { 

    private $conn; 

    public function __construct(){ 
     $serverName = "myserver"; 
     $connectionInfo = array("Database" => "my_database", 
           "UID" => "user", 
           "PWD" => "pwd"); 
     $this->conn = sqlsrv_connect($serverName, $connectionInfo); 
    } 

    public function get_connection(){ 
     return $this->conn; 
    } 
} 

Calendar.php

class Calendar 
{ 
    private $conn; 
    public $weeksInMonth; 

    function __construct($conn){ 
     $this->conn = $conn; 
    } 


    public function show() 
    { 
     $content = ""; 
     for ($i = 0; $i < $this->weeksInMonth; $i++) { 
      //Create days in a week 
      for ($j = 1; $j <= 7; $j++) { 
       $cal_date = (string)$this->currentDate; 
       $tutor_date = display_tutor_schedule($cal_date); 

       if (isset($tutor_date[$j]['date'])) { 
        $content .= $this->_showDay($i * 7 + $j, $tutor_date[$j]['date']); 
       } else { 
        $content .= $this->_showDay($i * 7 + $j, 0); 
       } 
      } 
      $content .= "</tr>"; 
     } 
     return $content; 
    } 

    function display_tutor_schedule($tutor_date) 
    { 
     $query = "select * from [dbo].[TUTOR_SCHEDULE] " 
      . "LEFT JOIN [dbo].[TUTOR] " 
      . "ON [dbo].[TUTOR_SCHEDULE].tutor_id = [dbo].[TUTOR].tutor_id " 
      . "LEFT JOIN [dbo].[STATUS] " 
      . "ON [dbo].[STATUS].status_id = [dbo].[TUTOR_SCHEDULE].status_id " 
      . "WHERE [dbo].[TUTOR_SCHEDULE].date = '$tutor_date' "; 

     $stmt = sqlsrv_query($this->conn, $query); 

     $appt_detail = array(); 
     while ($row = sqlsrv_fetch_array($stmt)) { 
      $appt_detail[] = $row; 
     } 
     return $appt_detail; 
    } 

} 

Использование

$db = new Database(); 
$conn = $db->get_connection(); 
$calendar = new Calendar($conn); 
$calendar->weeksInMonth = 4; 
echo $calendar->show(); 
+0

Хотя вы правы, это никоим образом не отвечает на OP. – PeeHaa

+0

@PeeHaa с этим кодом он не получит 'Variable $ conn, кажется, неинициализирован' – meda

+0

С кодом' PeeHaa