jjzjj

php - 它在 php/html 中错误地输出详细信息

coder 2024-04-19 原文

当用户从问题下拉菜单中选择 All 并将其输出到下方时,我想显示下拉菜单中的所有问题。问题是它没有这样做,更糟糕的是,它给我未定义的偏移错误,指出:

Notice: Undefined offset: ... in .... on line 605

第 605 行是:

echo '<p><strong>Question:</strong> ' .htmlspecialchars($arrQuestionNo[$key]). ': ' .htmlspecialchars($arrQuestionContent[$key]). '</p>' . PHP_EOL;

我的问题是,如果用户选择All 选项,如何修复错误并显示所有问题?

我有一个演示你可以通过:DEMO

按照以下步骤操作:

  • 在 Module 下拉菜单中,选择 System Strategy 并提交
  • 出现评估下拉菜单时,选择 POKUB1 并提交
  • 您会看到学生和问题下拉菜单。如果打开下拉菜单,您会看到有 3 个学生和 2 个问题。请选择一个学生和所有 问题并提交。当我真的想在这里显示所有问题的详细信息时,您会在这里看到错误。

代码:

问题下拉菜单:

<select name="question" id="questionsDrop">
<option value="0">All</option>
<option value=23">1</option>
<option value=32">1</option>
</select>

下面是根据从问题下拉菜单中选择的选项确定显示的代码。

    function StudentAnswers()
        {

        $selectedstudentanswerqry = "
            SELECT
            sa.StudentId, StudentAlias, StudentForename, StudentSurname, q.SessionId, 
            QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers, 
            GROUP_CONCAT( DISTINCT Answer ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks, 
            GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick, StudentMark
            FROM Student st
            INNER JOIN Student_Answer sa ON (st.StudentId = sa.StudentId)
            INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId)
            INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
            INNER JOIN Answer an ON q.QuestionId = an.QuestionId
            LEFT JOIN Reply r ON q.ReplyId = r.ReplyId
            LEFT JOIN Option_Table o ON q.OptionId = o.OptionId
            ";

            // Initially empty
            $where = array('q.SessionId = ?');
            $parameters = array($_POST["session"]);
            $parameterTypes = 'i';


            // Check whether a specific question was selected
            $p_question = empty($_POST["question"])?'':$_POST["question"];

            switch($p_question){
            case 0:
                //dont' add where filters
                break;
            default:
                $where[] = 'q.QuestionId = ?';
                $parameters[] .= $_POST["question"];
                $parameterTypes .= 'i';
            }

            // If we added to $where in any of the conditionals, we need a WHERE clause in
            // our query
            if(!empty($where)) {
                $selectedstudentanswerqry .= ' WHERE ' . implode(' AND ', $where);
                global $mysqli;
                $selectedstudentanswerstmt=$mysqli->prepare($selectedstudentanswerqry);
                // You only need to call bind_param once

                if (count($where) == 1) {
                $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0]);
            }
            else if (count($where) == 2) {
                $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1]);
            }


            }

            $selectedstudentanswerqry .= "
              GROUP BY sa.StudentId, q.QuestionId
              ORDER BY StudentAlias, q.SessionId, QuestionNo
            ";

        // get result and assign variables (prefix with db)
        $selectedstudentanswerstmt->execute(); 
        $selectedstudentanswerstmt->bind_result($detailsStudentId,$detailsStudentAlias,$detailsStudentForename,$detailsStudentSurname,$detailsSessionId,$detailsQuestionNo, 
        $detailsQuestionContent,$detailsOptionType,$detailsNoofAnswers,$detailsAnswer,$detailsReplyType,$detailsQuestionMarks,$detailsStudentAnswer,$detailsResponseTime,
        $detailsMouseClick,$detailsStudentMark);    

        $selectedstudentanswerstmt->store_result();
        $selectedstudentanswernum = $selectedstudentanswerstmt->num_rows(); 


            $question = array();

            while ($selectedstudentanswerstmt->fetch()) {

            $arrQuestionNo = array();
            $arrQuestionContent = array();



            $arrQuestionNo[ $detailsStudentId ] = $detailsQuestionNo;
            $arrQuestionContent[ $detailsStudentId ] = $detailsQuestionContent;



            $questions[] = $arrQuestionNo;
            $questions[] = $arrQuestionContent;

        }

        $selectedstudentanswerstmt->close();

        ?>

...........................................................................................

    <h2>STUDENT'S ANSWERS</h2>

    <?php   

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

    echo '<p><strong>Question:</strong> ' .htmlspecialchars($arrQuestionNo[$key]). ': ' .htmlspecialchars($arrQuestionContent[$key]). '</p>' . PHP_EOL;

    }
    }
    ?>

更新:

学生表结构:

CREATE TABLE `Student` (
 `StudentId` int(10) NOT NULL AUTO_INCREMENT,
 `StudentForename` varchar(25) NOT NULL,
 `StudentSurname` varchar(25) NOT NULL,
 `StudentAlias` varchar(15) NOT NULL,
 `StudentEmail` varchar(50) NOT NULL,
 `StudentUsername` varchar(20) NOT NULL,
 `StudentPassword` varchar(50) NOT NULL,
 `StudentDOB` date NOT NULL,
 `Year` int(2) NOT NULL,
 `CourseId` int(6) NOT NULL,
 `Active` tinyint(1) NOT NULL DEFAULT '1',
 PRIMARY KEY (`StudentId`),
 KEY `FK_Course` (`CourseId`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8

问题表结构:

CREATE TABLE `Question` (
 `QuestionId` int(10) NOT NULL AUTO_INCREMENT,
 `SessionId` int(10) NOT NULL,
 `QuestionNo` int(3) NOT NULL,
 `QuestionContent` varchar(5000) NOT NULL,
 `NoofAnswers` int(2) NOT NULL,
 `ReplyId` int(1) NOT NULL,
 `QuestionMarks` int(4) NOT NULL,
 `OptionId` int(2) NOT NULL,
 PRIMARY KEY (`QuestionId`)
) ENGINE=InnoDB AUTO_INCREMENT=357 DEFAULT CHARSET=utf8

最佳答案

试一试......

$question = array();

while ($selectedstudentanswerstmt->fetch()) {
    // assuming you don't need the StudentId
    $questions[] = array('no' => $detailsQuestionNo,
                         'content' => $detailsQuestionContent);
}

foreach ($questions as $key => $question) {
    echo '<p><strong>Question:</strong> ' . 
         htmlspecialchars($question['no']) .
         ': ' . 
         htmlspecialchars($question['content']) . 
         '</p>' . 
         PHP_EOL;
}

已编辑

或者如果您按问题分组,您可以试试这个:

$question = array();

while ($selectedstudentanswerstmt->fetch()) {
    if (true === isset($questions[$detailsQuestionId])) {
        $questions[$detailsQuestionId]['students'][] = $detailsStudentId;
    } else {
        $questions[$detailsQuestionId] = array();
        $questions[$detailsQuestionId]['no'] = $arrQuestionNo;
        $questions[$detailsQuestionId]['content'] = $arrQuestionContent;
        $questions[$detailsQuestionId]['students'] = array();
        $questions[$detailsQuestionId]['students'][] = $detailsStudentId;
    }
}

foreach ($questions as $questionId => $question) {
    // $question['no']
    // $question['content']

    foreach($question['students'] AS $key => $studentId) {
        // $studentId
    }
}

或者如果您按用户 ID 分组...

$students = array();

while ($selectedstudentanswerstmt->fetch()) {
    if (false === isset($students[$detailsStudentId])) {
        $students[$detailsStudentId] = array();
    }
    $students[$detailsStudentId][$detailsQuestionId] = 
                                       array('no' => $arrQuestionNo,
                                             'content' => $arrQuestionContent;
}

foreach ($students AS $studentId => $questions) {
    // $studentId
    foreach ($questions AS $questionId => $question) {
        // $questionId
        // $question['no']
        // $question['content']
    }
}

关于php - 它在 php/html 中错误地输出详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382607/

有关php - 它在 php/html 中错误地输出详细信息的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  5. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  6. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  7. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  8. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  9. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  10. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

随机推荐