Autor | Zpráva | ||
---|---|---|---|
Petrav Profil * |
#1 · Zasláno: 29. 12. 2004, 11:58:41
Při odeslání komentáře k článku prostřednictvím formuláře se mi "ztratí" proměnná id_clanku. Předpokládám, že bych její hodnotu měla předat znova s odesláním formuláře, ale nejsem schopná to tam vpašovat. Všechno ostatní se mi v databázi bez problémů uloží.
Poradíte mi? Díky moc. Ten skript zatím vypadá takto (snad se moc nezděsíte). <?php #zpracování komentáře if (isset($_GET['clanek'])) { $_GET['clanek'] = $clanek; if (isset($_POST['odeslat'])) { //Zpracovat komentář $zpráva = NULL; // vytvoření prázdné proměnné // Ověření komentáře if (empty($_POST['komentar'])) { $kom = FALSE; $zpráva .= '<p>Nenapsali jste žádný komentář!</p>'; } else { $kom = $_POST['komentar']; } //ověření uživatele if (empty($_POST['uzivatel'])) { $uz = 'anonym'; } else { $uz = $_POST['uzivatel']; } if ($kom & $uz & $clanek) { // pokud je vše ok // Zpracování komentáře require_once ('../pripoj_db.php'); // Připojit se k databázi DBInfo(); pripoj_mysql(); // vložit komentář do databáze $vlozit = "INSERT INTO t_komentare (uzivatel, komentar, vlozeno, ID_clanku) VALUES ('$uz', '$kom', NOW(), '$clanek')"; $výsledek = @mysql_query($vlozit); // Spustit dotaz mysql_close(); // Ukončit připojení k databázi. } else { $zpráva .= '<p>Něco se nepovedlo.</p>.'; } } //Konec zpracování formuláře. else { //Zobrazit zprávu (pokud něco obsahuje if (isset($zpráva)) { echo '<font color="red">', $zpráva, '</font>'; } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <fieldset><legend><h3>Váš komentář k tomuto článku</h3></legend> <p><b>Jméno: </b><input type="text" name="uzivatel" size="10" maxlength="15" value="<?php if (isset($_POST[uzivatel])) echo $_POST[uzivatel]; ?>"></p> <p><b>Komentář: </b><Textarea cols="35" rows="8" wrap="virtual" name="komentar"></textarea></p> </fieldset><br> <div align="center"><input type="submit" name="odeslat" value="odeslat"></div> </form> <?php } } ?> |
||
thingwath Profil * |
#2 · Zasláno: 29. 12. 2004, 12:07:40
Tady to je. & je operátor pro bitové AND a to má za následek něco jiného než operátor pro logické AND, který vypadá buď přímo AND nebo &&. |
||
Petrav Profil * |
#3 · Zasláno: 29. 12. 2004, 12:24:09
Tak to už jsem opravila a pořád nic.
Jakmile vyplním formulář a dám ho odeslat, otevře se mi prázdná stránka - z původního komentar.php?clanek=1 mám jen komentar.php, takže to neprojde přes ten první if (omlouvám se za tu moji "terminologii") |
||
thingwath Profil * |
#4 · Zasláno: 29. 12. 2004, 12:26:38
Tak třeba tady. Do proměnné $_GET['clanek'] se snažíš přiřadit hodnotu proměnné $clanek, který ale bude asi nulový. Předpokládám, že to chceš spíše naopak. |
||
Petrav Profil * |
#5 · Zasláno: 29. 12. 2004, 12:53:55
to taky nebude ono
jakmile ten formulář odešlu, vůbec se to na tohle místo nedostane, protože neprojde přes první podmínku if (isset($_GET['clanek'])) ta hodnota proměnné $_GET['clanek'] se odesláním formuláře zřejmě vynuluje |
||
juneau Profil * |
#6 · Zasláno: 29. 12. 2004, 12:59:43
jenze ty odesilas formular metodou POST! (method="post") ...
staci do formulare pridat skryte pole <input type="hidden" name="clanek" value="<? echo @$clanek; ?>" /> a po odeslani se nacte stranka komentaru take bez viditelneho parametru, ale zato bude id clanku obsazeno v promenne $_POST["clanek"]. Ta podminka s $_GET["clanek"] nemohla nikdy platit... protoze jsi predavala hodnoty metodou POST. |
||
Petrav Profil * |
#7 · Zasláno: 29. 12. 2004, 13:35:43
děkuju, už to funguje, na to skrytý pole bych vůbec nepřišla
|
||
juneau Profil * |
#8 · Zasláno: 29. 12. 2004, 15:50:27
hlavni je rozlisit, kdy chtit $_GET a kdy $_POST ...
$_GET hodnoty se predavaji v url jako index.php?promenna=hodnota... kliknutim na odkaz $_POST hodnoty se predavaji ze vsech poli, prvku formulare, pokud ma nastavenou metodu "post". ... kliknutim na nejake to "odeslat". |
||
Petrav Profil * |
#9 · Zasláno: 29. 12. 2004, 18:20:12
už jsem tu zas, doma mi to funguje, ale jak to umístím na hosting, zase to nejde
|
||
Petrav Profil * |
#10 · Zasláno: 29. 12. 2004, 18:21:58
teď na to koukám a zas to nepředalo tu proměnnou s id článku, doma mi to ale předává, kde je zakopaný pes?
|
||
Leo Profil |
#11 · Zasláno: 29. 12. 2004, 18:31:54
Nainstalujte si neco na prohlizeni HTTP hlavicek (pro Mozillu a Firefox je klicove slovo Live HTTP headers) a kouknete se co prohlizec skutecne na server (at uz na webu nebo localhost) posila. Leo
|
||
Petrav Profil * |
#12 · Zasláno: 29. 12. 2004, 20:00:04
do databáze se mi uloží všechno kromě id článku
|
||
Petrav Profil * |
#13 · Zasláno: 29. 12. 2004, 20:20:01
tak to vypadá, že už je to snad fakt ok - do toho skrytýho pole jsem místo @$clanek dala @$_GET[clanek]
|
||
juneau Profil * |
#14 · Zasláno: 29. 12. 2004, 22:05:33
no ano, doma ti to jelo proto, ze mas v php.ini (c:/windows) povoleno "register_globals on" ... je to jiste bezpecnostni ohrozeni, proto to maji ostre servery vypnute.
a co to dela? pokud odesles doma formularove pole s name="clanek", pak se do druhe stranky preda promenna $clanek a $_POST["clanek"] (jenze tu samou promennou $clanek dostanes, kdybys ji predavala pres url a ne pres formular. Dve ruzne metody vytvori jednu spolecnou promennou) Pokud to ale udelas na serveru, ktery ma vypnute register_globals, tak se do druhe stranky preda jen bezpecnejsi $_POST["clanek"]... zadna promenna $clanek se nevytvori. Je to o bezpecnosti. A doporucuji ti, aby sis u sebe register_globals vypla take (off) a prepsala vsechny svoje kody z $promenna do $_GET/POST["promenna"]. cim drive to udelas, tim lepe... ja to udelal po dvou letech programovani a pekne jsem se natrapil, nez jsem nasel ten nejposlednejsi $clanek (a nahradil ho $_GET["clanek"]). |
||
Leo Profil |
#15 · Zasláno: 29. 12. 2004, 22:10:43
"tak to vypadá, že už je to snad fakt ok - do toho skrytýho pole jsem místo @$clanek dala @$_GET[clanek]"
Chcete rict, ze mate ve formulari, ktery posilate metodou POST skryte pole s timhle name? To ne, ze ne? :-) Leo |
||
juneau Profil * |
#16 · Zasláno: 30. 12. 2004, 11:13:43
co je na tom name spatne? name="clanek" je snad v poho, ne? :)
ale ted taky koukam na onu hodnotu... on problem je totiz asi tady: clovek prijde na clanek pres odkaz, id clanku se preda jako GET a to se vepise do formulare pod clankem. formular se odesle do te same stranky, a z GET clanek mame POST clanek, ktery se uz do formulare opetovne nevklada. takze bych se priklanel k tomu, aby petra na zacatek scriptu jeste dopsala toto: if(@$_GET["clanek"] == "") { $_GET["clanek"] = @$_POST["clanek"]; } pokud script zjisti, ze GET clanek je prazdna, pokusi se do ni ulozit POST clanek. pokud je i ten prazdny, tak hold bude promena GET clanek prazdna tak jako tak. |
||
Petrav Profil * |
#17 · Zasláno: 30. 12. 2004, 12:06:25
juneau - dík za tip, vypnu to taky, aspoň se pak nebudu divit, že to co fungovalo, najednou nejde
Leo - asi je to příšernost, ale fakt to tam tak mám, zřejmě bych se měla stydět, ale tohle jediný funguje (samozřejmě z toho, co mě napadlo vyzkoušet), prostě jsem to jinak nevymyslela a ještě jeden dotaz - co kdybych ten formulář zpracovala metodou get? už jsem pochopila, že ty hodnoty se pak předají přes url - vadí to něčemu? |
||
Petrav Profil * |
#18 · Zasláno: 30. 12. 2004, 12:10:48
juneau - další dík, vyzkouším to a napíšu, jak jsem dopadla
(teď jsem si teprve přečetla tvůj dnešní příspěvěk) |
||
Petrav Profil * |
#19 · Zasláno: 30. 12. 2004, 13:13:35
konečně to funguje, jak má, fakt děkuju za rady a taky za vysvětlení
|
||
juneau Profil * |
#20 · Zasláno: 30. 12. 2004, 13:30:52
rado se stalo :)
btw, primlouvam se za bezvyhradne pouzivani metody POST pro formulare. Uz z principu. GET by ti mimojine strasne zasvinilo url a pak by se na takovy text tezko odkazovalo zkopirovanim adresove radky. |
||
Leo Profil |
#21 · Zasláno: 30. 12. 2004, 16:06:34
"btw, primlouvam se za bezvyhradne pouzivani metody POST pro formulare. Uz z principu. GET by ti imojine strasne zasvinilo url a pak by se na takovy text tezko odkazovalo zkopirovanim adresove radky."
Zatimco kdyz pouzijete POST tak se na vyslednou stranku neda odkazat vubec :-) Leo |
||
juneau Profil * |
#22 · Zasláno: 30. 12. 2004, 23:09:34
na to jsou permalinky :)
nebo bys odkazoval na stranka.php?idclanku=52&jmeno=petra&mejl=mejl@mejl.cz&text=nejaky strasne dlouhy komentare... atd to bys jeste i odkazanim touto adresou vlozil hezkych par komentaru :) Osobne se sam primlouvam na nepouzivani samoreloadovacih scriptu tohoto typu. clovek reloadne, jestli se neobjevil nejaky komentar, a podruhe ulozi ten, co napsal predtim. radeji komentare do db ukladat na jine strance a z ni se zase pres [meta] nebo header() vracet na onu puvodni prave zadani adresy stranka.php?clanek=xy ... pak muzes lehce odkazovat i po odeslani komentare |
||
Leo Profil |
#23 · Zasláno: 30. 12. 2004, 23:35:04
"na to jsou permalinky :)"
Jsme si nerozumeli. Vy o pridavani komentaru ja o formularich obecne - treba u vysledku vyhledavani (Google) je metoda GET uzitecna, protoze se muzu odkazat na vysledky vyhledavani. Leo |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0