2013-07-03 77 views
0

以前使用MS Access的解決方案沒有完成,因此我這次嘗試使用php。通過PHP文件從mySQL數據庫中的記錄中寫入PHP文件

我有打開數據庫的PHP文件,讀取記錄列表,併爲每個記錄一個HTML文件,在各自的文件名(文件夾名稱在記錄的字段中找到)

代碼似乎工作但它不會超過第一個記錄。我根本沒有得到任何類型的錯誤信息,所以我對這個問題會是什麼感到困惑。我從這裏找到的很多帖子中創建了代碼。我唯一想知道的是,在腳本中是否以正確的順序打開和寫入函數(或稱爲它們)。也許原因是完全不同的。

基本上,我想要做的是腳本爲其各自的文件夾中的每個域創建一個「配置」php文件。所有配置文件之間的唯一區別是domainid字段。

dbase中的表被命名爲domains。這些字段是一個唯一編號的domainid;域,其中包含域名 - 例如domain.com - 並將其用作域文件夾;和domaingroup,它被用作「類別」文件夾。

爲安全起見,我更改了所有值,但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); 
    } 
} 
?> 

感謝

+0

'mysql_query()'不返回行數,'mysql_fetch_array()'只返回一行。 – Barmar

+0

請不要使用'mysql_ *'函數來編寫新的代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/q0gwD)。看到[紅色框](http://goo.gl/OWwr2)?相反,您應該瞭解[準備好的語句](http://goo.gl/orrj0)並使用[PDO](http://goo.gl/TD3xh)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/YXyWL)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/b2ATO)。另請參閱[爲什麼不應該在PHP中使用mysql函數?](http://goo.gl/J5jAo) –

回答

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

現在你只取一排(你也應該調用mysql_fetch_assoc,而不是mysql_fetch_array),所以你寫相同的文件×行時間

也請至少升級到mysqli或最好是PDO作爲mys不推薦使用ql_ *擴展名

0

您需要迭代所有行。

後您查詢數據庫,你可以這樣做:

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

但是,我們不建議使用mysql_*功能。相反,至少使用MySQLi或PDO。

+0

感謝您的回覆Rob W. I更新了腳本以反映您的示例,但我收到錯誤消息: **警告:mysql_fetch_assoc()期望參數1是資源,字符串給定... **。我將「$ query」更改爲「$ htmlquery」,因爲這是我的腳本中的內容,但是任何一個都會給出相同的錯誤消息。任何想法,因爲我還缺少什麼? – Luis

+0

'$ query'在我的例子中應該是'mysql_query()' –

0

基於Kris和Rob的迴應,這是針對那些可能想要做類似事情的人修正的工作代碼(因爲我不熟悉php和mysql,這只是一個臨時解決方案,其他人可能看看克里斯和羅布建議的「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); 
    } 
} 
?> 
+0

的結果很高興你得到它的工作,但一個評論,你拋出第一個結果,因爲你調用$ htmlinfo = mysql_fetch_array($ htmlresult);在第12行。你應該刪除這一行 – Kris