PHP XML çocuğu echo değil

4 Cevap php

İşte benim kod

    <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 "</pre>"; 

 } //if submit

 ?>

Nedense ben hiç, $ ovaya echo alınamıyor. Onun bile okuyamaz sanki.

4 Cevap

Eğer insanlar bile sorunuzu anlamak istiyorsanız Rob, yerine sadece alakasız kod büyük bir kısmını yayınlamaktan bir çaba ve sormak zorunda "this neden çalışmıyor?"

Yani ben bir example XML document komut ne yaptığını anladım ve getirilen, ödevini yaptı. Olarak çıkıyor, sen hiyerarşi yanlış var. Ayrıca, bu ilgisiz ama assignment operators yerine kullanarak comparison operators edilir. Diğer bir deyişle, sizin if s şey, ilki sadece $status için "Başarı" ayarlar test yok.

Ilgili kısmı böyle bir şey olmalı:

$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;
}

Eğer "$ xml-> veri" Nerede alıyorsanız? Göre php.net "veri" olarak adlandırılan SimpleXMLElement nesnenin hiçbir üyesi yoktur. Düzgün bunu kullanarak çok sayıda örnekler için simplexml_load_file için bu bağlantıyı veya belgelerine bakın.

Bu tüm sorun olmayabilir, ama bir kesin sorun yerine testleri iki atamaları var ki:

if ($status = "Success")

ve

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

are both assigning those values to $status instead of testing equality. You want $status == "Success" ve $status == "Hash not found"

Bu durumda atama dönüş değeri atanan değerdir çünkü ilk test her zaman (başarılı olacaktır, bu yüzden $ status = "Başarı" bir test, bu yüzden $ düz olacak 'eğer' her zaman doğru değerlendirecek olan "Başarı" dönecektir Durum gerçekten başarı olmasa bile, $ xml-> veri-> sonucu.

Bu benim için çalıştı:

<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>