< návrat zpět

Diskuse


Téma: Data se nezapíší do databáze rss

Zaslal/a 18.10.2017 13:56

Ahoj, mám tento script v plugins/admin/test/script.php
/* --- skript pluginu --- */
$output .= '<p>Výstup pluginu</p>';

if ($_POST)
{
$datum = date("Y-m-d H:i:s", strtotime($_POST['datum_narozeni']));
$jmeno = $_POST['jmeno'];
$prijmeni = $_POST['prijmeni'];

Db::query("
INSERT INTO test_uzivatele (jmeno, prijmeni, datum_narozeni)
VALUES ($jmeno, $prijmeni, $datum)
");

$output .='<p>Byl jste úspěšně zaregistrován.</p>';
$output .="Vaše jméno je $jmeno $prijmeni narodil jste se $datum";
}

$output .='
<form method="post">
Jméno:<br />
<input type="text" name="jmeno" /><br />
Příjmení:<br />
<input type="text" name="prijmeni" /><br />
Datum narození:<br />
<input type="text" name="datum_narozeni" /><br />
<input type="submit" value="Registrovat" />
</form>';


Ale do datábáze se neuloží, nevíte kde mám chybu? Když vyměním VALUES ($jmeno, $prijmeni, $datum) za VALUES ("Jan", "Novák", "1984-11-03") a odešlu formulář tak se do db data zapíšou.

Jméno
Kontrola
Text
  b i u s img code url hr   1 2 3 4 5 6 7 8 9 10

#020915
Jirka Daněk
Být tebou tak jsem rád, že se nezapíšou 3, protože vkládat do databáze neošetřené hodnoty je hazard.

edit: nechtěl jsi náhodou místo Y-m-d H:i:s použít jen Y-m-d?

/* --- skript pluginu --- */
$output .= '<p>Výstup pluginu</p>';

if (isset($_POST['frmsubmit']))
{
$datum = date("Y-m-d H:i:s", strtotime(_post('datum_narozeni')));

if(DB::insert("test_uzivatele", array(
'jmeno' => DB::val(_post('jmeno')),
'prijmeni' => DB::val(_post('prijmeni')),
'datum_narozeni' => DB::val($datum)
))){
$output .='<p>Byl jste úspěšně zaregistrován.</p>';
}else{
//chyba pri ukladani
}

}

$output .='
<form method="post">
Jméno:<br />
<input type="text" name="jmeno" /><br />
Příjmení:<br />
<input type="text" name="prijmeni" /><br />
Datum narození:<br />
<input type="text" name="datum_narozeni" /><br />
<input type="submit" name="frmsubmit" value="Registrovat" />
</form>';
#020916
avatar
No chtěl, ale stejně to nefunguje. Jméno se do db zapíše ale datum ne. Navíc je kolem jmena v db ' '. A nevím jak bych to oddělával pryč při výpisu 5
#020917
Jirka Daněk
Ono hodně záleží, jaký formát má ten datum v DB, nejjednodušší mi stejně přijde ukládat timestamp a ten si pak vypíšeš jak chceš. Pokud jsi použil to co jsem ti poslal, tak nevím proč by jsi tam měl mít uvozovky, hoď sem kód, takhle na slepo ti toho moc neřeknu.
#020918
avatar
/* --- skript pluginu --- */
$output .= '<p>Zde můžete vytvořit jednotlivý závod.</p><br>';

/* --- Script pro přidání závodu do databáze ---*/

$output.="<h1>Registrace závodu</h1>";

if(isset($_POST['frmsubmit'])){

$datum = date("Y-m-d", strtotime($_POST['date']));
$cas = date("H:i:s", strtotime($_POST['time']));
$admin = _loginid;

if(DB::insert('gt_race', array(
'name' => DB::val(_post('name')),
'date' => DB::val($datum),
'time' => DB::val($cas),
'max_user' => DB::val(_post('max_user')),
'admin' => $admin,
'create_date' => "now()"
))) {
$output .= "<p>Závod byl úspšěně vytvořen</p>";
} else {
$output .= "<p>Chyba při ukládání.</p>";
}

}

/* --- Vypíšeme formulář pro přidání závodu do databáze ---*/
$output.=
"<form method='post'>
Název závodu: <br><input type='text' name='name'><br/>
Datum závodu: <br><input type='date' name='date'><br/>
Čas startu závodu: <br><input type='text' name='time'><br/>
Maximální počet startujících: <br><input type='number' name='max_user'><br/>
<b>Vytvořit závod</b> <input type='submit' name='frmsubmit' value='Vytvořit'></form>
";


Kromě jména které je v 'uvozvkách' se do DB nic jiného neuloží.

když sem to měl napsané stylem výše tak to fungovalo. Ale tam sem vkládala proměná do dotazu...
#020919
Jirka Daněk
Ty uvozovky tam přidávalo DB::val() edit: DB::insert() si totiž ošetřuje vstupy automaticky, malinko jsem to upravil a databázi jsem navrhl, tak nějak jak jsem si myslel, že ji máš. https://ctrlv.cz/YjB8

a mnou upravený a otestovaný kód
/* --- skript pluginu --- */
$output = '<p>Zde můžete vytvořit jednotlivý závod.</p><br>';

/* --- Script pro přidání závodu do databáze ---*/

$output .= "<h1>Registrace závodu</h1>";

if (isset($_POST['frmsubmit']))
{
if (DB::insert('racers', array(
'name' => DB::esc(_post('name')),
'start' => _loadTime("eventstart"),
'max_user' => DB::esc(_post('max_user')),
'admin' => _loginid,
'create_date' => time(),
))
)
{
$output .= _formMessage(1, "Závod byl úspšěně vytvořen");
}
else
{
$output .= _formMessage(3, "Chyba při ukládání.");
}
}

/* --- Vypíšeme formulář pro přidání závodu do databáze ---*/
$output .=
"<form method='post'>
Název závodu: <br><input type='text' name='name'><br>
Start závodu: <br>" . _editTime("eventstart") . "<br>
Maximální počet startujících: <br><input type='number' name='max_user'><br>
" . _xsrfProtect() . "
<b>Vytvořit závod</b> <input type='submit' name='frmsubmit' value='Vytvořit'></form>
";

a když chceš používat XML zápisy nepárových tagů jako <br> tak před tím lomítkem je mezera. <br />
#020920
avatar
Diky ze mi pomahas. Mas hezky kratky kod. Jak prijdu z prace tak to vyzkousim. Nejsou nekde vysvetlene ty konstanty _edittime, _loadtime a ty _formmessages?

<br> neni validni zpusob zapisu?
#020921
Jirka Daněk
Nejsou nekde vysvetlene ty konstanty _edittime, _loadtime a ty _formmessages?
To jsou systémové funkce, dříve tu byla dokumentace, ale již delší dobu to je jen otázka, zkušeností a hledání v kódu.

<br> neni validni zpusob zapisu?
<br> ano
<br /> ano
<br/> ne
#020922
Shira
Validni je <br>, <br/> i <br /> (s mezerou se to psalo kvuli kompatibilite s dnes jiz opravdu pravekymi prohlizeci), avsak v HTML je "spravne" pouze <br>. V SL jeste /> z historickych duvodu sem tam je, to bude v nove verzi zacisteno.

Co se konstant tyce, tak vetsina z nich je definovana v databazi. V nove verzi je soubor, kde jsou zdokumentovany a je k vidění na githubu (nebude vsak uplne kompatibilni se soucasnou verzi).
#020923
avatar
Shiro - chtěl sem si zkusit nainstalovat sunlight 8 ale vyhazuje to chybu když chci instalovat, poradíš jak to zprovoznit? Prosím:

Warning: require(/Users/michal/Sites/sunlight_8x/system/vendor/kuria/class-loader/src/ClassLoader.php): failed to open stream: No such file or directory in /Users/michal/Sites/sunlight_8x/system/bootstrap.php on line 11

Fatal error: require(): Failed opening required '/Users/michal/Sites/sunlight_8x/system/vendor/kuria/class-loader/src/ClassLoader.php' (include_path='.:/Applications/MAMP/bin/php/php7.1.1/lib/php') in /Users/michal/Sites/sunlight_8x/system/bootstrap.php on line 11
#020924
Shira
Je třeba spustit composer install, viz README, ale to už jde mimo toto téma 1