<?php
function check($user_id, $topic_id){
$query = mysql_query("SELECT user_id, topic_id FROM sa where topic_id='$topic_id' and user_id='$user_id'");
if (mysql_num_rows($query)==1){
return 'you have already voted';
}
else {
$against = ' <li>
<button type="submit" value="Actions" class="against" title="against">
<i></i><span>Against</span></button>
</li>';
$support ='<li>
<button type="submit" value="Actions" class="support" title="support">
<i></i>
<span>Support</span>
</button>
</li>';
return compact('support', 'against');
}
extract(check($_SESSION['user_id'], $topicId));
echo $against;
echo $support;
?>
我一直收到这个错误:
Warning: extract() [function.extract]: First argument should be an array
答案 0 :(得分:3)
extract
函数需要一个数组。您正在传递check
函数的结果,该函数有时是数组
return compact('support', 'against');
但有时候是一个字符串。
return 'you have already voted';
所以,我想你在执行第一个return语句时会看到错误。
答案 1 :(得分:1)
也许这样的事情会更好:
function check($user_id, $topic_id){
$query = mysql_query("SELECT user_id, topic_id FROM sa where topic_id='$topic_id' and user_id='$user_id'");
if (mysql_num_rows($query)==1){
return array('error'=>'you have already voted');
}
else {
$against = ' <li>
<button type="submit" value="Actions" class="against" title="against">
<i></i><span>Against</span></button>
</li>';
$support ='<li>
<button type="submit" value="Actions" class="support" title="support">
<i></i>
<span>Support</span>
</button>
</li>';
return compact('support', 'against');
}
}
$result = check($_SESSION['user_id'], $topicId);
if(isset($result['error'])) {
echo $result['error'];
}
else {
echo $result['against'];
echo $result['support'];
}
您还可以考虑使用exceptions。
答案 2 :(得分:0)
首先,代码中没有关闭函数定义(没有关闭“}”)
其次,如果用户已经投票,你的函数会返回字符串 - 在这种情况下,PHP显然会在extract()函数调用中说“第一个参数应该是一个数组”。
通常,我建议不要使用紧凑提取构造,而是使用结构或关联数组作为返回值。在这种情况下,行为将更加清晰。
答案 3 :(得分:0)
因此它建议:警告:extract()[function.extract]:第一个参数应该是一个数组
请尝试以下操作:
$arr = check($_SESSION['user_id'], $topicId);
if(is_array($arr)) {
extract($arr);
echo $against;
echo $support;
} else {
echo $arr;
}