2013-06-11 2 views
-2

Я сделал небольшой скрипт, который должен быть перенаправлен на одну из 8 страниц случайным образом. Перед тем, как выбрать страницу, я прошу базу данных, чтобы сузить выбор. (Чтобы каждая страница была выбрана на одном семени). К несчастью, я застрял в цикле do-while. Вот код:PHP do loop does not exit

<?php 
$surveys = array(
    1 => "711275", 
    2 => "488985", 
    3 => "515385", 
    4 => "467411", 
    5 => "755429", 
    6 => "335888", 
    7 => "673921", 
    8 => "532261"); 
$surveysCount = array(
    1 => 0, 
    2 => 0, 
    3 => 0, 
    4 => 0, 
    5 => 0, 
    6 => 0, 
    7 => 0, 
    8 => 0); 
$path = 'http://www.unet.univie.ac.at/~a0106191/index.php/'; 
$pathPostfix = '/lang-de'; 

$user = 'xxxx'; 
$pass = 'xxxx'; 
$host = 'xxxx'; 

// establish database connection 
$conn = mysql_connect($host, $user, $pass) or die('Cannot connect to Database - Please try later!'); 

mysql_select_db('a0106191', $conn) or die('Cannot connect to Database - Please try later!'); 

foreach ($surveys as $nr=>$survey) { 
    $stmt = 'SELECT submitdate FROM lime_survey_'.$survey.' WHERE submitdate IS NOT NULL'; 
    //echo $stmt.'<br/>'; 
    if($res = mysql_query($stmt)) { 
     if (mysql_num_rows($res) > 0) { 
      $surveysCount[$nr] = mysql_num_rows($res); 
     } 
    } 

    //echo $surveysCount[$nr].'<br/>'; 
} 
$selection = array(); 
$counter = 0; 
do { 
    $offset = 0; 
    for ($i = 1; $i < 9; $i++) { 
     if ($surveysCount[$i] === $offset){ 
      $sel = $surveys[$i]; 
      $selection[] = $sel; 
      $counter++;    
     } 
    } 
    $offset++; 
    //echo $selection; 
} while ($counter < 1); 
// clean up connections 
mysql_close($conn); 
$whichSurveyNr = mt_rand(1, $counter); 
$which = $selection[$whichSurveyNr-1]; 
$which = $path.$which.$pathPostfix; 
    echo "wSrNr:"; 
    echo $whichSurveyNr; 
echo "selection: "; 
echo count($selection); 
echo " which: "; 
echo $which; 
    foreach($selection as $k => $v) 
     echo " sel: k: ".$k." v: ".$v;*/ 
header("Location: $which"); 
?> 
+0

Ваш счетчик увеличивается в состоянии. Если это условие никогда не выполняется, $ counter всегда будет меньше 1. – SBI

+0

'if ($ surveyCount [$ i] === $ offset) {' всегда 'FALSE'. – jantimon

+0

Вы можете поделиться полученной вами ошибкой? – skparwal

ответ

0

Вы в настоящее время всегда смещаете смещение в пределах цикла. Я не знаю, что вы намерены.

Попробуйте

$offset = 0; 
do { 

    for ($i = 1; $i < 9; $i++) { 
     if ($surveysCount[$i] === $offset){ 
      $sel = $surveys[$i]; 
      $selection[] = $sel; 
      $counter++;    
     } 
    } 
    $offset++; 
    //echo $selection; 
} while ($counter < 1); 
+0

. Спасибо! – user2181319

0

Вы должны использовать == не с ===, он будет возвращается всегда ложно

do { 
    $offset = 0; 
    for ($i = 1; $i < 9; $i++) { 
     if ($surveysCount[$i] == $offset){ 
      $sel = $surveys[$i]; 
      $selection[] = $sel; 
      $counter++;    
     } 
    } 
    $offset++; 
    //echo $selection; 
} while ($counter < 1);    
+2

Потому что ему нужно увеличивать счетчик, а не уменьшать его. И он увеличивает его. – rjmunro

+0

да получил это .... см. Мое редактирование – Gautam3164

+0

Ему нужно пройти выше 0, чтобы цикл вышел, декремент счетчика от 0 не поможет. Counter = 0, счетчик -1 все еще меньше <1 – Anigel

0

Вы должны убедиться, что $ встречное увеличивается.

Удостоверьтесь, что $surveysCount[$i] === $offset всегда происходит.