Запись файлов PHP через файл PHP из записей в базе данных mySQL

Предыдущие решения, работающие с MS Access, не распространялись, поэтому я пытаюсь на этот раз с php.

У меня есть этот php файл, который открывает базу данных, читает список записей и создает html файл для каждой записи в соответствующем имени папки (имена папок также находятся в полях записи)

Код, похоже, работает, но он не проходит мимо первой записи. Я вообще не получаю сообщения об ошибках, поэтому я смущен тем, что проблема будет. Я создал код из многих сообщений, найденных здесь. Единственное, что мне интересно, - это то, что функции open и write (или то, что они называются) находятся в правильной последовательности в скрипте. Возможно, причина совершенно другая.

В основном, я пытаюсь сделать, чтобы сценарий создавал "конфигурационный" php файл для каждого домена в соответствующей папке. Единственное различие между всеми конфигурационными файлами - поле domainid.

Таблица в dbase называется доменом. Поля являются доменными именами, которые являются уникальным числом; домен, который содержит имя домена - например, 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";
 } 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 "; // TEMP - To try to see the looping of domain names
 fclose($a);
 }
}
?>

благодаря

3 ответа

Замените цикл 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']); 
 //...
}
</code-->
<p> Прямо сейчас вы извлекаете только одну строку (вы также должны вызывать mysql_fetch_assoc вместо mysql_fetch_array), поэтому вы пишете тот же файл x row times</p> <p> Также, пожалуйста, по крайней мере, обновите до <a href="http://php.net/manual/en/book.mysqli.php" rel="nofollow noreferrer" target="_blank">mysqli</a> или предпочтительно <a href="http://php.net/manual/en/book.pdo.php" rel="nofollow noreferrer" target="_blank">PDO,</a> поскольку расширение mysql_ * устарело</p>


Основываясь на ответах как Kris, так и Rob, это исправленный рабочий код для тех, кто может пытаться сделать что-то подобное (поскольку я не знаком с php или mysql, и это всего лишь временное решение, другие могут посмотреть, что такое Kris и Роб предложил до "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";
 } 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 "; // TEMP - To try to see the looping of domain names
 fclose($a);
 }
}
?>


Вам нужно перебирать все строки.

После запроса базы данных вы можете:

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

Однако мы не рекомендуем использовать функции mysql_*. Вместо этого используйте MySQLi, по крайней мере, или PDO.

licensed under cc by-sa 3.0 with attribution.