スクリプトを作成する方法を見つけようとしていて、助けが必要です。
PHP 5 と MySQL 5.1.67 を使用しています
私の目標は、DB から特定のフィールドを抽出し、PHP で再フォーマットしてリストとして表示できるようにすることです。再フォーマットには HTML シーケンスが含まれます。私の目標は、Web ページを自動的に更新する自動化された CRON スクリプトをこれから作成することです。
私はこれらの言語の経験がほとんどありません。だからどんな助けでもいいでしょう。
私の論理は、すべてを 1 つの (mysql) テーブルにロードする必要があるというものです。私の XML は latin1 文字セットを使用しています。カテゴリ、ID、タイトル、および説明は、テーブルの各列です。
mysql の構造は次のとおりです。
カテゴリ mysql は VARCHAR を使用
します Latin1 サイト
は id の下にグループ化するために使用されました mysql は VARCHAR を使用します Latin1
タイトル mysql は VARCHAR を使用します Latin1
説明 mysql は VARCHAR を使用します Latin1
XML 構造は次のとおりです。
// XML Structure
// 23 categories to loop through
// hunderds of sites to loop through per category
//
<catalog>
<category>
<name>Category_Name</name>
<site>
<id>UR545665U</id>
<pagerank>1</pagerank>
<title>Title_Name</title>
<description>Description_of_the_site</description>
</site>
</category>
</catalog>
//
//
以下のコードを使用して XML と DB をロードするところまで来ました。
//mysql connection
$con2 = mysql_connect("www.hosting.com","db_username","db_password");
if (!$con2) {
die('Could not connect: ' . mysql_error());
}
$dbcon1 = mysql_select_db("database_name", $con2);
if (!$dbcon1) {
die ('Can\'t use database_name : ' . mysql_error());
}
//simplexml load xml file with simplexml
$library= simplexml_load_file('feed.xml');
if ($xml === false) {
echo "Failed loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
次に、ここで問題が発生します...カテゴリをループし、その中でサイトをループする必要があります。私が抱えている問題は、getName() 関数を使用できず<category>
、<site>
xml 内で名前が付けられていないことです。その<name>
ため、カテゴリが一意であるため、カテゴリ<id>
を識別し、サイトと一意を識別するために使用しています。
したがって、ここでの私のロジックは、それ自体に foreach() 関数を含めることです。カテゴリをループし、そのカテゴリ内の各サイトをループします。
//begin loop each category and each site
foreach($library->xpath('/Catalog/Category/Name') as $category) {
foreach($library->xpath('/Catalog/Category/Name/Site/Id') as $id) {
$site = $library->xpath('//Site');
$title = $site->Title;
$description = $site->Description;
この時点から、ハッキングを避けるために、mysql 5 の適切なエスケープ シーケンスを使用して SQL プロセスを適切にフォーマットします。
これを行う方法は次のように考えています。
// Format Query String into a variable
// Note: VALUES are in "" because they may contain strings
// sprintf() will run on each loop to format the new <site> string
$mynewquery = sprintf('REPLACE INTO Table_Name (id, title, description, category) VALUES (\"%4$s\",\"%6$s\",\"%7$s\",\"%3$s\")');
if ($mynewquery === false) {
echo "Failed formatting query string\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
//Run Query String to load data into DB
mysql_query($mynewquery);
if (!$mynewquery) {
die ('Error running Query: ' . mysql_error());
}
//
// close the loops and database connection after this.
プロセスに関するフィードバックを得るために、echo ステートメント (表示されていません) を使用しました。エラーなしで XML をロードします。私の推測では、ループ プロセスに構文上の問題があると思われます。だから私はいくつかの質問があります:
- 私の論理は正しいですか?
- XML に DTD が参照されている場合、スクリプトに特別なコードを配置する必要はありますか?
- 目的を達成するために適切な変数と関数を使用していますか?
これを機能させる方法について何か提案はありますか? 試してみましたが、DB がデータをロードしません。