2010-02-04 9 views
1

Voici mon codePHP ne sera pas écho XML enfant

<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 

?> 

Pour une raison quelconque, je ne peux pas obtenir à echo $ ordinaire, du tout. C'est comme si elle ne pouvait même pas le lire.

Répondre

5

Rob, si vous voulez que les gens comprennent votre question, vous devez faire un effort au lieu de simplement poster un énorme morceau de code non pertinent et demander "pourquoi ce ne fonctionne pas?"

Alors j'ai fait vos devoirs, j'ai compris ce que Le script faisait et ramenait un example XML document. En fin de compte, vous avez mal la hiérarchie. En outre, ceci n'est pas lié mais vous utilisez assignment operators au lieu de comparison operators. En d'autres termes, vos if s ne testent rien, la première positionne simplement $status sur "Succès".

La partie pertinente devrait être quelque chose comme ceci:

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

Ouais vos codes rooks :-) – streetparade

+0

Merci beaucoup! Travaillé comme un charme! – Rob

1

Où obtenez-vous "$ xml-> data"? Selon php.net il n'y a aucun membre de l'objet SimpleXMLElement appelé "données". Voir ce lien ou la documentation pour simplexml_load_file pour de nombreux exemples sur l'utilisation correctement.

+0

http://gdataonline.com/qkhash.php?mode=xml&hash=098f6bcd4621d373cade4e832627b4f6 – Rob

1

Il ne peut pas être votre problème dans son ensemble, mais un net problème est que vous avez deux missions au lieu des tests:

if ($status = "Success")

et

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

sont à la fois attribution ces valeurs à $ status au lieu de tester l'égalité. Vous voulez $status == "Success" et $status == "Hash not found"

Dans ce cas, votre premier test sera toujours réussir (parce que la valeur de retour d'affectation est la valeur attribuée, donc $ status = « Succès » retournera « succès » qui évaluera la valeur true dans un ' si 'test, donc $ plain sera toujours $ xml-> data-> result, même si le statut n'a pas vraiment de succès

+0

Vous J'ai raison, je ne sais pas comment j'ai raté ça. Merci! Mais encore une fois j'ai toujours le même problème, mais c'était encore nécessaire, merci. – Rob

0

Cela a fonctionné pour moi:

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