2010-07-14 5 views
4

Je sais regex n'est pas populaire ici, quelle est la meilleure façon d'extraire une valeur d'une balise d'entrée dans un formulaire HTML en utilisant un script php?Comment extraire une valeur d'une balise d'entrée HTML en utilisant PHP

par exemple:

quelques divs/tables etc ..

<form action="blabla.php" method=post> 

<input type="text" name="campaign"> 
<input type="text" name="id" value="this-is-what-i-am-trying-to-extract"> 

</form> 

quelques divs/tables etc ..

Merci

+0

Toute chance que vous pouvez reformuler? Voulez-vous obtenir la valeur du contrôle d'entrée dans votre script PHP lorsqu'il est publié? Si c'est le cas, c'est assez basique. Vous ne savez pas non plus ce que le commentaire sur regex a dans ce contexte? – spinon

+0

Est-ce en générant la page (avec php) ou après que le formulaire soit soumis? –

+0

@spinon Je pense qu'il fait référence à « vous ne pouvez pas analyser HTML avec une expression régulière » réponse [correcte], mais je ne pense pas qu'il est encore rendu compte que ce n'est pas comment il veut aller à ce sujet, même si vous pouviez. –

Répondre

0

Poster le formulaire à un page php. La valeur que vous voulez sera dans $ _POST ['id'].

0

Que voulez-vous dire regex n'est pas populaire? Pour ma part, j'aime les expressions régulières.

Quoi qu'il en soit, ce que vous voulez est quelque chose comme:

$contents = file_get_contents('/path/to/file.html'); 
preg_match('/value="(\w+)"/',$contents,$result); 
+3

Tout le monde les aime ... juste pas pour HTML PARSING. Voir http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 pour un peu de contexte en ce qui concerne cela et! – JAL

+0

Hahha Je suis d'accord, regex est horrible pour l'analyse HTML. Cependant, pour la question en question, regex est une solution parfaitement valide, mais certainement pas la seule solution. – Josiah

+0

Que faire s'il y a d'autres entrées dans le HTML qui ont un attribut de valeur? Que faire si l'attribut n'est pas écrit exactement 'value =" foo "', mais 'Value =" foo "'. Que faire si le code HTML contient ce commentaire? – Gordon

14

Si vous souhaitez extraire des données de la ficelle HTML, la meilleure solution est souvent de travailler avec la classe DOMDocument, qui peut charger HTML à un Arbre DOM.

Ensuite, vous pouvez utiliser aucun lien avec DOM-d'extraction de données, comme, par exemple, XPath requêtes.


Ici, vous pouvez utiliser quelque chose comme ceci:

$html = <<<HTML 
    <form action="blabla.php" method=post> 

    <input type="text" name="campaign"> 
    <input type="text" name="id" value="this-is-what-i-am-trying-to-extract"> 

    </form> 
HTML; 


$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$xpath = new DOMXPath($dom); 

$tags = $xpath->query('//input[@name="id"]'); 
foreach ($tags as $tag) { 
    var_dump(trim($tag->getAttribute('value'))); 
} 

Et vous obtiendrez:

string 'this-is-what-i-am-trying-to-extract' (length=35) 
+0

Essayez 'echo $ xPath-> evaluate ('string (// input [@ nom =" id "]/@ value)');' – Gordon

2
$html=new DOMDocument(); 
$html->loadHTML('<form action="blabla.php" method=post> 
    <input type="text" name="campaign"> 
    <input type="text" name="id" value="this-is-what-i-am-trying-to-extract"> 
    </form>'); 

$els=$html->getelementsbytagname('input'); 

foreach($els as $inp) 
    { 
    $name=$inp->getAttribute('name'); 
    if($name=='id'){ 
    $what_you_are_trying_to_extract=$inp->getAttribute('value'); 
    break; 
    } 
    } 

echo $what_you_are_trying_to_extract; 
//produces: this-is-what-i-am-trying-to-extract 
+0

Va déclencher * Strict Standards: Méthode non statique DOMDocument :: loadHTML() should ne pas être appelé statiquement * – Gordon

+0

Oui, je suppose ... mais ça marche. Autant aller avec le style préféré. – JAL

Questions connexes