2014-09-03 5 views
0

Je suis nouveau à php et je suis un peu confus par cette erreur lorsque je tente d'accéder à un DOMElement à partir du fichier, je travaille dans:

'Creating default object from empty value in [path]'

où chemin est la destination du fichier php à l'origine de l'erreur. J'ai essayé de valider le formulaire avant d'appeler dom- $> getElementById ($ string), mais cela provoque simplement d'autres erreurs comme

'No declaration for element span in [path]'

contenu newEmptyPHP.php:

<!DOCTYPE html> 
<html> 

    <body> 
     <span id="mySpan">Hello, World!</span> 
    </body> 
</html> 
<?php 
    $dom = new DOMDocument(); 
    $dom->load('newEmptyPHP.php'); 
    $dom->validate(); 

    $label = $dom->getElementById('mySpan'); 
    $label->nodeValue = "Hello, pluto!"; 
?> 

Clarifier: Je comprends que $dom->getElementById($id) renvoie null et donc je ne peux pas accéder à l'élément span que j'essaie de changer. J'ai déjà travaillé avec ASP.NET et JavaScript et je suis familier avec document.getElementById en JavaScript, donc je peux mal comprendre comment les choses sont faites en PHP par opposition à JavaScript; J'ai juste besoin de savoir ce que je fais à tort cela provoque getElementById() pour retourner null. Je n'ai pas trouvé de réponse à d'autres questions, alors laissez-moi savoir si vous avez quelque chose à partager. Je vous remercie!

+0

Quel est le contenu de ' newEmptyPHP.php'? – redolent

+0

Quel est le contenu de newEmptyPHP.php? –

+0

J'aurais dû clarifier; newEmptyPHP est le même fichier dans lequel tout ce contenu est contenu; cela pourrait-il être le problème, que j'essaie d'accéder à quelque chose qui n'a pas encore été initialisé? (modifications ajoutées pour clarification) –

Répondre

2

Tout d'abord, la validation de HTML5 avec DOMDocument ne fonctionne pas très bien; ceci est probablement lié à libxml.

En second lieu, charger le même fichier script est ne fonctionne pas comme prévu à moins que vous soit séparé le code HTML dans son propre fichier et d'utiliser ->loadHTMLFile() ou utiliser en mémoire tampon de sortie:

<?php 

ob_start(); 

?> 
<html><body><span id="mySpan">Hello, world!</span></body></html> 
<?php 

$dom = new DOMDocument; 
$dom->loadHTML(ob_get_clean()); 
// ... 
+0

La mise en mémoire tampon des sorties est pratique, merci! –

Questions connexes