0

以前使用 MS Access 的解决方案没有成功,所以这次我尝试使用 php。

我有这个 php 文件,它打开一个数据库,读取记录列表并为每条记录创建一个 html 文件,在它们各自的文件夹名称中(文件夹名称也可以在记录的字段中找到)

该代码似乎有效,但没有超过第一条记录。我根本没有收到任何类型的错误消息,所以我对问题所在感到困惑。我从这里找到的许多帖子中创建了代码。我自己唯一想知道的是 open 和 write 函数(或任何它们被调用的函数)在脚本中的顺序是否正确。也许原因是完全不同的。

基本上,我要做的是让脚本为其各自文件夹中的每个域创建一个“配置”php 文件。所有配置文件之间的唯一区别是 domainid 字段。

dbase 中的表名为 domain。这些字段是 domainid ,它是一个唯一的数字;域,其中包含域名 - 例如 domain.com - 并用作域文件夹;和域组,用作“类别”文件夹。

出于安全目的,我更改了所有值,但数据库连接工作正常。

<?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

用 while 循环替换你的 for 循环

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']);  
   //...
}

现在你只取一行(你也应该调用 mysql_fetch_assoc 而不是 mysql_fetch_array)所以你写的是同一个文件 x 行时间

还请至少升级到mysqli或最好是PDO ,因为不推荐使用 mysql_* 扩展

于 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 回答
0

根据 Kris 和 Rob 的回复,对于那些可能正在寻求做类似事情的人来说,这是正确的工作代码(因为我不熟悉 php 和 mysql,这只是一个临时解决方案,其他人可能会研究 Kris Rob 建议使用“mysqli”和“PDO”)。这对我来说效果很好。感谢你们!

感谢@Kris,因为他回复了与我的帖子相关的代码示例。他专门使用了我代码中的变量,使其更容易理解和排除故障;这就是我对他的回答的看法。(我很欣赏你的意见)

<?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 {

    while($htmlinfo = mysql_fetch_assoc($htmlresult) {

$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);
    }
}
?>
于 2013-07-04T00:20:02.833 回答