在第7行的非对象上调用成员函数attributes()

时间:2013-02-18 14:32:37

标签: php xml simplexml

好的伙计们,我到处搜索了这个问题的答案,但没有解决问题的运气。 我创建了一个名为questions.xml的xml文档。代码示例是 即

<Quiz>
    <topic text="Preparation for Exam">
        <subtopic text="Science">
            <question text="What is the largest planet in our solar system?"> 
            <answer num = "A" Text="Jupiter" correct="1"></answer> 
            <answer num = "B" Text="Venus" correct="0"></answer> 
            <answer num = "C" Text="Saturn" correct="0"></answer> 
            <answer num = "D" Text="Mars" correct="0"></answer> 
            </question>

            <question text="What is the smallest planet?" > 
            <answer num = "A" Text="Pluto" correct="1"></answer> 
            <answer num = "B" Text="Venus" correct="0"></answer> 
            <answer num = "C" Text="Saturn" correct="0"></answer> 
            <answer num = "D" Text="Mars" correct="0"></answer> 
            </question>
                </subtopic>
         </topic>
</Quiz> 

然后我制作了一个表格数据,显示了不同的问题编号,我必须选择一个问题。我使用单选按钮进行选择,然后定义了一个名为“问题”的提交按钮。 因此,当用户选择并提交任何问题时,通过POST方法将单选按钮值0,1,2,3等传递给另一个php页面。 现在在这个新的php页面中,我必须在文本字段区域中显示所需的问题。 问题是我总是得到这个愚蠢的错误“在第6行的非对象上调用成员函数属性()”。 我的代码是

<?php
    $condition= $_POST['question'];
    $xml = simplexml_load_file("questions.xml");
    echo $condition;
    if ($condition=="0"){
        $question= $xml-> topic -> subtopic-> question[$condition] ->  attributes()-> text."<br>";
        echo "<form action='' method='post'> 
        <label for='question'> Question</label>
        <textarea name='question' id='1' cols='45' rows='5'>".$question."</textarea>
        <P><INPUT TYPE=SUBMIT VALUE='submit'> </form>";

        }
 ?>

现在没有语法错误,程序显示echo $ condition,但是它不显示问题总是显示“在第6行的非对象上调用成员函数属性()”。我真的很生气..请帮助我。

2 个答案:

答案 0 :(得分:3)

$xml-> topic -> subtopic-> question[0]存在且$xml-> topic -> subtopic-> question["0"]没有。

$_POST['question']转换为整数可以解决问题。

$condition= (int) $_POST['question'];

会起作用。

答案 1 :(得分:0)

首先检查,您收到用户输入,因此无法设置或可以是任何字符串。

转换为int:

$condition = (isset($_POST['question'])) ? (int) $_POST['question'] : "some default value" ;

if (isset($xml-> topic -> subtopic-> question[$condition]) && is_object($xml-> topic -> subtopic-> question[$condition])){
  $question= $xml-> topic -> subtopic-> question[$condition] ->  attributes()-> text."<br/">
  //and so on.
}