两个变量的比较,CodeIgniter



我目前正在开发一个系统,其中它的主要功能是评估用户输入的变量和预先存储的变量,并确定它们是否相同,如果是,则用户通过,如果不是,则用户失败。

目前,我拥有的代码仅输出"失败",即使我放入系统的测试数据应显示结果已通过。我拥有的代码如下。只有底部的三个div实际上链接到手头的问题,但我包含了整个部分以供参考。

<?php foreach($results as $row): ?>
<div id="account-id">
<?php echo $row->accountid;
$account = $row->accountid; ?>
</div>
<div id="assignment-title">
<?php echo $row->assignmentname;
$name = $row->assignmentname; ?>
</div>
<div id="assignment">
<?php echo $row->assignment;
$code = $row->assignment; ?>
</div>
<div id="assignment">
<?php
$variable = $row->assignment;
$output = eval($variable); ?>
</div>
<div id="assignment">
<?php echo $row->expectedoutcome;
$test = $row->expectedoutcome; ?>
</div>
<div id="assignment">
<?php
if(strcmp($output, $test) == 0) {
echo "Passed"; 
} else {
echo "Failed"; } ?>
</div>
<?php endforeach; ?>

此图显示了相关数据库表的架构

这是表本身中的数据的图像

所以拿一个精简版本的代码,我想出了一些东西来玩......

<?php
// Simulate DB data - just one row for now
$results = array(
(object)array(
'account_id'       => 1,
'assignment_name'  => 'assignment_1',
'assignment'       => 'echo "hi";',
'expected_outcome' => 'hi',
)
);
// Make sure it looks ok
var_dump($results);
// Perform the test
foreach ($results as $row) {
$variable = $row->assignment;
echo $variable;
// Start Buffering
ob_start();
eval($variable);          // This needs to be buffered
$output = ob_get_clean(); // Get the output and clean the buffer
$expected_answer = $row->expected_outcome;
// Take a look at the output
echo '<br> Output = ';
echo $output;
echo '<br> Expected Answer = ';
echo $expected_answer;
echo '<br>';
// Perform the comparison  
if (strcmp($output, $expected_answer) == 0) {
echo "Passed";
} else {
echo "Failed";
}
}

您似乎需要缓冲 eval 的输出,因为它需要"运行"并且您需要捕获结果。您不能简单地将其分配给变量。

您可以将其放入另一个测试页面,以在本地运行它作为指南。

希望有帮助。

相关内容

  • 没有找到相关文章

最新更新