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

PHP PHP Načtení hodnot z tabulky do formuláře select American English version English version

Avatar
dobrovolny.michal:

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. července 12:03
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):

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. července 12:12
 
Nahoru Odpovědět 29. července 12:12
Avatar
dobrovolny.michal:

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

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

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

 
Nahoru Odpovědět 29. července 12:20
Avatar
dobrovolny.michal:

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. července 13:27
 
Nahoru Odpovědět 29. července 13:27
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):

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. července 21:38
Avatar
Odpovídá na Martin Konečný (pavelco1998)
dobrovolny.michal:

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. srpna 16:52
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):

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. srpna 17:11
Avatar
Odpovídá na Martin Konečný (pavelco1998)
dobrovolny.michal:
<?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. srpna 17:21
Avatar
Odpovídá na dobrovolny.michal
Martin Konečný (pavelco1998):

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. srpna 17:27
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.