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

function cimlap($par1,$par2) //$par1 - SELECT string, $par2 - connection id
{
  $result = mysql_query($par1,$par2);
    for($i=0;$i<=10;$i++)
    {
      $array=mysql_fetch_array($result);
      echo '
        <table width="100%">
          <tr>
           <td width="70%">'.$array[1].'<b>'.$array[2].'</b></td>
           <td width="30%"><b>'.$array[3].'</b></td>
          </tr>
          <tr>
           <td colspan="2" width="100%">'.nl2br(substr($array[4],0,150)).'</td>
         </tr>
        </table>
      ';
    }
}
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)

//fájl: frontend/controllers/example.php
class Example_Controller extends Controller {
  ...
  public function example()
  {
    $model = $this->load->model('example');
    $data['example_data'] = $model->get_example_data(5);
    $this->load->view('example', $data);
  }
}


//fájl: frontend/models/example_model.php
class Example_Model extends Model {
  ...
  public function get_example_data($limit=5)
  {
    $result = $this->db
                   ->select('data1, data2, data3')
                   ->from('example_table')
                   ->limit($limit)
                   ->get();
    //némi hibakezelés...
    return $result->result_array();
  }
}


//fájl: frontend/views/example_view.php
<table>
  <tbody>
<?php
foreach ($example_data as $rows):
?>
    <tr>
      <td><?php echo $row['data1'] ?></td>
      <td><?php echo $row['data2'] ?></td>
      <td><?php echo $row['data3'] ?></td>
    </tr>
<?php
endforeach;
?>
  </tbody>
</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.