0

MS Access で動作する以前のソリューションはうまくいかなかったので、今回は php で試しています。

データベースを開き、レコードのリストを読み取り、各レコードのhtmlファイルをそれぞれのフォルダー名で作成するこのphpファイルがあります(フォルダー名はレコードのフィールドにもあります)

コードは機能しているように見えますが、最初のレコードを超えません。どのようなエラー メッセージも表示されないので、何が問題なのか混乱しています。ここにある多くの投稿からコードを作成しました。私が疑問に思っている唯一のことは、open 関数と write 関数 (またはそれらが呼び出されたもの) がスクリプト内で正しい順序であるかどうかです。原因は全く別のものにあるのかもしれません。

基本的に、私がやろうとしているのは、スクリプトが各ドメインの「構成」php ファイルをそれぞれのフォルダーに作成することです。すべての構成ファイルの唯一の違いは、domainid フィールドです。

dbase のテーブルは名前付きドメインです。フィールドは一意の番号である domainid です。domain にはドメイン名 (例: domain.com) が含まれ、ドメイン フォルダーとして使用されます。「カテゴリ」フォルダとして使用されるドメイングループ。

セキュリティ上の理由からすべての値を変更しましたが、db 接続は正常に機能します。

<?php
$db_name = "dbname"; 
$dbusername = "dbname"; 
$dbpassword = "password"; 
$server = "dbname.blahblahbla.hosted.com";

$connection = mysql_connect($server, $dbusername, $dbpassword) or die(mysql_error());
$db = mysql_select_db($db_name,$connection)or die(mysql_error());

    $htmlquery = "select * from domains ORDER BY domain";
    $htmlresult = mysql_query($htmlquery,$connection) or die(mysql_error());
    $htmlinfo = mysql_fetch_array($htmlresult);

    if ($htmlresult == 0) { 
        echo "<p>No Recourds Found</p>";
    } else {

    for ($i=0; $i <$htmlresult; $i++) { 

$p = "<?php \n"; 
$p.= " //LS \n";
$p.= " define('Disable_Ads', 'No'); //Yes or No \n";
$p.= " define('Site_ID', ".$htmlinfo['domainid']."); \n";
$p.= " define('Short_Paragraph_Size',500);\n";
$p.= " define('Long_Paragraph_Size',1000);\n";
$p.= " ?> \n";

    $htmlfolder = strtolower($htmlinfo['domaingroup']);
    $htmldomain = strtolower($htmlinfo['domain']);  
    $a = fopen($htmlfolder."/".$htmldomain."/admin_config.php", 'w');
    fwrite($a, $p);
    echo $htmldomain." Completed <br />"; // TEMP - To try to see the looping of domain names
    fclose($a);
    }
}
?>

ありがとう

4

3 に答える 3

0

for ループを while ループに置き換えます

while($htmlinfo = mysql_fetch_assoc($htmlresult) {
   $p = "<?php \n"; 
   $p.= " //LS \n";
   $p.= " define('Disable_Ads', 'No'); //Yes or No \n";
   //.....
   $htmlfolder = strtolower($htmlinfo['domaingroup']);
   $htmldomain = strtolower($htmlinfo['domain']);  
   //...
}

現在、1行のみをフェッチしているため(mysql_fetch_arrayの代わりにmysql_fetch_assocも呼び出す必要があります)、同じファイルをx行時間書き込みます

また、mysql_* 拡張機能は非推奨であるため、少なくともmysqliまたはできればPDOにアップグレードしてください。

于 2013-07-03T23:47:22.623 に答える
0

すべての行を反復処理する必要があります。

データベースにクエリを実行したら、次のことができます。

while($row = mysql_fetch_assoc($query)) {
  $domain = $row['domain'];
  $domaingroup = $row['domaingroup'];
  // etc...
}

ただし、関数の使用はお勧めしませんmysql_*。代わりに、少なくとも MySQLi または PDO を使用してください。

于 2013-07-03T23:48:11.323 に答える