Autor | Zpráva | ||
---|---|---|---|
matesek Profil |
#1 · Zasláno: 5. 3. 2010, 12:43:20
Registrace.php
<script> function a() { var polickaid = new Array("jmeno", "prijmeni", "adresa", "mesto", "psc", "telefon", "email", "nick", "heslo", "podminky"); var nazvy = new Array("jméno", "příjmení", "adresa", "město", "PSČ", "telefon", "email", "nick", "heslo", "podminky"); var obsahpoli = new Array("", "", "", "", "", "", "", "", "", "on"); var mindelka = new Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1); var chybovahlaska = ""; for (i=0;i<polickaid.length;i++) { obsahpoli[i] = document.getElementById(polickaid[i]).value; if (obsahpoli[i]<mindelka[i]) { chybovahlaska += "Vyplňte pole " + nazvy[i] + "."; // chybovahlaska += " Je třeba aspoň " + mindelka[i] + " znaků."; // lze vymazat if (i!=polickaid.length) chybovahlaska += "\n"; } } if(chybovahlaska.length>0) { window.alert(chybovahlaska); return false; } else { return true; } } </script> <form method=post action="index.php?page=registrace_zapis" name=formular onsubmit="return a();"> <table border="0" align="center"> <tr> <td> Jméno : </td> <td> <input name=jmeno id=jmeno> </td> </tr> <tr> <td> Příjmení : </td> <td> <input name=prijmeni id=prijmeni> </td> </tr> <tr> <td> Datum narození </td> <td> <input name=narozeni id=narozeni> </td> </tr> <tr> <td> Adresa : </td> <td> <input name=adresa id=adresa> </td> </tr> <tr> <td> Město : </td> <td> <input name=mesto id=mesto> </td> </tr> <tr> <td> PSČ : </td> <td> <input name=psc id=psc> </td> </tr> <tr> <td> Telefon : </td> <td> <input name=telefon id=telefon> </td> </tr> <tr> <td> E-Mail : </td> <td> <input name=email id=email> </td> </tr> <tr> <td> Nick : </td> <td> <input name=nick id=nick> </td> </tr> <tr> <td> Heslo : </td> <td> <input type="password" name=heslo id=heslo> </td> </tr> <tr> <td> Souhlasím s podmínkama (<a href="index.php?page=podminky">ZDE)</a> : </td> <td> <input type="checkbox" name=podminky id=podminky> </td> </tr> <tr> <td></td> <td> <input type=submit> </td> </tr> </table> </form> Registrace_zapis.php <?php if ($_POST['podminky']=="on") $mail = "Rockink@seznam.cz"; $predmet = "registrace"; $zprava = "Jmeno: {$_POST['jmeno']}\r\n"; $zprava .= "Prijmeni: {$_POST['prijmeni']}\r\n"; $zprava .= "Datum narozeni: {$_POST['narozeni']}\r\n"; $zprava .= "Adresa: {$_POST['adresa']}\r\n"; $zprava .= "Mesto: {$_POST['mesto']}\r\n"; $zprava .= "PSC: {$_POST['psc']}\r\n"; $zprava .= "Telefon: {$_POST['telefon']}\r\n"; $zprava .= "E-Mail: {$_POST['email']}\r\n"; $zprava .= "Nick: {$_POST['nick']}\r\n"; $zprava .= "Heslo: {$_POST['heslo']}\r\n"; $zprava .= "Podminky: {$_POST['podminky']}\r\n"; $kon = mail ($mail, $predmet, $zprava, "From: {$_POST['email']}\n"); else echo 'Musíte souhlasit s podmínkama <br> <input type=button onclick="history.back()" value="Zpět">' ?> Při odeslání dat ke zpracování se mi odešle pouze proměnná pro podmínku , ale do e-mailu se mi žádná data neodešlou . Odešle se pouze e-mail s předdefinovanýma věcma . Poradí někdo proč to tak je ? |
||
Alphard Profil |
#2 · Zasláno: 5. 3. 2010, 14:08:11
Co se stane (ukáže), když tam dáte tohle?
<?php print_r($_POST); if ($_POST['podminky']=="on") { $mail = "Rockink@seznam.cz"; $predmet = "registrace"; $zprava = "Jmeno: {$_POST['jmeno']}\r\n"; $zprava .= "Prijmeni: {$_POST['prijmeni']}\r\n"; $zprava .= "Datum narozeni: {$_POST['narozeni']}\r\n"; $zprava .= "Adresa: {$_POST['adresa']}\r\n"; $zprava .= "Mesto: {$_POST['mesto']}\r\n"; $zprava .= "PSC: {$_POST['psc']}\r\n"; $zprava .= "Telefon: {$_POST['telefon']}\r\n"; $zprava .= "E-Mail: {$_POST['email']}\r\n"; $zprava .= "Nick: {$_POST['nick']}\r\n"; $zprava .= "Heslo: {$_POST['heslo']}\r\n"; $zprava .= "Podminky: {$_POST['podminky']}\r\n"; $kon = mail ($mail, $predmet, $zprava, "From: {$_POST['email']}\n"); } else { echo 'Musíte souhlasit s podmínkama <br> <input type=button onclick="history.back()" value="Zpět">'; } ?> |
||
jabloň Profil * |
#3 · Zasláno: 5. 3. 2010, 15:02:28
Některé inputy nemají typ, možná to je tím.
|
||
AM_ Profil |
#4 · Zasláno: 5. 3. 2010, 19:29:32
vypiš si print_r($_POST), abys viděl, co vůbec přichází.
|
||
matesek Profil |
#5 · Zasláno: 6. 3. 2010, 07:20:29
Alphard:
„Co se stane (ukáže), když tam dáte tohle?“ Array ( ) Musíte souhlasit s podmínkama |
||
matesek Profil |
#6 · Zasláno: 6. 3. 2010, 07:21:16
AM:
„vypiš si print_r($_POST), abys viděl, co vůbec přichází.“ Array ( ) |
||
radvis Profil * |
#7 · Zasláno: 6. 3. 2010, 17:51:44
<input name=adresa id=adresa> Nezapoměl jsi nahodou uvozovky? <input name="adresa" id="adresa">
|
||
matesek Profil |
#8 · Zasláno: 6. 3. 2010, 18:55:41
radvis:
„Nezapoměl jsi nahodou uvozovky?“ A jsi si jistý , že tam musí být ? Mě to někde funguje i bez nich . |
||
panther Profil |
#9 · Zasláno: 6. 3. 2010, 19:08:34
radvis:
„Nezapoměl jsi nahodou uvozovky?“ ne, u jednoslovných názvů jsou nepovinné. |
||
radvis Profil * |
#10 · Zasláno: 7. 3. 2010, 01:04:22
Zkus to udělat tak, ze zatím budeš odesílat jen 2veci a až ti pujdou tak to doděláš. Jde ti tohle:
<form method="post" action="registrace_zapis.php" name="formular" onsubmit="return a();"> Nick: <input name="nick" id="nick"> Heslo: <input type="password" name="heslo" id="heslo"> <input type="checkbox" name="podminky" id="podminky"> <input type="submit" name="send" value="Odeslat"> </form> <?php if ($_POST['podminky'] == 1 ){ $mail = "Rockink@seznam.cz"; $predmet = "registrace"; $zprava = "Jmeno: {$_POST['jmeno']}\r\n"; $zprava .= "Prijmeni: {$_POST['prijmeni']}\r\n"; $zprava .= "Datum narozeni: {$_POST['narozeni']}\r\n"; $zprava .= "Adresa: {$_POST['adresa']}\r\n"; $zprava .= "Mesto: {$_POST['mesto']}\r\n"; $zprava .= "PSC: {$_POST['psc']}\r\n"; $zprava .= "Telefon: {$_POST['telefon']}\r\n"; $zprava .= "E-Mail: {$_POST['email']}\r\n"; $zprava .= "Nick: {$_POST['nick']}\r\n"; $zprava .= "Heslo: {$_POST['heslo']}\r\n"; $zprava .= "Podminky: {$_POST['podminky']}\r\n"; $kon = mail ($mail, $predmet, $zprava, "From: {$_POST['email']}\n"); }else{ echo 'Musíte souhlasit s podmínkama <br> <input type=button onclick="history.back()" value="Zpět">'; } ?> Přidal jsem tam všude "" a místo index.php?page=registrace_zapis jsem změnil na registrace_zapis.php a misto on je 1. Myslím, že při zaškrtnutém tvaru vrací 1 a při nezaškrtlém vrací 0. Zkus a uvidíš. |
||
matesek Profil |
#11 · Zasláno: 7. 3. 2010, 07:32:30
v tom registrace_zapis.php jsem nechal Array()
Array ( [nick] => 12 [heslo] => 34 [podminky] => on [send] => Odeslat ) |
||
matesek Profil |
#12 · Zasláno: 7. 3. 2010, 07:39:32
V tom svém jsem jen přidal uvozovky a už to funguje, ale nechápu, proč tam musí být.
|
||
radvis Profil * |
#13 · Zasláno: 7. 3. 2010, 12:03:22
Takže už jsi to vyřešil?:)
|
||
sysel Profil |
#14 · Zasláno: 7. 3. 2010, 18:57:11 · Upravil/a: sysel
Nabízím následující zápis.
<html><head><title>Registrace</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script>/* (c) 2010 sysel; GPL */ var napln = {jmeno: {lb:"Jméno",dl:1,tp:"text"} ,prijmeni: {lb:"Příjmení",dl:1,tp:"text"} ,narozeni: {lb:"Datum narození",dl:1,tp:"text"} ,adresa: {lb:"Adresa",dl:1,tp:"text"} ,obec: {lb:"Obec",dl:1,tp:"text"} ,psc: {lb:"PSČ",dl:5,tp:"text"} ,telefon: {lb:"Telefon",dl:9,tp:"text"} ,email: {lb:"e-mail",dl:1,tp:"text"} ,nick: {lb:"Přezdívka",dl:1,tp:"text"} ,heslo1: {lb:"Heslo",dl:1,tp:"password"} ,heslo2: {lb:"Zopakujte heslo",dl:1,tp:"password"} ,podminky: {lb:'Souhlasím s <a href="index.php?page=podminky">podmínkami</a>',dl:0,tp:"checkbox"} ,send: {lb:"Odeslat",dl:0,tp:"submit"} } function dup(oRow) { oRow.parentNode.replaceChild(oRow.cloneNode(true ),oRow.parentNode.insertRow(oRow.rowIndex+1)); } function vytvor() { var radek = document.forms.formular[0].parentNode.parentNode; for(idx in napln) { dup(radek);radek=radek.nextSibling; radek.firstChild.innerHTML=napln[idx]['lb']; radek.firstChild.nextSibling.firstChild.type=napln[idx]['tp']; radek.firstChild.nextSibling.firstChild.name=idx; }; } function kontrola(formulka) { var chyba=0; if(!formulka['podminky'].checked) { alert('Musíte souhlasit s Podmínkami'); return false} if(formulka['heslo1'].value != formulka['heslo2'].value) { alert('Hesla nesouhlasí'); return false} for(idx in napln) { if(formulka[idx].value.length < napln[idx]['dl']) { formulka[idx].style.backgroundColor = 'rgb(255, 222, 222)'; chyba++;} else {formulka[idx].style.backgroundColor = 'rgb(255, 255, 255)'} }; if(chyba) { alert('Je třeba správně vyplnit některé údaje'); return false } else return true } </script> </head> <body onload="vytvor()"> <form method=get action="#" name="formular" onsubmit="return kontrola(this);"> <table border="1" align="center"><tbody><tr><td></td><td><input type="hidden"></td></tr></tbody></table> </form> </body> </html> Přidání, ubrání řádek a podmínek je snad zřejmé. Uvozovkám se vyhneme, BTW uvnitř HTML tagu musejí uvozovky ohraničovat hodnotu. Sneslo by to ještě nějaké kosmetické úpravy - stylopis, odmazání vzorového řádku, ... - ale to už si každý může dodělat sám. V PHP se už nemusí řešit, zda bylo potvrzeno přijetí Podmínek, protože kontrola JavaScriptem zaručí, že se bez zaškrtnutého checkboxu nic neodešle. Jinak v poli $_POST[] se proměnná pocházející od checkboxu buď objeví, pokud byl zaškrtnut, a má tu hodnotu, kterou jí v HTML (popř. JS) přidělíme, nebo hodnotu defaultní, což je "on". Takže stačí testovat pouze, zda $_POST["nazevCheckboxu"] existuje. Trochu pruda, protože v některých případech nevíme, kolik checkboxů vlastně ve formuláři bylo. Pro ladění výstupu formuláře se lépe hodí method="GET" a action="#", protože výsledek je hned vidět v adresovém řádku. Ladit najednou HTML, JS a PHP je zbytečně komplikované. Dokud nefunguje odesílání, není v PHP co řešit. Provozní verse samozřejmě předpokládá method="POST" a pokud možno i protokol https. Heslo sice ve formuláři vidět není, ale metodou GET je v adresní řáde vidět zcela nahé. Pokud bych se mohl vyjádřit k formuláři samotnému, testování prázdných polí by šlo provést i bez požadované minimální délky, ale není to špatný nápad, maximální délku lze omezit v HTML (JS) rovnou např. maxlength="15". Lze celkem snadno (přes regexp) kontrolovat, aby v <input>ech, kde mají být pouze čísla, uživatel nic jiného nezapsal. Podobně lze kontrolovat datum, popřípadě přidat rovnou omezení vstupu pomocí vložené funkce s kalendářem. Těch je na webu hodně, stačí si vybrat. Kdysi jsem napsal i jednodušší variantu pro vstupní pole s datumem složenou ze tří svázaných <select>ů. Hezký den :-) |
||
matesek Profil |
#15 · Zasláno: 8. 3. 2010, 06:00:52
Ten kód je pěknej , ale na webu to už tak hezky nevypadá . Koukněte se sami
|
||
matesek Profil |
#16 · Zasláno: 8. 3. 2010, 06:05:08 · Upravil/a: matesek
sysel:
content="text/html; charset=utf-8"> bych změnil na: content="text/html; charset=windows-1250"> <table border="1" align="center"> bych změnil na: <table border="0" align="center"> A nějak se nemůžu vyznat, jak tam mám dát to odeslání do druhého souboru. Klasicky nakonec do form, ve kterém je tabulka ? |
||
sysel Profil |
#17 · Zasláno: 8. 3. 2010, 11:15:35
matesek:
„jak tam mám dát to odeslání do druhého souboru“ <form method="post" action="./registrace_zapis.php" name="formular" onsubmit="return kontrola(this);"> Samozřejmě, kód je třeba nastylovat. Já se však vyžívám spíše ve funkčnosti a barvičky mnou nijak moc necloumají. I když je bez diskusí uznávám! Navržená stránka není hotové dílo, je to spíš takový prototypový pokus. Ješte jsou v ní i některé logické nesrovnalosti, ale šlo mi především o ukázku, jak na to z jiného konce - totiž z klientského. Má to samozřejmě jeden velký zádrhel - když si klient vypne JavaScript jde všechno do kopru. :-) Vůbec jsem se nevěnoval příjimací stránce v PHP, tam lze rovněž udělat mnohé finty. Kupříkladu si pamatuji, že tak jako proměnné z POSTu a GETu přebírá odpovídající proměnná $_POST[]/$_GET[], když nevím, která methoda bude použitá, lze použít proměnnou $_REQUEST[] (snad si to pamatuju dobře), v ní je vlastně totéž, ale bez rozlišení, kterou methodou to přišlo. Hodně práce bude s dohledáváním, zda je použitý nick jedinečný, popř. zda už se tentýž klient nepokusil registrovat dříve, v úvahu připadá i kontrola IP addressy a odeslání kontrolního e.mailu na jeho uvedenou adresu. Může se přidat i tzv. passphrase=nějaký dotat/odpověď v případě zapomenutí hesla ... Otázku kódování si musí rozhodnout programátor, já na Applech a pod Linuxem už několik let používám utf-8 ke své i klientské spokojenosti, ale volba je na vývojáři, a od toho je tam ta explicitní deklarace. :-) |
||
matesek Profil |
#18 · Zasláno: 9. 3. 2010, 06:24:04
Nechal jsem tam starý Zapis a vše funguje jak má . VŠEM MOC DĚKUJU .
|
||
Časová prodleva: 15 let
|
0