Autor Zpráva
Saria
Profil
Jsem úplný samouk a přesto, že jsem hledla , nemohu se dopracovat ke správnému řešení. Momentálně se učím zpracovávat formuláře a údaje zapisovat do databáze. Můj problém začal tím, že nedokážu zapsat pomocí PHP, aby kategorie, vybraná uživatelem, zůstala načtena i při kontrole formuláře. ( Jde o formulář pouze cvičný.)

Dokázala jsem pouze nastavit při spuštění formuláře předvolenou kategorii.

FORMULAR:
<p><label for="kategorie">Kategorie:</label><br />
<select name="typ[]" size="5">

<option value="1" <? if($typ==1){ echo " selected"; } ?> >auto</option>

<option value="2">byty</option>
<option value="3">práce</option>
<option value="4">zvířata</option>
<option value="5">bílá technika</option>
<option value="6">hračky</option>
<option value="7">oblečení</option>
<option value="8">jiné</option>
</select>
<small><font color=#6666cc text-aligen:right>Pečlivě vyberte správnou kategorii.</small></font></p>

A možná ten první není správně, opravdu netuším. Zkoušela jsem to několika způsoby, ale bohužel....zřejmě mi chybí ta správná logika. Tak jsem ty ostatní příkazy vymyzala a posílám to holé... . Snad mi vy zkušenější poradíte správnou cestu. Předem děkuji. Saria
jogurt
Profil
u selectu nemusis uvadet name jako pole. Staci, aby se jmenoval "typ"
Jo
Saria
Profil
Děkuji, ověřování funguje.

Pak tedy stačí pouze:
if (isset($_POST['typ'])) {
$typ = $_POST['typ'];
}
else {
$typ = "";
}

a mohu vkládat do databáze? Nebo je třeba ošetřit každé value zvlášť?
Dočetla jsem se totiž, že nejvýhodnější je tyto věci tvořit v Java Scriptu. A tam jsou mé jakékoliv informace na nule.
Ptám se jako trdlo, ale pravda je taková, že jsem trdlo....
jogurt
Profil
no, ja sem taky trdlo, tak ti klidne poradim:-)
mysim, ze ten php kod na overovani, kterej jsi napsala, uplne staci. Takhle uz tam uzivatel tezko vlozi nejakou jinou hodnotu. (Ledaze by si napsal vlastni formular)
V javascriptu je to dobry, ale nestaci to; znam lidi, co ho maj vypnutej. Je to spis zjednoduseni uzivatelovy prace.
jo
Saria
Profil
Tak to je dobře, studium javy, když zápolím se vším ostatním by mi už mozek neunesl.
Mám databázi, funguje, vyřešila jsem vše (údaje se zapisují), opět krom kategorie. Nevím,zda použít při zápisu typ varchar, enum...nebo něco úplně jiného.
Když jsem řešila ve formuláři druh, použila jsem input type="radio" a, b, c a v MySQL enum.
Ale nyní, když bych chtěla, aby mi to vypsalo název vybrané kategorie nevím...
1, použiji-li enum slovo se ,předpokládám, nenačte ...
2, použiji-li varchar, ten určuje pevnou délku a netuším zda je vhodný na výběr předem daného slova.....
Děkuji za trpělivost, ráda bych napsala, že jde o momentálně dotaz poslední....ale nechci dávat naději všem šikovnějším, že je brzy doženu........
jogurt
Profil
s tim selectem je to jednoduchy, proste select ma nejake jmeno jako vsechny ostatni prvky. V php je potom v promenne $_GET["typ"] to cislo, jenz je vybrane.. pokud chces, aby to vypisovalo nazev kategorie, tak ho musis dat take do value (<option vlaue="auto">auto</option>). Pokud budes do db ukladat nazev kategorie (ne jen cislo), tak bych to dal do enum.

Javu neumim :-/ ale JavaScript jo :-)

*edit: vlastne $_POST["typ"]
Saria
Profil
Musím konstatovat, že jsem to nedotáhla do konce a mám někde chyby. Asi musím začít znovu.
Ve formuláři:
<p><label for="kategorie">Kategorie:</label><br />
<select name="typ" size="5">

<option value="auto" <? if($typ==auto){ echo " selected"; } ?>>auto</option>

<option value="byty"
<?php if ($typ==byty) echo "selected"; ?> >byty</option>
<option value="práce"
<?php if ($typ==práce) echo "selected"; ?> >práce</option>
<option value="zvířata"
<?php if ($typ==zvířata) echo "selected"; ?> >zvířata</option>
<option value="bílá technika"
<?php if ($typ==bílá_technika) echo "selected"; ?> >bílá technika</option>
<option value="hračky"
<?php if ($typ==hračky) echo "selected"; ?> >hračky</option>
<option value="oblečení"
<?php if ($typ==oblečení) echo "selected"; ?> >oblečení</option>
<option value="jiné"
<?php if ($typ==jiné) echo "selected"; ?> >jiné</option>
</select>


<small><font color=#6666cc text-aligen:right>Pečlivě vyberte správnou kategorii.</small></font></p>

Pak:
if (isset($_POST['typ'])) {
$typ = $_POST['typ'];
}
else {
$typ = "";
}


Do databáze:
enum 'auto', 'byty' .....atd. vše vypsáno
a v zápisu
"INSERT INTO inzerce (kategorie) VALUES ('typ')"; .....to vypisuji jen to podstatné, kvůli 'typ'....


Když jsem zadala názvy, pak chce po mne
Use of undefined constant auto - assumed 'auto' in <b>f:\www\xxxxxxxxxxxxxxxxx</b> on line <b>170</b><br />

>auto</option>



s čísly to šlo, .... Saria
Saria
Profil
oprava: $typ=="hračky"....chybí mi tam uvozovky,

ale ať zadám cokoli, do databáze se zapíše auto nebo byty.....není to diakritikou?
djlj
Profil
Neměl by být datový typ varchar?
Saria
Profil
To vůbec netuším.....
a kdyby ano, jaké by měl mít hodnoty?
délka, porovnání, vlastnosti, nulový, výchozí....

Pokud mi poradíte, zkusím to....
jogurt
Profil
Saria: ....není to diakritikou?
To je mozne, byt Tebou, psal bych to do databaze bez diakritiky a nebo jenom cisla a potom by se to prevadelo na opravdove nazvy. takze treba
.....................pole s nazvama
<?
$nazvy=array(NULL,"auto","byty","práce","zvířata","bílá technika","hračky","oblečení","jiné");
?>
.....................vypise formular
<select name="typ">
<?
for($a=1; $a<=count($nazvy); $a++) echo '<option value="'.$a.'">'.$nazvy[$a].'</option>';
?>
</select>
......................kdyz vkladas do db
<?
mysql_query("INSERT INTO inzerce (kategorie) VALUES ('".$typ."')");
?>
.....................kdyz ctes z db a vypisujes nazev kategorie
<?
echo $nazvy[$vyberzdb["typ"]];
?>

Tak snad se v tom vyznas :-)
jo
Saria
Profil
Dala jsem varchar, zapíše to vše co vyberu, ale nevím zda mám správně porovnání latin_swedish_ci,nulový NE, výchozí auto (jako první položka) Saria
djlj
Profil
byt Tebou, psal bych to do databaze bez diakritiky
A proč jako?
Saria
Profil
jogurt: ano rozumím, (doufám).
1, výčet, který určuje pořadí (třeba jako u měsíců)
2, Jde o cyklus (poč. výraz; podmínka; koncový výraz) jen neznám význam po <=count a pouze předpokládám, že option value je bezpředmětné. Výběr je určen cyklem....
3, nejsem si jistá zda při zápisu do DB při více řádcích může být '$u', '''.$typ.''', '$xxx', atd.
Saria
Saria
Profil
jogurt: ano rozumím, (doufám).
1, výčet, který určuje pořadí (třeba jako u měsíců)
2, Jde o cyklus (poč. výraz; podmínka; koncový výraz) jen neznám význam po <=count a pouze předpokládám, že option value je bezpředmětné. Výběr je určen cyklem....
3, nejsem si jistá zda při zápisu do DB při více řádcích může být '$u', '''.$typ.''', '$xxx', atd.
Saria
jogurt
Profil
djlj A proč jako? Jen do enum. Ale mozna je to blbost.. Tak bych to udelal ja, kdybych nemohl prijit na to proc to nefunguje.

Saria funkce count(array) varci pocet prvku pole. Podminka $a<=count($nazvy) znamena: dokud $a je mensi nebo rovne poctu prvku pole.
Saria
Profil
djld:
tvá otázka znamená: výchozí auto(první položka)
zde neexistuje jako buď víš nebo nevíš
nebo zamysli se, logicky to nedává smysl.....výchozí hodnoty má svá pravidla..
Saria
djlj
Profil
jogurt
No tak stačí právě použít varchar :).
jogurt
Profil
No tak stačí právě použít varchar :).
Ano to je taky dobre reseni. Jednodussi :-)
Saria
Profil
Milí přátelé, děkuji za cenné rady, jsem ráda, že jsem se odhodlala zde napsat a měla štěstí na trpělivé a velmi pěkně vysvětlující osůbky. (Tím myslím Vás.)
Oba dva způsoby mi jdou, jen jsem teď vyčetla, že v DB se háček píše za dva znaky, takže při nevhodném nastavení délky to dělá potíže.... pak nenačte slovo....
Ještě jednou děkuji, přeji pěkný zbytek večera.
Saria
djlj
Profil
jen jsem teď vyčetla, že v DB se háček píše za dva znaky, takže při nevhodném nastavení délky to dělá potíže.... pak nenačte slovo....
Jak jako "nenačte" slovo?
Saria
Profil
např. slovo nenačte má 7znaků, ale v DB se č rozloží na 2znaky; to jest má 8znaků, když tedy zadám délku 4 tak slovo bílá nevyhovuje je to délka 6, ......


Mohu se zeptat, jakou tématiku mám nastudovat, abych našla informace, jakým způsobem mi zůstane popis:

if (!empty($_POST['popis']))
$p = oprava_problemu($_POST['popis']);
else
$p = "";


<?php
echo "
<p><label for='popis'>Popis:</label><br />
<textarea name='popis' cols='40' rows='8'> </textarea>
"
?>

zapsaný uživatelem, má - li jinde chybu a měl by opravit údaje ve formuláři.

Domnívala jsem se, že
if (isset($_POST['popis'])) {
$p = $_POST['popis'];
}
else {
$p = "";
}

to zajistí, ale nee. Hledala jsem i na jak psát web, ale zřejmě zadávám špatné klíčové slovo pro hledání.
Děkuji a samozřejmě krásný den přeje Saria
Anonymní
Profil *
Myslím, že jsem na to přišla, vložila jsem :

<p><label for='popis'>Popis:</label><br />
<textarea name='popis' cols='40' rows='8'> <?echo $_POST["popis"]?> </textarea>

snad to není nějaký paskvil, vytáhla jsem to z nějakého scriptu.......Saria
Saria
Profil
Tak teda je to paskvil.....pak se nezapisuje do DB.....:)Saria ALE ukáže se !!!!
krteczek
Profil
saria a mezi tagy <textarea><?echo $_POST["popis"]?></textarea> nedávej mezeru, jinak ji budeš mít v proměnné, a při odeslání prázdného formuláře bude v $_POST["popis"] mezera (dvě) a každým odesláním se budou mezery přičítat...
krteczek
Anonymní
Profil *
<p><label for='popis'>Popis:</label><br />
<textarea name='popis' cols='40' rows='8'>$valp</textarea>

if (isset($_POST['popis']))
$valp ="{$_POST['popis']}";
else
$valp ="";

if (!empty($_POST['popis']))
$p = oprava_problemu($_POST['popis']);
else
$p = "";

Nakonec jsem to vyřešila takto, to jen kdyby chtěl někdo vědět, jak to dopadlo....

krteczek:
děkuji, nemohla jsem pochopit, proč mi to dělá..... a nakonec se mi udělalo na boku "posouvátko"...:))) tak jsem nevěděla, jestli jsem tak mazaná kouzelnice nebo dočista neschopná. No, a vidíš, za b, je správně....:))Saria
Toto téma je uzamčeno. Odpověď nelze zaslat.

0