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.
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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íš
MVC jsem složil podle návodu od Davida Čapka viz. odkaz
Ten MVC systém neznám, ukaž mi víc kódu ať se mohu zorientovat
už jsem to vyřešil z tvého kódu jsem si vzal jednotlivé části a už to funguje Děkuji
Nemáš zač. Příště prosim přes tlačítko "Odpovědět", jinak mi (ani nikomu jinýmu) nepřijde upomínka.
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';
}
}
?>
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).
<?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));
}
}
?>
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.
laděnka mi tam nejde spustit... :/
Zobrazeno 12 zpráv z 12.