За последние 24 часа нас посетили 32889 программистов и 1755 роботов. Сейчас ищут 863 программиста ...

скрипт создания нового скрипта

Тема в разделе "Прочие вопросы по PHP", создана пользователем Ter, 5 июн 2011.

  1. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    Здравствуйте, у меня возникла небольшая проблемка....
    PHP:
    1.  
    2. <?php
    3. if(isset($_POST['admin'])) {$admin = $_POST['admin'];}
    4. if(isset($_POST['name_mgb'])) {$name_mgb = $_POST['name_mgb'];}
    5. if(isset($_POST['email'])) {$email = $_POST['email'];}
    6. if(isset($_POST['addrec'])) {$addrec = $_POST['addrec'];}
    7. if(isset($_POST['shapka_mgb'])) {$shapka_mgb = $_POST['shapka_mgb'];}
    8. if(isset($_POST['fcolor'])) {$fcolor = $_POST['fcolor'];}
    9. if(isset($_POST['tcolor'])) {$tcolor = $_POST['tcolor'];}
    10. if(isset($_POST['bstyle'])) {$bstyle = $_POST['bstyle'];}
    11.  
    12. //if(shapka_mgb==     шапка - картинка, находящаяся в определённой папке и имеющая определённое имя...
    13. if($fcolor==1) {$fc="<img src='images/red.gif'>";} //выбор цвета фона
    14. if($fcolor==2) {$fc="<img src='images/blue.gif'>";}
    15. if($fcolor==3) {$fc="<img src='images/green.gif'>";}
    16. if($fcolor==4) {$fc="<img src='images/yellow.gif'>";}
    17. if($fcolor==5) {$fc="<img src='images/white.gif'>";}
    18.  
    19. if($tcolor==1) {$tc=NULL;} //выбор цвета таблицы
    20. if($tcolor==2) {$tc="<img src='images/green.gif'>";}
    21. if($tcolor==3) {$tc="<img src='images/yellow.gif'>";}
    22.  
    23. if($bslyle==1) {$bs="kvadrat";} //выбор стиля кнопки
    24. if($bstyle==2) {$bs="oval";}
    25. if($bstyle==3) {$bs="gold";}
    26.  
    27. if($_POST['create']){
    28. //создание:папки, файлов внутри неё, а это show.php, admin.php, add.php, delete.php
    29. define ("SERVER", "localhost");
    30. define ("USERNAME", "root");
    31. define ("PASSWORD", "123");
    32. define ("DBNAME", "gbook");
    33. $link=new mysqli(SERVER, USERNAME, PASSWORD, DBNAME);
    34. $q="create table if not exists $addrec(
    35.  'id' int(4) NOT NULL auto_increment,
    36.  'name' char(25) default NULL,
    37.  'city' char(30) default NULL,
    38.  'email' char(30) default NULL,
    39.  'date' datetime default NULL,
    40.  'message' text,
    41.  PRIMARY KEY  ('id')
    42. )";
    43. $res=$link->query($q);
    44.  
    45. mkdir($addrec);
    46.  
    47. $show=fopen($addrec."/show.php", "a+");
    48. fputs($show, "
    49. <html>
    50. <head>
    51. <title>myguestbook</title>
    52. <link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\">
    53. </head>
    54. <body bgcolor=$fc>
    55. <div align=center><img src=$shapka></div><br>
    56. </body>
    57. </html>
    58. <?php
    59. define (\"SERVER\", \"localhost\");
    60. define (\"USERNAME\", \"root\");
    61. define (\"PASSWORD\", \"123\");
    62. define (\"DBNAME\", \"gbook\");
    63. $link=new mysqli (SERVER, USERNAME, PASSWORD, DBNAME);
    64. $res = mysqli_query($link, \"select * from $addrec\");
    65. $rows = mysqli_num_rows($res);
    66. echo \"<table width=700 height=250 border=0 align=center class=table>\";
    67. echo \"<tr><td height=60 background=top.jpg></td></tr>\";
    68. echo \"<tr><td height=130 valign=top class=center >\";
    69. echo \"<table align=center width=600 border=0>\";
    70.  
    71. echo \"</table>\";
    72. echo\"</td></tr><tr><td height=60 background=bottom.jpg></td></tr></table>\";
    73. echo \"<br><div align=center><form action=add.php method=post> <input type=submit class=$bs value=Добавить name=addrec></form></div>\";
    74. echo \"<br>\";
    75. echo \"<br><div align=center>Всего сообщений: \".$rows;
    76. echo \"<br>Михайлов Кирилл ©</div>\";
    77. mysqli_free_result($res);
    78. mysqli_close($link);
    79. ?>");
    80. fclose($show);
    81. }
    82. ?>
    Дело в том, что этот скрипт должен создавать новый скрипт show.php в папке $addrec(что пользователи введут).
    И вроде всё получается, но тупик в ковычках.
    $show=fopen($addrec."/show.php", "a+");
    fputs($show, "тут текст");
    Получается, что двойные ковычки уже использовались в fputs, значит текст внутри них должен содержать \" ковычки...
    А что делать с одинарными ковычками?
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Присвой весь свой текст в переменную, потом сохраняй её.
    PHP:
    1. <?php
    2. $txt="тут текст $peremennaya";
    3. //или так
    4. $txt=<<<TXT
    5. тут текст
    6. $peremennaya
    7. TXT;
    8. //или так
    9. $txt=sprintf('тут "т"екст с "%s"', $peremennaya);
    10. fputs($show, $txt);
    без всяких обратных слешей

    PS. А сохранять в файл лучше функцией file_put_contents
     
  3. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    по этому скрипту вышла ошибка Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\WWW\mgb\myguestbook\myguestbook\create_mgb.php on line 70
    это там, где начинается echo "<tr bgcolor=$tc><td align=center>".$r['name']."</td><td align=center>".$r['city']."</td><td align=center>".$r['email']."</td>";
    PHP:
    1.  
    2. mkdir($addrec);
    3.  
    4. $s=<<<TXT
    5. <html>
    6. <head>
    7. <title>myguestbook</title>
    8. <link rel="stylesheet" href="style.css" type="text/css">
    9. </head>
    10. <body bgcolor=$fc>
    11. <div align=center><img src=$shapka></div><br>
    12. </body>
    13. </html>
    14. <?php
    15. define ("SERVER", "localhost");
    16. define ("USERNAME", "root");
    17. define ("PASSWORD", "123");
    18. define ("DBNAME", "gbook");
    19. $link=new mysqli (SERVER, USERNAME, PASSWORD, DBNAME);
    20. $res = mysqli_query($link, "select * from $addrec");
    21. $rows = mysqli_num_rows($res);
    22. echo "<table width=700 height=250 border=0 align=center class=table>";
    23. echo "<tr><td height=60 background=top.jpg></td></tr>";
    24. echo "<tr><td height=130 valign=top class=center >";
    25. echo "<table align=center width=600 border=0>";
    26. for ($i=0; $i < $rows; $i++){
    27.     $r = mysqli_fetch_assoc($res);
    28.     echo "<tr bgcolor=$tc><td align=center>".$r['name']."</td><td align=center>".$r['city']."</td><td align=center>".$r['email']."</td>";
    29.     echo "<td align=center>".$r['date']."</td><td align=center><a href=delete.php?n=".$r['id'].''>Удалить</a></td></tr><tr bgcolor=$tc><td align=center colspan=5>".$r['message']."</td></tr>";
    30. }
    31. echo "</table>";
    32. echo"</td></tr><tr><td height=60 background=bottom.jpg></td></tr></table>";
    33. echo "<br><div align=center><form action=add.php method=post> <input type=submit class=$bs value=Добавить name=addrec></form></div>";
    34. echo "<br>";
    35. echo "<br><div align=center>Всего сообщений: ".$rows;
    36. echo "<br>Михайлов Кирилл ©</div>";
    37. mysqli_free_result($res);
    38. mysqli_close($link);
    39. ?>
    40. TXT;
    41. $show=fopen($addrec."/show.php", "a+");
    42. fputs($show, $s);
    43. fclose($show);
    44. }
     
  4. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    вот, упростил код... теперь жалуется на 43 строку
    PHP:
    1.  
    2. <?php
    3. if(isset($_POST['admin'])) {$admin = $_POST['admin'];}
    4. if(isset($_POST['name_mgb'])) {$name_mgb = $_POST['name_mgb'];}
    5. if(isset($_POST['email'])) {$email = $_POST['email'];}
    6. if(isset($_POST['addrec'])) {$addrec = $_POST['addrec'];}
    7.  
    8. if($_POST['create']){
    9. //создание:папки, файлов внутри неё, а это show.php, admin.php, add.php, delete.php
    10. define ("SERVER", "localhost");
    11. define ("USERNAME", "root");
    12. define ("PASSWORD", "123");
    13. define ("DBNAME", "gbook");
    14. $link=new mysqli(SERVER, USERNAME, PASSWORD, DBNAME);
    15. $q="create table if not exists $addrec(
    16.  'id' int(4) NOT NULL auto_increment,
    17.  'name' char(25) default NULL,
    18.  'city' char(30) default NULL,
    19.  'email' char(30) default NULL,
    20.  'date' datetime default NULL,
    21.  'message' text,
    22.  PRIMARY KEY  ('id')
    23. )";
    24. $res=$link->query($q);
    25.  
    26. mkdir($addrec);
    27.  
    28. $s=<<<TXT
    29. <html>
    30. <head>
    31. <title>myguestbook</title>
    32. <link rel="stylesheet" href="style.css" type="text/css">
    33. </head>
    34. <body bgcolor=whitesmoke>
    35. <div align=center><img src=../shapka.gif></div><br>
    36. </body>
    37. </html>
    38. <?php
    39. define ("SERVER", "localhost");
    40. define ("USERNAME", "root");
    41. define ("PASSWORD", "123");
    42. define ("DBNAME", "gbook");
    43. $link=new mysqli (SERVER, USERNAME, PASSWORD, DBNAME);
    44. $res = mysqli_query($link, "select * from $addrec");
    45. $rows = mysqli_num_rows($res);
    46. echo "<table width=700 height=250 border=0 align=center class=table>";
    47. echo "<tr><td height=60 background=top.jpg></td></tr>";
    48. echo "<tr><td height=130 valign=top class=center >";
    49. echo "<table align=center width=600 border=0>";
    50.  
    51. echo "</table>";
    52. echo"</td></tr><tr><td height=60 background=bottom.jpg></td></tr></table>";
    53. echo "<br><div align=center><form action=add.php method=post> <input type=submit class=button value=Добавить name=addrec></form></div>";
    54. echo "<br>";
    55. echo "<br><div align=center>Всего сообщений: ".$rows;
    56. echo "<br>Михайлов Кирилл ©</div>";
    57. mysqli_free_result($res);
    58. mysqli_close($link);
    59. ?>
    60. TXT;
    61. $show=fopen($addrec."/show.php", "a+");
    62. fputs($show, $s);
    63. fclose($show);
    64. }
    65. ?>
     
  5. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Ну и путаница. Если у тебя конструкции типа
    $link=new my...
    должны быть просто текстом, то нужно экранировать знак $, чтобы он не был воспринят, как переменная.
    \$link=new my...

    По-моему, меньше всего проблем с функцией sprintf. Строку-шаблон - в одинарные кавычки.
    PHP:
    1. <?php
    2. $s=sprintf('<html>
    3. <head>
    4. <title>myguestbook</title>
    5. <link rel="stylesheet" href="style.css" type="text/css">
    6. </head>
    7. <body bgcolor="%s">
    8. <div align=center><img src="%s"></div><br>
    9. </body>
    10. </html>
    11. <?php
    12. define ("SERVER", "localhost");
    13. define ("USERNAME", "root");
    14. define ("PASSWORD", "123");
    15. define ("DBNAME", "gbook");
    16. $link=new mysqli (SERVER, USERNAME, PASSWORD, DBNAME);
    17. $res = mysqli_query($link, "select * from $addrec");
    18. $rows = mysqli_num_rows($res);
    19. echo "<table width=700 height=250 border=0 align=center class=table>";
    20. echo "<tr><td height=60 background=top.jpg></td></tr>";
    21. echo "<tr><td height=130 valign=top class=center >";
    22. echo "<table align=center width=600 border=0>";
    23. for ($i=0; $i < $rows; $i++){
    24. $r = mysqli_fetch_assoc($res);
    25. echo "<tr bgcolor="%s"><td align=center>".$r[\'name\']."</td><td align=center>".$r[\'city\']."</td><td align=center>".$r[\'email\']."</td>";
    26. echo "<td align=center>".$r[\'date\']."</td><td align=center><a href=delete.php?n=".$r[\'id\'].''>Удалить</a></td></tr><tr bgcolor=$tc><td align=center colspan=5>".$r[\'message\']."</td></tr>";
    27. }
    28. echo "</table>";
    29. echo"</td></tr><tr><td height=60 background=bottom.jpg></td></tr></table>";
    30. echo "<br><div align=center><form action=add.php method=post> <input type=submit class="%s" value=Добавить name=addrec></form></div>";
    31. echo "<br>";
    32. echo "<br><div align=center>Всего сообщений: ".$rows;
    33. echo "<br>Михайлов Кирилл ©</div>";
    34. mysqli_free_result($res);
    35. mysqli_close($link);
    36. ?>', $fc, $shapka, $tc, $bs);//эти переменные точно существуют?
    37. ?>
     
  6. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    спасибо))) всё получается, кроме $addrec в создании базы данных и в её использовании, в код(созданный) добавляется переменная $addrec вместо текст, который укажут в форме о_О
     
  7. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    а, ну так эту $addrec нужно также вынести, вместо неё поставить %s
    PHP:
    1. <?php
    2. $s=sprintf('<html>
    3. <head>
    4. <title>myguestbook</title>
    5. <link rel="stylesheet" href="style.css" type="text/css">
    6. </head>
    7. <body bgcolor="%s">
    8. <div align=center><img src="%s"></div><br>
    9. </body>
    10. </html>
    11. <?php
    12. define ("SERVER", "localhost");
    13. define ("USERNAME", "root");
    14. define ("PASSWORD", "123");
    15. define ("DBNAME", "gbook");
    16. $link=new mysqli (SERVER, USERNAME, PASSWORD, DBNAME);
    17. $res = mysqli_query($link, "select * from %s");
    18. $rows = mysqli_num_rows($res);
    19. echo "<table width=700 height=250 border=0 align=center class=table>";
    20. echo "<tr><td height=60 background=top.jpg></td></tr>";
    21. echo "<tr><td height=130 valign=top class=center >";
    22. echo "<table align=center width=600 border=0>";
    23. for ($i=0; $i < $rows; $i++){
    24. $r = mysqli_fetch_assoc($res);
    25. echo "<tr bgcolor="%s"><td align=center>".$r[\'name\']."</td><td align=center>".$r[\'city\']."</td><td align=center>".$r[\'email\']."</td>";
    26. echo "<td align=center>".$r[\'date\']."</td><td align=center><a href=delete.php?n=".$r[\'id\'].''>Удалить</a></td></tr><tr bgcolor="%s"><td align=center colspan=5>".$r[\'message\']."</td></tr>";
    27. }
    28. echo "</table>";
    29. echo"</td></tr><tr><td height=60 background=bottom.jpg></td></tr></table>";
    30. echo "<br><div align=center><form action=add.php method=post> <input type=submit class="%s" value=Добавить name=addrec></form></div>";
    31. echo "<br>";
    32. echo "<br><div align=center>Всего сообщений: ".$rows;
    33. echo "<br>Михайлов Кирилл ©</div>";
    34. mysqli_free_result($res);
    35. mysqli_close($link);
    36. ?>', $fc, $shapka, $addrec, $tc, $tc, $bs);//тут важна очерёдность
    37. ?>
     
  8. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    ясно, понял)))
     
  9. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    спасибо =)
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Если, вдруг, нужно будет менять параметры подключения к бд, а такое часто бывает, то вот это лучше вынести в отдельный файл.
    conf.php
    PHP:
    1. <?php
    2. define ("SERVER", "localhost");
    3. define ("USERNAME", "root");
    4. define ("PASSWORD", "123");
    5. define ("DBNAME", "gbook");
    6. ?>
    и его инклудить

    PHP:
    1. <?php
    2. //...
    3. require('conf.php');
    4. defined('PASSWORD')or die('<html><head><title></title></head><body>кыш-кыш</body></html>');
    5. $link=new mysqli (SERVER, USERNAME, PASSWORD, DBNAME);
    6. //...
    7. ?>
    Иначе потом в сотнях файлов придётся менять.
     
  11. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    хорошо, учту, спасибо =)