PHP пока время цикла - PullRequest
       26

PHP пока время цикла

1 голос
/ 28 декабря 2010

Я впервые пытаюсь использовать объектно-ориентированное программирование. Я пытаюсь повторить временной интервал из базы данных, но получаю только один результат.

таблица временных интервалов содержит:

10:00:00  
10:15:00
10:30:00

в классе PHP:

 class booking {
     function __construct($mysqli) { 

     }

     function get_timeslot() {
         global $mysqli;

         $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

         while($r = $q->fetch_array(MYSQLI_ASSOC)) :
             return $r['times'];
         endwhile;

         $mysqli->close();
     }
 }

на веб-странице для отображения времени цикла:

 $booking = new booking($mysqli);

 <?php echo $booking->get_timeslot(); ?>

результат:

10:00:00

Ответы [ 6 ]

4 голосов
/ 28 декабря 2010

return возвращает значение для вашей функции, поэтому вы получите только 1 возвращенное значение.Попробуйте

echo $r['times'].'<br/>';

или

 function get_timeslot(){
     global $mysqli;

     $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
     $timeSlots = array();

     while($r = $q->fetch_array(MYSQLI_ASSOC))
     {
         $timeSlots[] = $r['times'];
     }

     $mysqli->close(); 
     return $timeSlots;
 }
1 голос
/ 28 декабря 2010

Поскольку вы используете return $ r ['times'];внутри цикла.

Это должно решить вашу проблему:

function get_timeslot(){
  global $mysqli;
  $returnArray = array();
  $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
  while($r = $q->fetch_array(MYSQLI_ASSOC)) :
       $returnArray[] = $r['times'];
  endwhile;
  $mysqli->close(); 
  return $returnArray; // now that all results are fetched from DB, return array containing them
}

С другой стороны, использование глобального ключевого слова в методе класса или в любом другом месте не рекомендуется, поскольку глобальная область действияпроцесс доступа и изменения глобальной переменной.Я бы посоветовал вам попробовать использовать другие способы доступа к объекту БД (реестр объектов, защищенное свойство ...)

Также использовать альтернативный синтаксис для цикла while (while (): ... end while;) неочень читабельно, но об этом можно спорить.

1 голос
/ 28 декабря 2010
<code> function get_timeslot() {
     global $mysqli;

     $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

     while($r = $q->fetch_array(MYSQLI_ASSOC)) :
         // Cast to array
         $t[] = $r['times'];
     endwhile;

     $mysqli->close();
     // Return Array
     return $t;
 }


 // Calling the function
 $booking = new booking($mysqli);
 // Add print_r() as the return is now in an array format
 echo "<pre>".print_r($booking->get_timeslot(),true)."
\ n ";
1 голос
/ 28 декабря 2010

Оператор return завершит работу функции сразу же после ее вызова. Вместо возврата вы должны добавить элемент в массив, а не весь массив:

class booking {

 function __construct($mysqli){}

 function get_timeslot(){
  global $mysqli;
  $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");

      while($r = $q->fetch_array(MYSQLI_ASSOC)) :
       $res[] = $r['times'];
      endwhile;
  $mysqli->close();
  return $res; 
 }
}
1 голос
/ 28 декабря 2010

оператор return останавливает цикл while от продолжения и завершает работу функции. Вам нужно либо изменить функцию, чтобы она возвращала массив временных интервалов, либо изменить свою логику, чтобы ожидать от базы данных только первого результата.

0 голосов
/ 28 декабря 2010

Попробуйте это:

class booking {
function __construct($mysqli){}
function get_timeslot()
{
    global $mysqli;
    $q = $mysqli->query("SELECT id_timeslot, times FROM timeslot");
    $return = '';
    while ($r = $q->fetch_array(MYSQLI_ASSOC)) :
        $return.= $r['times'] . '<br/>';
    endwhile;
    $mysqli->close();
    return $return;
}}
...