0

ここ数日間、このスクリプトに取り組んできましたが、MySQL にデータを挿入する方法が見つからないようです。私は PHP/MYSQL に関しては初心者で、これまでいくつかの簡単なスクリプトしか書いたことがありません。スクレイピングされたデータをエコーアウトしてエラーメッセージを表示することはできませんが、phpmyadmin を確認すると、クエリが機能していません (結果がデータベースに入力されていません)。

これが私が取り組んできたコードです

require ("mysqli_connect.php"); 
include('../simple_html_dom.php');

ini_set('user_agent', 
  'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');

// get DOM from URL or file
$html = file_get_html('http://www.asos.com/Women/Jeans/Cat/pgecategory.aspx?cid=3630&via=lhn');
// find all images

foreach($html->find('#items') as $a)       
    echo $a->innertext .'<br>';

foreach($html->find('span.price') as $p)
    echo $p->innertext .',';    

$q = "INSERT INTO jeans (`image`, `price`) VALUES ('$a', '$p')";
$r = @mysqli_query ($dbc, $q) or die ("Update query failed : " . mysql_error());;  //Run the Query.
4

4 に答える 4

2

サンプル コードでは、 $a と $p はオブジェクトです。代わりにこれを試してください。

$a = '';
foreach($html->find('#items') as $item) {
    $a.= $item->innertext .'<br>';
}

$p = '';
foreach($html->find('span.price') as $price) {
    $p.= $price->innertext.',';    
}

次に、@mysqli_query から @ を削除し、それを使用しないようにして、代わりにエラーを適切にキャッチ/処理するようにしてください。

次に、パラメータ化されたクエリと PDO を調査するのに数分かかります。(サードパーティからの) 不明な入力を受け入れず、それらを SQL に直接挿入してください。

$q = "INSERT INTO jeans (`image`, `price`) VALUES ('$a', '$p')";

ie: しないでください ^

最後に、おそらく get からの応答を検証する必要があります。

それが役立つことを願っています!

于 2012-06-21T17:03:59.560 に答える
1

@ を前に置くことでエラーを抑制していますmysqli_query

これを変更してみてください:

$q = "INSERT INTO jeans ('image', 'price') VALUES ('$a', '$p')";
mysqli_query ($dbc, $q) or die ("Update query failed : " . mysql_error());;  //Run the Query.
于 2012-06-21T17:06:39.053 に答える
0

私は何が悪いのか知っていると思います。

使うだけなら

echo file_get_contents("http://www.asos.com/Women/Jeans/Cat/pgecategory.aspx?cid=3630");

(または asos.com だけでも問題ありません)、いつでも戻ってくることに気付くでしょう。

そのページが見つからないか、何か問題が発生しています...

戻るか、ここで試してください:

女性 男性 ホームヘルプデスク

指定した要素がこのページにないため、コードは何も返しません。

私の推測では、asos.com はサイトからのスクレイピングを防いでいると思います。

于 2012-06-21T18:00:54.650 に答える
0

内容を保存する際のトラブルを避けるために、必ず mysql_real_escape_string 関数を使用してください。以下の例。

$query2 = sprintf("INSERT INTO jeans(image, price)  
                 VALUES ('%s','%s')",mysql_real_escape_string($a),
                                     mysql_real_escape_string($p))
mysql_query($query2) or die(mysql_error()."<br />".$query2); 
于 2012-06-25T00:40:38.570 に答える