Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generator klas. metoda odwzorowania.
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
ActivePlayer
http://activ.nyloncoffee.pl/?url=generator_klas

no... prosze o testy tego co wypluwa smile.gif

w planach generator formularzy:)

aha... obowiązkowe pole `id` jako klucz.

jako zapytanie dajemy np:'
CREATE TABLE `asd` (
`id` varchar(32) NOT NULL default '',
`CatID` varchar(32) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
';
SongoQ
Cos sie wysypalo w sql wpisalem SELECT id from test

OK

Teraz cos takiego, na tym sie sypie a przeciez jest poprawne zapytanie
CREATE TABLE `asd` (
id varchar(32) NOT NULL default '',
CatID varchar(32) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
';
ActivePlayer
hmm... juz jest 1 problem... rozpoznaje nazwy pól po ` ... w Twoim zapytaniu nie ma... hmm... nie mam pojecia jak je z zapytania wyciągnąć ;(
SongoQ
Zgodnie ze standardem SQLa nie jest wymagane w zapytaniu, a co lepsze to taki glupi wymysl MySQLa.
ActivePlayer
dobra, zalozmy ze trzymamy sie wersji z ` ... chce sobie tym generowac klasy zeby nie przeplatac sqla z logiką aplikacji... wiec chodzi raczej o to czy trybi wszystko.
Marcin_m
A nie możesz wyciagnac ciagu z nawiasow, zrobic explode po przecinkach, a potem po spacjach?

Zresztą niby fajnie ale czemu obsługuje tylko dwa pola? Gdy podaje wiecej pól, nadal widzi tylko dwa...
ActivePlayer
obsluguje wiecej pol.
Marcin_m
no to looknij na to

  1. CREATE TABLE `asd` (
  2. `id`int NOT NULL DEFAULT AUTO_INCREMENT,
  3. `CatID` varchar(32) NOT NULL DEFAULT '',
  4. `CatD` datetime NOT NULL,
  5. PRIMARY KEY (`id`,`CatD`)
  6. ) TYPE=MyISAM;
  7. ';


i nagle tworzą ci sie dwa pola id...
ActivePlayer
  1. <?php
  2. class asdasd_sad { 
  3.  
  4. var $id; 
  5. var $CatID; 
  6. var $CatD; 
  7. var $id; 
  8.  
  9. ?>


dobra... odczyt zapytania idzie do poprawki... ale to po spaniu. smile.gif
Bakus
@ActivePlayer: Umieść kod źródłowy (lub link do niego).
To forum jest przeznaczone na projekty z dostępnym kodem... do chwalenia się gotowymi skryptami bez źródeł jest forum "Oceny".
ActivePlayer
kod jest dosyc bardzo niestaranny, chcialem umiescic po poprawkach, ale okey:
  1. <?php
  2.  
  3. if(!isset($_POST['generuj']))
  4. {
  5. ?>
  6. <form action=\"\" method=\"POST\">
  7. Nazwa klasy: <input type=\"text\" name=\"nazwa_klasy\"><BR>
  8. Zapytanie SQL tworzące:<BR> <textarea name=\"zapytanie\" rows=6 cols=80></textarea><BR>
  9. <input type=\"submit\" value=\"Generuj\" name='generuj'>
  10. </form>
  11. <?
  12.  
  13. }
  14. else
  15. {
  16. $nazwa_klasy = $_POST['nazwa_klasy'];
  17. $zapytanie = $_POST['zapytanie'];
  18.  
  19.  
  20. $zapytanie = explode(&#092;"`\", $zapytanie);
  21.  
  22. $nazwa_tabeli = $zapytanie['1'];
  23. $ilosc_pol = ((count($zapytanie)-5)/2);
  24. for($i=3;$i<((count($zapytanie)-3));$i+=2){
  25. $pola[] = $zapytanie[$i];
  26. }
  27.  
  28. echo '
  29. <?php
  30. class '.$nazwa_klasy.'{
  31. ';
  32. for($i=0;$i<$ilosc_pol;$i++)
  33. {
  34. echo '
  35. var $'.$pola[$i].';';
  36. }
  37. echo '
  38.  
  39. function '.$nazwa_klasy.'($id = null)
  40. {
  41.  if($id != null){
  42.  $sql = mysql_query(\"SELECT * FROM `\".PREFIX.\"'.$nazwa_tabeli.'`\");
  43.  $row = mysql_fetch_assoc($sql);
  44.  ';
  45. for($i = 0; $i<$ilosc_pol;$i++){
  46. echo '
  47.  $this->'.$pola[$i].' = stripslashes($row[''.$pola[$i].'']);';
  48. }
  49. echo '
  50.  }
  51. }
  52.  
  53. function insert()
  54. {
  55. if($this->id == ''){
  56.  $sql = mysql_query(\"INSERT INTO `\".PREFIX.\"'.$nazwa_tabeli.'` 
  57.  ( `id` ,`';
  58.  $asd = implode('`, `', $pola);
  59.  $asd = substr($asd, 6);
  60. /* for($i=0; $i<$ilosc_pol;$i++){
  61. echo '`'.$pola[$i].'` ';
  62. }*/
  63. echo $asd;
  64. echo '`)
  65. VALUES
  66. ( '' , '&#092;".addslashes($this->';
  67. $asd = implode(').\"', '\".addslashes($this->', $pola);
  68. $asd = substr($asd, 29);
  69. echo $asd;
  70. echo ').\"')
  71. &#092;");
  72.  
  73. }
  74. }
  75.  
  76. function delete()
  77. {
  78. if($this->id != ''){
  79. $sql = mysql_query(&#092;"DELETE FROM `\".PREFIX.\"'.$nazwa_tabeli.'` WHERE id = \".$this->id.\" LIMIT 1\");
  80. }
  81. }
  82.  
  83.  
  84. function update()
  85. {
  86. if($this->id != ''){
  87. $sql = mysql_query( &#092;"UPDATE `\".PREFIX.\"'.$nazwa_tabeli.'` SET
  88. ';
  89. for($i=1; $i<$ilosc_pol; $i++){
  90. $ret .= ' `'.$pola[$i].'= '\".addslashes($this->'.$pola[$i].').\"',
  91. ';
  92.  
  93. }
  94. $ret = substr($ret, 0, -3);
  95. echo $ret.'
  96. '; 
  97. echo ' WHERE
  98. `id` = '\".$this->id.\"'&#092;");
  99. }
  100. }
  101. ';
  102.  
  103. echo '}?>';
  104. $form = '
  105. <?
  106. if(isset($_POST['zapisz']))
  107. {
  108. if($_POST['id'] != '')
  109. {
  110. $oDane = new '.$nazwa_klasy.'($_POST[''.$pola[0].'']);
  111. foreach($_POST as $key =>$val){
  112. $oDane->$key = $val;
  113. }
  114. $oDane->update();
  115. }
  116. else
  117. {
  118. $oDane = new '.$nazwa_klasy.'();
  119. foreach($_POST as $key =>$val){
  120. $oDane->$key = $val;
  121. }
  122. $oDane->insert();
  123. }
  124.  
  125. }
  126.  echo '
  127. <form action=\"\" method=\"POST\">
  128. <table>
  129. <td><input type=\"hidden\" name=\"'.$pola[0].'\" value=\"'.$_POST[''.$pola[0].''].'\"></td>
  130. ';
  131. for($i =1; $i<$ilosc_pol; $i++)
  132. {
  133. $form .= '<tr>
  134.  <td>'.$pola[$i].':</td>
  135.  <td><input type=\"text\" name=\"'.$pola[$i].'\" value=\"'.$_POST[''.$pola[$i].''].'\"></td>
  136. </tr>
  137. ';
  138. }
  139. $form .= '
  140. <tr><TD colspan=2><input type=\"submit\" name=\"zapisz\" value=\"Zapisz\"></td></tr>
  141. </table>
  142. </form>';?>';
  143. $var = ob_get_contents();
  144. ob_end_clean();
  145. highlight_string($var);
  146.  
  147. echo '<hr>';
  148. highlight_string($form);
  149. }
  150. ?>
SongoQ
A gdzie w tym kodzie jakas konwencja, jakies formatowanie? Oj widac ze brak poprawek nie tyle w funkcjonalnosci co w stylu sad.gif
ActivePlayer
Cytat
kod jest dosyc bardzo niestaranny
Spirit86
że tak się trochę nie na miejscu spytam, do czego to służy? tongue.gif nie mogę coś do tego dojść winksmiley.jpg
SongoQ
@Spirit86 Hm jak by to napisac: Czesto sie spotykasz z np pisaniem caly czas nowych klas ktore cos tam robia w bazie danych i @ActivePlayer chcial cos takiego napisac. Podajesz sqla tabeli a automatycznie generuje Ci klase z metodami ktore "operuja" na tej tabeli. Taki generator nieraz moze sie przydac a nieraz niestety z niego nie skorzystamy.

Ogolnie troche jestem przeciwny za wszelkiego rodzajami generatorow ale pomysl jest nawet ok.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.