Autor | Zpráva | ||
---|---|---|---|
nyllo Profil |
#1 · Zasláno: 11. 2. 2014, 17:50:37
Prosím překontroloval by mi někdo kód a opravil chyby??
<?php SetLocale(LC_ALL, "Czech"); $datum = StrFTime("%Y-%m-%d", Time()); include './class/db.php'; mysql_connect($server, $user_db, $pass_db); mysql_select_db($table_db) or die("Chyba! Databáze nebo tabulka nebyla nalezena!"); mysql_query("SET NAMES 'utf-8'"); if(isset($_POST['poslat'])) { $jmeno = htmlspecialchars($_POST['jmeno']); $prijmeni = htmlspecialchars($_POST['prijmeni']); $email = htmlspecialchars($_POST['email']); $tel = htmlspecialchars($_POST['tel']); $karta = htmlspecialchars($_POST['karta']); $date = $datum; $vloz ="insert into register set jmeno='$jmeno', prijmeni='$prijmeni', email='$email', tel='$tel', karta='$karta', date='$datum';"; echo '<script type="text/javascript" for="window" event="onLoad()"> <!-- window.location.href="index.php?stranka=registrace" //--> </script>'; } // Ověření vyplěného jména if (empty($_POST['jmeno'])) { $er_name = "Neplatné jméno!"; } else { $o1 = "1"; } if (empty($_POST['prijmeni'])) { $er_prim = "Neplatné příjmení!"; } else { $o2 = "1"; } $tel = $_POST["tel"]; $tel = eregi_replace(" ","",$tel); if(preg_match('/^\+[0-9]{12}$/', $tel)){ $o3 = "1"; } else { $er_tel = "Neplatné číslo! "; } function JeEmail ($cislo) { return ereg("^.+@.+\..+$",$cislo); } $BudemeZobrazovat=true; if (!empty($_POST)) // tak už se odesílalo a musíme kontolovat { if (!JeEmail($_POST["email"])) { // kontrolou jsme neprošli $er_mail = "Neplatný e-mail!"; } else { // kontolou jsme prošli $BudemeZobrazovat=false; $o4 = "1"; } } if ($o1 && $o2 && $o3 && $o4){ mysql_query($vloz); echo '<div class="alert alert-success">Karta byla obědnána</div>'; } else { echo '<div class="alert alert-danger"><b>'.$er_name.' '.$er_prim.' '.$er_mail.' '.$er_tel.'</b></div>'; } mysql_close(); ?> <!-- Formulář --> <br> <form method="post"> <input name="jmeno" class="form-control" placeholder="Jméno" value="<?echo $_POST["jmeno"]?>" maxlength="50" /><br /> <input name="prijmeni" class="form-control" placeholder="Příjmení" value="<?echo $_POST["prijmeni"]?>" maxlength="50" /><br /> <input name="email" class="form-control" placeholder="E-mail" value="<?echo $_POST["email"]?>" maxlength="50" /><br /> <input name="tel" class="form-control" placeholder="Telefon - vyplňujte ve formátu (+420 xxx xxx xxx)" value="<?echo $_POST["tel"]?>" maxlength="50" /><br /> <?php $karts = array("VIP karta - 300Kč","Gold VIP karta - 600Kč"); echo '<select name="karta" class="form-control" type="text">'; foreach ($karts as $karta) { $k = '<option class="form" value="'. $karta . '"'; if($karta == $_POST["karta"]){ $k = $k . ' selected="selected"'; } $k = $k . '>'. $karta . '</option>'; echo $k; } echo '</select><br>'; ?> <button type="submit" class="btn btn-success" name="poslat">Objednat</button> </form> Předem děkuji |
||
janbarasek Profil |
#2 · Zasláno: 11. 2. 2014, 18:17:30
nyllo:
Ještě než začnu, tak si přečti pravidla. Tvůj kód jsi v mírně upravené podobě ukazoval už před pár dny, máš tam víc věcí, které bych udělal jinak. Většinou ale platí -> když to funguje, tak není co řešit. Nerad bych tě nějak kritizoval, ale určitě bych (aspoň já) toto změnil: - Zápisy typu tohoto jsou zbytečně příšerně roztahané: else { $o1 = "1"; } else { $o1 = 1; } - Čísla nikdy, ale opravdu NIKDY nedávej do uvozovek, protože jinak říkáš, že to je řetězec. V PHP to až tak nevadí, ale skoro každý jiný jazyk by ti už nadával. Musíš se naučit základní principy syntaxe. - Zápisy typu tohoto by se daly napsat lepší: if (empty($_POST['jmeno'])) if (isset($_POST['jmeno']) && !$_POST['jmeno']) { ... } - Občas tam máš zbytečnosti, jde to napsat rovnou: $tel = $_POST["tel"]; $tel = eregi_replace(" ","",$tel); $tel = eregi_replace(" ","",$_POST["tel"]); - Na řádku 85 je pravopisná chyba: echo '<div class="alert alert-success">Karta byla obědnána</div>'; - Kód na mě působí tak, jako kdybys ho nepsal ty, ale jen lepil z kousků. Používáš tam různé typy syntaxe. Měl by jsi tomu dát nějaký řád a napsat to pořádně. A hlavně vyházet zbytečnosti. |
||
nyllo Profil |
#3 · Zasláno: 11. 2. 2014, 18:40:48
ještě bych se chtěl optat zde zde nebyla chyba
$tel = eregi_replace(" ","",$_POST["tel"]); if(preg_match('/^\+[0-9]{12}$/', $tel)){ $o3 = 1; } else { $er_tel = "Neplatné číslo! "; } hází chybu i při otevření stránky.. |
||
janbarasek Profil |
#4 · Zasláno: 11. 2. 2014, 18:45:14
nyllo:
Ty tam testuješ platnost čísla, i když není vůbec vyplněno. Celé to hoď do podmínky, jestli se číslo odesílá. |
||
nyllo Profil |
#5 · Zasláno: 11. 2. 2014, 18:57:10
to bych poprosil o radu podmínky moc zatím nechápu :|
|
||
Tori Profil |
#6 · Zasláno: 11. 2. 2014, 18:57:54
nyllo:
Je tam pár nešikovných věcí: - postup "složím SQL dotaz, pak ověřím proměnné co jsem do něj vložila, pak dotaz provedu" je značně nepřehledný. Lepší nejdřív provést všechny kontroly vstupu z formuláře, pak teprv skládat a provádět SQL dotaz. - přesměrování po uložení dat bych řešila spíš v PHP (funkce header), co když má uživatel vypnutý JS? - na escapování řetězců vkládaných do DB se používá mysql_real_escape_string. PHP má sice nekonzistentně pojmenované funkce, ale přecejen ne až takhle blbě. :) - $k = $k . "něco"; je přehlednější takhle: $k .= "něco";
- místo proměnných $o1 - $o4 by bylo jednodušší všechny chybové hlášky ukládat do jednoho pole nebo řetězce, a před uložením otestovat jestli je neprázdný. (A samozřejmě na začátku skriptu téhle proměnné přiřadit tu prázdnou výchozí hodnotu.) - místo ereg* funkcí používejte preg_*, syntax je skoro stejná - Je rozdíl mezi "objednat" a "obědvat" (ř. 85). |
||
nyllo Profil |
#7 · Zasláno: 11. 2. 2014, 19:08:42
JS je nyní odebraný, pravopisné chyby jsou také opravené vše tak nějako funguje jak potřebuji. jen nevím co s tím ověřením na telefonní číslo..
|
||
Joker Profil |
janbarasek:
„Zápisy typu tohoto jsou zbytečně příšerně roztahané“ > Jde to zkrátit na: else { $o1 = 1; } Jde, ale většina coding standards takový zápis nedoporučuje, či přímo zakazuje. Preferovaný zápis podmínky je obvykle jeden z následujících dvou: if (podmínka) { // kód } else { // kód } if (podmínka) { // kód } else { // kód } Takže zrovna tohle měl nyllo správně. Doplnění: Péhápko.cz používá ten první zápis. |
||
nyllo Profil |
#9 · Zasláno: 11. 2. 2014, 19:46:24
bohužel stále nevím jak toto upravit.. bohužel jsem nenašel žádné řešení
$telefon = eregi_replace(" ","",$_POST["tel"]); if(preg_match('/^\+[0-9]{12}$/', $telefon)){ $o3 = 1; } else { $er_tel = "Neplatné číslo! "; } |
||
Again Profil |
#10 · Zasláno: 11. 2. 2014, 20:14:51
janbarasek:
když to funguje, tak není co řešit V tom případě bych po tobě nerad přebíral projekt, protože "ono to funguje" není výhra ... Čísla nikdy, ale opravdu NIKDY nedávej do uvozovek A co třeba PSČ nebo telefonní číslo? Samozřejmě v tomto případě zde uvozovky nepatří (předpokládá se dat. typ Integer). Musíš se naučit základní principy syntaxe. Spíše by měl porozumět datovým typům. Zjednodušil bych to na: Nezdá se mi, že by jsi něco zjednodušil. Třeba takto A ještě lépe místo ereg_replace, což je zastaralá funkce, použit preg_replace. nyllo: Nastuduj si více teorie a použivej novější zdroje, protože třeba i mysql_* extenze je zastaralá. bohužel jsem nenašel žádné řešení Právě proto se potřebuješ naučit základy, ať jenom kód "neslepuješ" ale sám píšeš. |
||
nyllo Profil |
#11 · Zasláno: 11. 2. 2014, 20:19:59
nakonec jsem ty vyřešil takto
function JeEmail ($cislo) { return ereg("^.+@.+\..+$",$cislo); } $BudemeZobrazovat=true; if (!empty($_POST)) // tak už se odesílalo a musíme kontolovat { if (!JeEmail($_POST["email"])) { // kontrolou jsme neprošli $er_mail = "Neplatný e-mail!"; } else { // kontolou jsme prošli $BudemeZobrazovat=false; $o4 = "1"; } } if (isset($_POST['jmeno']) && !$_POST['jmeno']) { $er_name = "Neplatné jméno!"; } else { $o1 = 1; }; if (isset($_POST['prijmeni']) && !$_POST['prijmeni']) { $er_prim = "Neplatné příjmení!"; } else { $o2 = 1; }; if (!empty($_POST)) // tak už se odesílalo a musíme kontolovat { $telefon = eregi_replace(" ","",$_POST["tel"]); if(preg_match('/^\+[0-9]{12}$/', $telefon)){ $o3 = 1; } else { $er_tel = "Neplatné číslo! "; } } if (!empty($_POST)) // tak už se odesílalo a musíme kontolovat { if ($o1 && $o2 && $o3 && $o4) { mysql_query($vloz); mail("mc.ico.mc@gmail.com", $predmet, $zprava, "From: " . $email); echo '<div class="alert alert-success">Karta byla objednána</div>'; } else { echo '<div class="alert alert-danger"><b>'.$er_name.' '.$er_prim.' '.$er_mail.' '.$er_tel.'</b></div>'; } } |
||
abc Profil |
#12 · Zasláno: 11. 2. 2014, 20:21:48
„A ještě lépe místo ereg_replace, což je zastaralá funkce, použit preg_replace.“
A nebo str_replace, vždyť chce jen vyhodit mezery.. |
||
nyllo Profil |
#13 · Zasláno: 11. 2. 2014, 20:34:47
ještě se chci zeptat zda je možné užít funkci takto
Část první i or die("Chyba! Databáze nebo tabulka nebyla nalezena!"); mysql_query("SET NAMES 'utf-8'"); if(isset($_POST['poslat'])) { $to = 'mc.ico.mc@gmail.com'; $subject = 'Nová objednánka karty'; $message = " ".$_POST["jmeno"]." ".$_POST["prijmeni"]." ".$_POST["tel"]." ".$_POST["email"]." ".$_POST["karta"]." ".$datum." "; $jmeno = htmlspecialchars($_POST['jmeno']); Část druhá else { $er_tel = "Neplatné číslo! "; } } if (!empty($_POST)) // tak už se odesílalo a musíme kontolovat { if ($o1 && $o2 && $o3 && $o4) { mysql_query($vloz); mail($to, $subject, $message); echo '<div class="alert alert-success">Karta byla objednána</div>'; } else { |
||
janbarasek Profil |
#14 · Zasláno: 11. 2. 2014, 21:02:31
nyllo:
„ještě se chci zeptat zda je možné užít funkci takto“ Ano, pokud je server správně nastaven, tak by to mělo fungovat. Ze zkušenosti však vím, že samotná funkce mail() není úplně ideální, protože občas špatně pracuje s diakritikou, snad nebudeš mít také takový problém. |
||
nyllo Profil |
#15 · Zasláno: 11. 2. 2014, 21:06:13
ještě mě napadlo to nahradit funkcí
$hlavicka = 'From:' . $_POST['email']; $hlavicka .= "\nMIME-Version: 1.0\n"; $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n"; $adresa = 'mc.ico.mc@gmail.com'; $message = " ".$_POST["jmeno"]." ".$_POST["prijmeni"]." ".$_POST["tel"]." ".$_POST["email"]." ".$_POST["karta"]." ".$datum." "; $predmet = 'Nová objednánka karty'; mb_send_mail($adresa, $predmet, $message, $hlavicka); a však čeština opravdu nejde |
||
abc Profil |
janbarasek:
„Ano, pokud je server správně nastaven, tak by to mělo fungovat. Ze zkušenosti však vím, že samotná funkce mail() není úplně ideální, protože občas špatně pracuje s diakritikou, snad nebudeš mít také takový problém.“ A máš to něčím podložené nebo jen plácáš? nyllo Česká diakritika v mailech |
||
janbarasek Profil |
#17 · Zasláno: 11. 2. 2014, 21:31:24
abc:
Mám to podložené praxí hostování na Wedosu a také na to (tuším) upozorňoval Jakub Vrána ve své knize. |
||
abc Profil |
#18 · Zasláno: 11. 2. 2014, 21:36:25
„Mám to podložené praxí hostování na Wedosu“
Nefunkční příklad by nebyl? „také na to (tuším) upozorňoval Jakub Vrána ve své knize.“ strana? |
||
peta Profil |
janbarasek: Mail funguje spravne, pokud zadas spravne parametry pro kodovani do hlavicky a pripadne do predmetu. Spatne funguji programy pro cteni, ktere se snazi to prekodovat na neco jineho nebo nemaji detekci kodovani. J. Vrana tam spis mohl odkazovat na script, ktery kodovani nastavuje sam spravne.
|
||
nyllo Profil |
#20 · Zasláno: 12. 2. 2014, 14:31:29
Pro ty co hostují u Wedosu
Tato možnost funguje bez jakéhokoli problému $hlavicka = 'From:' . $_POST['email']; $hlavicka .= "\nMIME-Version: 1.0\n"; $hlavicka .= 'Content-Type: text/html; charset="utf-8"\n'; $adresa = 'romansvoboda@centrum.cz'; $message = " Jmeno: ".$_POST["jmeno"]." <br> Přijmeni: ".$_POST["prijmeni"]." <br> Telefon: ".$_POST["tel"]." <br> Email: ".$_POST["email"]." <br> Typ karty ".$_POST["karta"]." <br> Datum objednání: ".$datum." "; $predmet = 'Nová objednánka karty'; mail($adresa, $predmet, $message, $hlavicka); ale nyní hledám funkci pro automatické generování čísla uživatele. |
||
pcmanik Profil |
nyllo:
Na to automatické generovanie ti poslúži auto_increment v databáze. A každý dotaz patrí do samostatnej témy. A postol by si sem aktuálnu verziu kódu? Rád by som videl ako si s tým pokročil a či si si zobral vôbec rady ktoré ti boli dané. |
||
nyllo Profil |
#22 · Zasláno: 12. 2. 2014, 16:16:42
Kód nyní vypadá takto
<?php SetLocale(LC_ALL, "Czech"); $datum = StrFTime("%Y-%m-%d", Time()); include './class/db.php'; mysql_connect($server, $user_db, $pass_db); mysql_select_db($table_db) or die("Chyba! Databáze nebo tabulka nebyla nalezena!"); mysql_query("SET NAMES 'utf-8'"); if(isset($_POST['poslat'])) { $jmeno = htmlspecialchars($_POST['jmeno']); $prijmeni = htmlspecialchars($_POST['prijmeni']); $email = htmlspecialchars($_POST['email']); $tel = htmlspecialchars($_POST['tel']); $karta = htmlspecialchars($_POST['karta']); $date = $datum; $vloz ="insert into register set jmeno='$jmeno', prijmeni='$prijmeni', email='$email', tel='$tel', karta='$karta', date='$datum';"; } function JeEmail ($cislo) { return ereg("^.+@.+\..+$",$cislo); } $BudemeZobrazovat=true; if (!empty($_POST)) { if (!JeEmail($_POST["email"])) { $er_mail = "Neplatný e-mail!"; } else { $BudemeZobrazovat=false; $o4 = "1"; } } if (isset($_POST['jmeno']) && !$_POST['jmeno']) { $er_name = "Neplatné jméno!"; } else { $o1 = 1; }; if (isset($_POST['prijmeni']) && !$_POST['prijmeni']) { $er_prim = "Neplatné příjmení!"; } else { $o2 = 1; }; if (!empty($_POST)) { $tel = eregi_replace(" ","",$_POST["tel"]); if(preg_match('/^\+[0-9]{12}$/', $tel)){ $o3 = 1; } else { $er_tel = "Neplatné číslo! "; } } if (!empty($_POST)) { if($_POST["karta"] == vip.jpg){ $karta_over = 1; } else { $karta_over = 0; } } if (!empty($_POST)) { if ($o1 && $o2 && $o3 && $o4) { //vložení do sql mysql_query($vloz); //sql konec// ///////////////////// // generování obrázku $picture = rand(0,3000); $img_jmeno = $_POST['jmeno']; $img_prijmeni = $_POST['prijmeni']; $img_id = "#".$_POST['id'].""; $img_datum = $_POST['datum']; $img_typ = $_POST['karta']; if (!empty($_POST)) { $img = new Image("$typ"); $img->resize(1125,675, true, true); $img->set_font("OpenSans-Bold.ttf", 48, Array(255,255,255)); $img->write("$img_jmeno $img_prijmeni", 78, 565, 0, 100); $img->set_font("OpenSans-Regular.ttf", 28, Array(255,255,255)); $img->write("$img_id", 76, 626, 0, 100); $img->write("$img_datum", 415, 626, 0, 100); $img->save_jpg("output/karta$picture.jpg"); $img->destroy(); } //obrazek konec// ////////////////// // odeslání emailu// $hlavicka = 'From:' . $_POST['email']; $hlavicka .= "\nMIME-Version: 1.0\n"; $hlavicka .= 'Content-Type: text/html; charset="utf-8"\n'; $adresa = 'xxx@centrum.cz,xxx@gmail.com'; $message = " Jmeno: ".$_POST["jmeno"]." <br> Přijmeni: ".$_POST["prijmeni"]." <br> Telefon: ".$_POST["tel"]." <br> Email: ".$_POST["email"]." <br> Typ karty ".$_POST["karta"]." <br> Datum objednání: ".$datum." "; $predmet = 'Nová objednánka karty'; mail($adresa, $predmet, $message, $hlavicka); // email konec echo '<div class="alert alert-success">Karta byla objednána</div>'; } else { echo '<div class="alert alert-danger"><b>'.$er_name.' '.$er_prim.' '.$er_mail.' '.$er_tel.'</b></div>'; } } mysql_close(); ?> <!-- Formulář --> </br> <form method="post"> <input name="jmeno" class="form-control" placeholder="Jméno" value="<?echo $_POST["jmeno"]?>" maxlength="50" /><br /> <input name="prijmeni" class="form-control" placeholder="Příjmení" value="<?echo $_POST["prijmeni"]?>" maxlength="50" /><br /> <input name="email" class="form-control" placeholder="E-mail" value="<?echo $_POST["email"]?>" maxlength="50" /><br /> <input name="tel" class="form-control" placeholder="Telefon - vyplňujte ve formátu (+420 xxx xxx xxx)" value="<?echo $_POST["tel"]?>" maxlength="50" /><br /> <?php //$karts = array("VIP karta - 300Kč","Gold VIP karta - 600Kč"); // echo '<select name="karta" class="form-control" type="text">'; // foreach ($karts as $karta) { // $k = '<option class="form" value="'. $karta . '"'; // if($karta == $_POST["karta"]){ // $k = $k . ' selected="selected"'; // } // $k = $k . '>'. $karta . '</option>'; // // echo $k; // } // // echo '</select><br>'; ?> <select name="karta" class="form-control" type="text"> <option class="form" value="vip.jpg" <?php echo $_POST['karta'] == "vip.jpg" ? 'selected="selected"' : ''?>>VIP karta - 300Kč</option> <option class="form" value="golg.jpg" <?php echo $_POST['karta'] == "golg.jpg" ? 'selected="selected"' : ''?>>Gold VIP karta - 600Kč</option> </select> <br /> <button type="submit" class="btn btn-success" name="poslat">Objednat</button> <span></span> </form> Byla ještě přidána funkce pro generování obrázků do které pokaždé musím vložit nové ID shodující se DB *v kódu jsem označil místo kam chci vkládat ID |
||
nyllo Profil |
#23 · Zasláno: 12. 2. 2014, 17:36:09
napadlou mě jak vyřešit ty id
při odesílání platných údajů bych zavolal mysql_insert_id() $db_id = mysql_insert_id(); a ta by posílala aktuální id do // generování obrázku $picture = rand(0,3500); $img_jmeno = $_POST['jmeno']; $img_prijmeni = $_POST['prijmeni']; $img_id = "#100".$db_id.""; $img_datum = $_POST['datum']; $img_typ = $_POST['karta']; T['karta']; |
||
Tori Profil |
Mám pocit, že se vám budou ukládat obrázky se dvěma příponami, např. "kartavip.jpg.jpg".
↓ a jo, máte pravdu, spletla jsem si $img_typ a $picture |
||
nyllo Profil |
už jsem to zkoušel a bude se ukládat s jedním..
je to podle příslušného nastavení knihovny teď jsem si uvědomil že mi tam chybí include "image.php"; |
||
nyllo Profil |
#26 · Zasláno: 12. 2. 2014, 19:53:52
Tori:
pro objasnění $picture = rand(0,3000); $img_jmeno = $_POST['jmeno']; $img_prijmeni = $_POST['prijmeni']; $img_id = "#".$_POST['id'].""; $img_datum = $_POST['datum']; $img_typ = $_POST['karta']; if (!empty($_POST)) { $img = new Image("$img_typ"); $img->resize(1125,675, true, true); $img->set_font("OpenSans-Bold.ttf", 48, Array(255,255,255)); $img->write("$img_jmeno $img_prijmeni", 78, 565, 0, 100); $img->set_font("OpenSans-Regular.ttf", 28, Array(255,255,255)); $img->write("$img_id", 76, 626, 0, 100); $img->write("$img_datum", 415, 626, 0, 100); $img->save_jpg("output/karta$picture.jpg"); $img->destroy(); } označil jsem body které to trochu objasní je základ který je výchozí. Generátor přidá texty a uloží jako /kartaxxx.jpg
|
||
Časová prodleva: 11 let
|
0