NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Načtení hodnot z tabulky do formuláře select

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
dobrovolny.michal:29.7.2016 12:03

Dobrý den, jak mohu načíst z tabulky všechny id a název značky, které jsou pod určitým id.... a následně to nechat načíst do selectu

<select name="idznacky">
<option value="<?= $idznacky ?>"><?= $nazev_znacky ?></option>
<option value="<?= $idznacky ?>"><?= $nazev_znacky ?></option>
....
</select>

a v případě podmínky, že bude načteno konkrétní vozidlo, tak přidělit do tagu <option> hodnotu selected

Např.: V tabulce značek budu mít značky: škoda auto, Volkswagen, Fiat, BMW.... podle URL rozpoznám, že se jedná o vozidlo od výrobce Škoda Auto

skript mi vypíše všechny značky, do value vyplní jejich id a u značky škoda auto mi přidá do tagu <option> selected

id nazev
1 Škoda Auto
2 Volkswagen
3 Fiat
4 BMW
<select name="idznacky">
        <option value="1" selected>Škoda Auto</option>
        <option value="2">Volkswagen</option>
        <option value="3">Fiat</option>
        <option value="4">BMW</option>
</select>

V případě, že nebude načtené konkrétní vozidlo, tak se pouze vypíšou hodnoty id a nazev do selectu a nebude se přidělovat selected

 
Odpovědět
29.7.2016 12:03
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):29.7.2016 12:12

zdravim,
záleží, jaký ovladač používáte. Pokud PDO (správně), pak stačí něco takovýho

<?php

$actualId = !empty($_GET["id"]) ? $_GET["id"] : NULL;

$query = $pdo->query("SELECT id, nazev FROM vozidlo");
$data = $query->fetchAll(PDO::FETCH_OBJ);

?>
<select name="idznacky">
<?php foreach ($data as $row): ?>
        <option value="<?php echo $row->id; ?>"<?php if ($row->id == $actualId): ?> selected<?php endif;?><?php echo $row->znacka; ?></option>
<?php endforeach; ?>
</select>

je to sice hnusný, ale s čistým PHP asi nic lepšího nevymyslíš

Editováno 29.7.2016 12:12
Nahoru Odpovědět
29.7.2016 12:12
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
dobrovolny.michal:29.7.2016 12:15

MVC jsem složil podle návodu od Davida Čapka viz. odkaz

 
Nahoru Odpovědět
29.7.2016 12:15
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):29.7.2016 12:20

Ten MVC systém neznám, ukaž mi víc kódu ať se mohu zorientovat

Nahoru Odpovědět
29.7.2016 12:20
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
dobrovolny.michal:29.7.2016 13:27

už jsem to vyřešil :) z tvého kódu jsem si vzal jednotlivé části a už to funguje :)) Děkuji :)

Editováno 29.7.2016 13:27
 
Nahoru Odpovědět
29.7.2016 13:27
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):29.7.2016 21:38

Nemáš zač. Příště prosim přes tlačítko "Odpovědět", jinak mi (ani nikomu jinýmu) nepřijde upomínka.

Nahoru Odpovědět
29.7.2016 21:38
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
dobrovolny.michal:1.8.2016 16:52

Momentálně řeším další problém a to ten, že mi nejde identifikovat VIN vozidla. Na VIN je vázané url a tudíž jednotlivé vozy odkazuje právě VIN. Hodí mi to pokaždé chybu 500 a nemohu přijít na to, co to způsobuje.

zde je odkaz na editaci https://in1.prostor.as/edit_car

<?php

class Edit_carController extends Controller
{
    public function treat($parameters)
    {
                // Hlavička stránky
                $this->head['title'] = 'Editor vozů';
                // Vytvoření instance modelu
                $managerCars = new ManagerCars();
                // Příprava prázdného vozidla
                $car = array(
                        'idznacky' => '',
                        'model' => '',
                        'spz' => '',
                        'vin' => '',
                        'palivo' => '',
                        'ps' => '',
                        'ehses' => '',
                        'stk' => '',
                        'zk' => '',
                        'typ' => '',
                );

                // Příprava prázdné značky
                $znacky = array(
                        'id' => '',
                        'nazev' => '',
                );

                // Je odeslán formulář
                if ($_POST)
                {
                        // Získání vozidla z $_POST
                        $keys = array('idznacky', 'model', 'spz', 'vin', 'palivo', 'ps', 'ehses', 'stk', 'zk', 'typ');
                        $car = array_intersect_key($_POST, array_flip($keys));
                        // Uložení vozidla do DB
                        $managerCars->saveCar($_POST['vin'], $car);
                        $this->addMessage('Vozidlo bylo úspěšně uloženo.');
                        $this->redirect('cars/' . $car['vin']);
                }
                // Je zadané URL vozidla k editaci
                else if (!empty($parameters[0]))
                {
                        $loadCar = $managerCars->returnCar($parameters[0]);
                        if ($loadCar)
                                $car = $loadCar;
                        else
                                $this->addMessage('Článek nebyl nalezen.');

                        $znacky = $managerCars->returnZnacky();
                        $this->data['znacky'] = $znacky;

                }
                else if (empty($parameters[0])){

                        $znacky = $managerCars->returnZnacky();
                        $this->data['znacky'] = $znacky;

                }
                $this->data['car'] = $car;
                $this->view = 'edit_car';
    }
}

?>
 
Nahoru Odpovědět
1.8.2016 16:52
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):1.8.2016 17:11

Tak to prvně testuj na localhostu, než to dáš na produkci. Na localu ať se ti chyby klidně vypisují. Případně si stáhni Nette Tracy.
Já nevim, jak se tenhle FW chová, když tak zkus postnout ještě zdroják toho ManagerCars (který by se měl jmenovat spíš CarsManager).

Nahoru Odpovědět
1.8.2016 17:11
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
dobrovolny.michal:1.8.2016 17:21
<?php

class ManagerCars{

  // Vrátí vozidlo z databáze podle jeho URL
        public function returnCar($url)
        {
                return Db::oneQuery('
                        SELECT cars.`idznacky` ,znacky.`nazev`, cars.`model`, cars.`spz`, cars.`vin`, cars.`palivo`, cars.`ehses`, cars.`ps`, cars.`vt_url`, cars.`stk`, cars.`zk`
      FROM `cars` JOIN znacky ON cars.`idznacky` = znacky.`id`
      WHERE `vin` = ?

                ', array($url));
        }

  // uloží nové vozidlo a nebo jej aktualizuje
        /**
         * @param $vin
         * @param $car
     */
        public function saveCar($vin, $car)
        {
                if (!$vin)
                        Db::insert('cars', $car);
                else
                        Db::change('cars', $car, 'WHERE vin = ?', array($vin));
        }

        // Vrátí seznam vozů v databázi
        public function returnCars()
        {
                return Db::allQuery('
                        SELECT znacky.`nazev`, znacky.`logo_url`, cars.`model`, cars.`spz`, cars.`vin`, cars.`palivo`, cars.`ehses`, cars.`ps`, cars.`vt_url`, cars.`stk`, cars.`zk`
                        FROM `cars` JOIN znacky ON cars.`idznacky` = znacky.`id`
                        ORDER BY cars.`spz`
                ');
        }

  public function returnZnacky()
        {
                return Db::allQuery('
                        SELECT `id`, `nazev`
      FROM `znacky`
                ');
        }

  // Odstraní vůz
        public function deleteCar($url)
        {
                Db::query('
                        DELETE FROM cars
                        WHERE vin = ?
                ', array($url));
        }

}
?>
 
Nahoru Odpovědět
1.8.2016 17:21
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):1.8.2016 17:27

Bez znalosti toho FW ti to z hlavy asi neřeknu. Pusť si to na localhostu a podívej se, jakou chybu ti to hlásí. Nebo na ostrým serveru bys někde měl mít error.log.

Nahoru Odpovědět
1.8.2016 17:27
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
dobrovolny.michal:2.8.2016 8:21

laděnka mi tam nejde spustit... :/

 
Nahoru Odpovědět
2.8.2016 8:21
Avatar
Nahoru Odpovědět
2.8.2016 10:38
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.