ugrás a tartalomhoz

PHP tömb deklarálás

supi007 · 2010. Jan. 4. (H), 21.54
Hello,

Segítséget szeretnék kérni.
Egy hozzáértő hogyan csinálná azt, hogy egy adatbázisból lekérdez és az eredményt belerakja egy tömbbe.
Aztán pedig php-vel kiíratja a tömb első 5 elemét?
A válaszokat előre is köszönöm.

supesz
 
1

Így csináltam

supi007 · 2010. Jan. 4. (H), 22.44
  1. function cimlap($par1,$par2//$par1 - SELECT string, $par2 - connection id  
  2. {  
  3.   $result = mysql_query($par1,$par2);  
  4.     for($i=0;$i<=10;$i++)  
  5.     {  
  6.       $array=mysql_fetch_array($result);  
  7.       echo '  
  8.         <table width="100%">  
  9.           <tr>  
  10.            <td width="70%">'.$array[1].'<b>'.$array[2].'</b></td>  
  11.            <td width="30%"><b>'.$array[3].'</b></td>  
  12.           </tr>  
  13.           <tr>  
  14.            <td colspan="2" width="100%">'.nl2br(substr($array[4],0,150)).'</td>  
  15.          </tr>  
  16.         </table>  
  17.       ';  
  18.     }  
  19. }  
2

Konkrétabban mi a kérdés?

Thoer · 2010. Jan. 5. (K), 01.16
Van pár fontos apróság, amit biztos másképp csinálnék, például a for csak 5-ig kell, hogy menjen :), a cellákat inkább névvel érném el a későbbi flexibilitás miatt, kiírandó adatok ellenőrizném, satöbbi. Az is valószínű, hogy speciális eseteket leszámítva sosem fogok egy programba mysql parancsot írni, hanem inkább kiforrott adatbázis osztályokkal dolgozok a rengeteg extra szolgáltatás miatt.

Ugyanakkor remélem, hogy a kérdés inkább arra irányul, hogy egy ténylegesen használható szoftver esetén ez, hogy nézne ki. Ez esetben az a nagy baj ezzel a függvénnyel, hogy egyszerre piszkálja az adatbázist és irat ki eredményt, ez pedig nem felel meg a ma divatos és a többség szerint nagyon hasznos MVC szerkezeti mintának.
3

Érdekelne

supi007 · 2010. Jan. 5. (K), 09.17
Hello,

Érdekelne mire is gondolsz, mikor azt írod, hogy:
speciális eseteket leszámítva sosem fogok egy programba mysql parancsot írni, hanem inkább kiforrott adatbázis osztályokkal dolgozok

Illetve a fenti függvény hogy nézne ki divatosan?
Gondolom akkor 2 függvény kellene, hogy szétválasszam a piszkálást és a kiíratást?!

supesz
4

Speciális eset:

Thoer · 2010. Jan. 5. (K), 12.33
mondjuk van egy olyan kis miniprogim, amivel karbantartási munkálatokat szoktam végezni, többek között csinálok egy adatbázis mentést. Ennél például fontos nekem, hogy ne legyen sok fájl, ezért ott a tiedhez hasonló függvényt használok.

Azt jól érzed, hogy MVC alatt ez nem egy függvény, de nehéz teljesen általános megoldást adni. Ott lenne egy Modell osztályod/objektumod, ami a lekérést végzi és lenne egy view, ami a kiírásért lenne felelős, ráadásul mindkettőt a controller hívná meg. CodeIgniterben például ez így nézne ki: (legyen frontend az alkalmazás neve)
  1. //fájl: frontend/controllers/example.php  
  2. class Example_Controller extends Controller {  
  3.   ...  
  4.   public function example()  
  5.   {  
  6.     $model = $this->load->model('example');  
  7.     $data['example_data'] = $model->get_example_data(5);  
  8.     $this->load->view('example'$data);  
  9.   }  
  10. }  
  11.   
  12.   
  13. //fájl: frontend/models/example_model.php  
  14. class Example_Model extends Model {  
  15.   ...  
  16.   public function get_example_data($limit=5)  
  17.   {  
  18.     $result = $this->db  
  19.                    ->select('data1, data2, data3')  
  20.                    ->from('example_table')  
  21.                    ->limit($limit)  
  22.                    ->get();  
  23.     //némi hibakezelés...  
  24.     return $result->result_array();  
  25.   }  
  26. }  
  27.   
  28.   
  29. //fájl: frontend/views/example_view.php  
  30. <table>  
  31.   <tbody>  
  32. <?php  
  33. foreach ($example_data as $rows):  
  34. ?>  
  35.     <tr>  
  36.       <td><?php echo $row['data1'] ?></td>  
  37.       <td><?php echo $row['data2'] ?></td>  
  38.       <td><?php echo $row['data3'] ?></td>  
  39.     </tr>  
  40. <?php  
  41. endforeach;  
  42. ?>  
  43.   </tbody>  
  44. </table>  
PS: Nem mostanában használtam CodeIgnitert utoljára, úgyhogy nem biztos, hogy ez így le is futna, de valami nagyon hasonló az elv az biztos.
5

Éjjel már nem vettem észre

Thoer · 2010. Jan. 5. (K), 12.38
de a legnagyobb hiba a for ciklus maga, hiszen a lekérést kéne úgy tervezni, hogy max 5 elemet adjon vissza, utána elég egy while ciklus is, aminek a feltétele lehet az is, hogy a mysql_fetch_array igaz értéket ad-e vissza. Azt hiszem a kézikönyvekben tipikusan így szerepel.