PHP не повторяет XML дочерний - PullRequest
       33

PHP не повторяет XML дочерний

1 голос
/ 04 февраля 2010

Вот мой код

<code>    <form method="post">
  <input name="hash" type="text" id="hash" style='width: 30%;'/>
    <input name="Crack!" type="submit" value="Crack!" onfocus="if(this.blur)this.blur()"/>
</form>

    <?php
 if(isset($_POST['Crack!'])){
  $hash = $_POST['hash'];        

     $xml = simplexml_load_file("http://gdataonline.com/qkhash.php?mode=xml&hash=$hash");

  $status = $xml->data->status; 
    if ($status = "Success"){
     $plain = $xml->data->result;
      }elseif ($status = "Hash not found"){
      $plain = "Not Found"; }     

?>
 <table>
 <tr>  
 <td><?php echo "gdataonline.com: "; ?></td>
 <td><?php echo "$plain"; ?></td>
 </tr>
 </table>

<?php
echo "<pre>";
var_dump($xml);
echo "
"; } // если отправить ?>

По какой-то причине я не могу заставить его повторить $ plain. Как будто он даже не может прочитать это.

Ответы [ 4 ]

5 голосов
/ 04 февраля 2010

Роб, если вы хотите, чтобы люди даже поняли ваш вопрос, вы должны приложить усилия, вместо того, чтобы просто публиковать огромный кусок неактуального кода и спрашивать: «Почему это не работает?»

Итак, я сделал вашу домашнюю работу, выяснил, что делает скрипт, и извлек пример XML-документа . Оказывается, вы неправильно поняли иерархию. Кроме того, это не связано, но вы используете операторы присваивания вместо операторы сравнения . Другими словами, ваши if не проверяют ничего, первый просто устанавливает $status на «Успех».

Соответствующая часть должна выглядеть примерно так:

$data = simplexml_load_file("http://gdataonline.com/qkhash.php?mode=xml&hash=$hash");

switch ($data->status)
{
    case 'Success':
        $plain = $data->result;
        break;

    case 'Hash not found':
        $plain = "Not Found";
        break;
}
1 голос
/ 04 февраля 2010

Возможно, это не вся ваша проблема, но одна определенная проблема состоит в том, что у вас есть два задания вместо тестов:

if ($status = "Success")

и

}elseif ($status = "Hash not found"){

оба присваивают эти значения $ status вместо проверки равенства. Вы хотите $status == "Success" и $status == "Hash not found"

В этом случае ваш первый тест всегда будет успешным (потому что возвращаемое значение присваивания - это назначенное значение, поэтому $ status = "Success" вернет "Success", что будет иметь значение true в тесте "if", поэтому $ plain всегда будет $ xml-> data-> result, даже если статус не был действительно успешным.

1 голос
/ 04 февраля 2010

Где вы получаете "$ xml-> data"? Согласно php.net нет члена объекта SimpleXMLElement с именем «data». См. Эту ссылку или документацию для simplexml_load_file для получения многочисленных примеров правильного использования.

0 голосов
/ 04 февраля 2010

Это сработало для меня:

<form method="post">
  <input name="hash" type="text" id="hash" style='width: 30%;'/>
    <input name="Crack!" type="submit" value="Crack!" onfocus="if(this.blur)this.blur()"/>
</form>

    <?php
 if(isset($_POST['Crack!'])){
  $hash = $_POST['hash'];        

<?php

$xml = simplexml_load_file("http://gdataonline.com/qkhash.php?mode=xml&hash=$hash")

if(!xml)
{
 echo "hash not found";
 // return false; // not function so cant return false ignore it
}

$plain = $xml->result;

?>


<table>
 <tr>
 <td><?php echo "gdataonline.com: "; ?></td>
 <td><?php echo "$plain"; ?></td>
 </tr>
 </table>
...