2013-02-13 71 views
1

我想编译一个if语句,通过检查mysqli变量来检查答复类型是Single还是Multiple。如果Single然后输出选项作为单选按钮,如果Multiple然后输出选项作为复选框。在if语句中的未定义变量

但是,我在$qandaReplyType的if语句中收到未定义的变量错误。这个问题怎么解决?下面

代码:

$qandaquery = "SELECT q.QuestionId, r.ReplyType 
        FROM Question q 
        LEFT JOIN Reply r ON q.ReplyId = r.ReplyId 

        WHERE SessionId = ? 
        GROUP BY q.QuestionId 
        ORDER BY RAND()"; 

    $qandaqrystmt=$mysqli->prepare($qandaquery); 
    // get result and assign variables (prefix with db) 
    $qandaqrystmt->execute(); 
    $qandaqrystmt->bind_result($qandaQuestionId,$qandaReplyType); 


    $arrReplyType = array(); 


    while ($qandaqrystmt->fetch()) { 

    $arrReplyType[ $qandaQuestionId ] = $qandaReplyType; 
    } 

    $qandaqrystmt->close(); 





    function ExpandOptionType($option) { 

    $options = explode('-', $option); 
    if(count($options) > 1) { 
     $start = array_shift($options); 
     $end = array_shift($options); 
     do { 
      $options[] = $start; 
     }while(++$start <= $end); 
    } 
    else{ 
     $options = explode(' or ', $option); 
    } 

    if($qandaReplyType == 'Single'){ 
    foreach($options as $indivOption) { 
     echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="radio" name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' . $indivOption . '" /><span>' . $indivOption . '</span></label></div>'; 
    } 
}else if($qandaReplyType == 'Multiple'){ 
      foreach($options as $indivOption) { 
     echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' . $indivOption . '" /><span>' . $indivOption . '</span></label></div>'; 
    } 
} 
} 

foreach ($arrQuestionId as $key=>$question) { 

echo ExpandOptionType(htmlspecialchars($arrOptionType[$key])); 

} 

?> 
+0

我不能看到从任何你定义$ qandaReplyType变量的地方,它通常是空的或未定义的。 – 2013-02-13 21:10:16

回答

3

$qandaReplyType没有在函数内部存在。

您需要在函数内包含global $qandaReplyType,然后才能使用变量的全局版本。

在PHP中刷新variable scope无伤大雅。


编辑:通过它的外观,$arrQuestionId$arrOptionType不在功能范围无论是。
global $qandaReplyType, $arrQuestionId, $arrOptionType;

0

MMMMMMM .....你的函数....试试这个:

function ExpandOptionType($option) { 
$qandaReplyType = "Single"; 
$options = explode('-', $option); 
if(count($options) > 1) { 
    $start = array_shift($options); 
    $end = array_shift($options); 
    do { 
     $options[] = $start; 
    }while(++$start <= $end); 
} 
else{ 
    $options = explode(' or ', $option); 
} 

if($qandaReplyType == 'Single'){ 
foreach($options as $indivOption) { 
    echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="radio" 
    name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' . 
$indivOption . '" /><span>' . $indivOption . '</span></label></div>'; 
} 
}else if($qandaReplyType == 'Multiple'){ 
     foreach($options as $indivOption) { 
    echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' . $indivOption . '" /><span>' . $indivOption . '</span></label></div>'; 
} 
} 
} 

如果一切正常,那么$没有定义qandaReplyType “内部” 的功能....你应该找到一种方法来恢复值O也许另一个参数添加到函数并传递$ qandaReplyType值,如:

function ExpandOptionType($option,$qandaReplyType) 

Saludos;)