-1

www.bbc.co.uk/news で始まるサイトをクロールするクローラーがあります。http://www.bbc.co.uk/newsで始まるすべてのリンクを取得し、それらの説明、リンク、タイトルを見つけてデータベースに挿入します。

なぜか、挿入されていないようです。

何か案は?

PS完全に出力されていない、完全に空白のWebページがあります

   foreach ($links as $link) {
    $output = array(
"title"       => Titles($link), //dont know what Titles is, variable or string?
"description" => getMetas($link),
"keywords" => getKeywords($link), 
"link"        => $link                 
 );
if (empty($output["description"])) {
$output["description"] = getWord($link);
 }

 if (substr($ouput, 0, 26) == "http://www.bbc.co.uk/news/") {

 $data = '"' . implode('" , "', $output) . '"';
 $success = mysql_query( "INSERT INTO news_story (`title`, `description` , `keywords`, `link`)
 VALUES (" . $data . ")") or zerror_reporting();
 if ($sucess) {
echo "YEAH!";
   }

   if (!$sucess) {
echo "NO!!";
    }
    print_r($data);
     }}
4

4 に答える 4

1

問題はここにあります:

 if (substr($ouput, 0, 26) == "http://www.bbc.co.uk/news/") {

   $data = '"' . implode('" , "', $output) . '"';
  $success = mysql_query( "INSERT INTO news_story (`title`, `description` , `keywords`, `link`)
  VALUES (" . $data . ")") or zerror_reporting();
 if ($sucess) {
echo "YEAH!";
  }

あなたの変数はどこにあります$ouput...あなたは書きたかったと思います..しかし、変数は配列ではなく配列である$outputため、実行されませんでした$outputstring

于 2012-12-18T12:33:25.283 に答える
0

@Mrinmoy による解決策は正しいですが、コードがこれ以上触れていないため、コードにはさらに問題があるようです。

最初の設定表示エラー:

ini_set('error_reporting',E_ALL);
ini_set('display_errors','on');
foreach ($links as $link) {

あなたが聞くことができれば、PHPはたくさん話します。私は個人的に E_ALL|E_STRICT を使用していますが、今日は少し多すぎます。:) 次に、データをサニタイズしないと、レコードの挿入に成功することはめったにありません。データには多くの文が含まれます。

 $output = array(
"title"       => mysql_real_escape_string(Titles($link)), //dont know what Titles is, variable or string?
"description" => mysql_real_escape_string(getMetas($link)),
"keywords" => mysql_real_escape_string(getKeywords($link)), 
"link"        => mysql_real_escape_string($link)                 
 );
if (empty($output["description"])) {
$output["description"] = mysql_real_escape_string(getWord($link));
 }

次に、変数のタイプミスを修正し、出力配列のリンク インデックスを使用します。

if (substr($output['link'], 0, 26) == "http://www.bbc.co.uk/news/") {

最後に、それでもデータが得られない場合は、自分で修正する方法をさらに多く知ることができます。print_r($output); echo $data;mysql_query を呼び出す前に使用します。進行状況を追跡するもう 1 つの方法は、コードに を入力してコードが停止しecho __LINE__ . "\n";た場所を確認することです。名前でコードにメソッドがあることを確認するzerror_reportingか、次のように置き換えますdie(mysql_error());

于 2012-12-19T12:15:46.987 に答える
0

空白の白いページは、500 Internal Server Error応答を生成する PHP の致命的なエラーです。これは、この未定義の関数が原因ですzerror_reporting():

mysql_query(...) or zerror_reporting();

それを次のように変更します

mysql_query(...) or trigger_error(mysql_error());

trigger_error() 呼び出しは、mysql エラーをエラー ログに追加します。

substr()2 番目の問題は、配列に対してしようとしていることです。link要素に対してそれを行う必要があります。

 if (substr($output['link'], 0, 26) == "http://www.bbc.co.uk/news/") {
于 2012-12-18T12:26:11.997 に答える
0

データベースに挿入する前に値をサニタイズします

于 2012-12-18T12:31:10.110 に答える