Autor | Zpráva | ||
---|---|---|---|
karelm Profil |
#1 · Zasláno: 7. 12. 2009, 21:12:13
Mám formulář (odesílaný na e-mail) stažený z php.jonweb.cz, který s mé spokojenosti funguje, ale na serveru s podporou PHP5 a PHP4. Nyní jsem ale na webhostingu (onebit.cz) udělal jiný web a při objednávce jsem zvolil umístění na server s PHP 5.3. Použil jsem stejný skript, který ovšem nefunguje. Poradí mi někdo, jaký skript použít, či jak ho upravit, aby byl funkční i na PHP5.3 ? Předpokládám, že problém je právě v tom PHP5.3. PHP neumím a potřebuji opravdu jen funkční formulář. Děkuji za tip nebo radu.
|
||
Leo Profil |
#2 · Zasláno: 7. 12. 2009, 21:14:46
Bez kódu Vám někdo těžko poradí, nehledě na to, že jiný server se může lišit řadou nastavení, nejen verzí PHP (a jeho nastavením). Leo
|
||
Alphard Profil |
#3 · Zasláno: 7. 12. 2009, 21:37:04
karelm:
Viz [#2], ale jako nejpravděpodobnější příčinu bych viděl vypnuté register globals. Použijte např. $_POST['predmet'] apod. |
||
karelm Profil |
#4 · Zasláno: 7. 12. 2009, 21:54:36
Jak už jsem psal, php nerozumím , ale v tomhle doporučeném $_POST['predmet'] vidím rozdíl jen v těch jednoduchých uvozovkách (u mě je $_POST[predmet]. Mám to tedy všude zkusit doplnit?
|
||
Alphard Profil |
#5 · Zasláno: 7. 12. 2009, 21:59:14
karelm:
„Mám to tedy všude zkusit doplnit?“ Bylo by to dobré, ale nepomůže to :-) Prostě jsem neuhádl, zkopírujte sem ten kód, ať nemusíme věštit. |
||
AM_ Profil |
#6 · Zasláno: 7. 12. 2009, 23:43:29
také by byl dobrý detailnější popis problému / chybová hláška, než "nefunguje".
|
||
Majkl578 Profil |
#7 · Zasláno: 8. 12. 2009, 00:41:00
Tipl bych si, register_globals? :)
|
||
nightfish Profil |
#8 · Zasláno: 8. 12. 2009, 06:37:14
karelm:
„ale v tomhle doporučeném $_POST['predmet'] vidím rozdíl jen v těch jednoduchých uvozovkách (u mě je $_POST[predmet]. Mám to tedy všude zkusit doplnit?“ díval jsem se do odkázaného skriptu (mimochodem ten web je zřejmě napaden nějakou nákazou) a autor si s těmi apostrofy/uvozovkami opravdu těžkou hlavu nedělal - doplňte je všude tam, kde $_POST[neco] není mezi uvozovkami Majkl578: „Tipl bych si, register_globals? :)“ to už tu bylo |
||
Majkl578 Profil |
#9 · Zasláno: 8. 12. 2009, 08:39:22
nightfish
Ouha, to jsem přehlédl. :) Tak počkáme na onen slavný kód... |
||
karelm Profil |
#10 · Zasláno: 8. 12. 2009, 15:54:37
Díky všem za odpovědi, vůbec jsem nečekal, že by mi někdo poradil. Stránky (ještě nejsou hotové), kde je formulář. Přiložím i zip s celou složkou formuláře.
Projevuje se to tak, že vyplním všechna pole a objeví se, že nebyl vyplněn odesílatel a bylo špatně opsáno číslo (ochrana proti spamu). Vše je ale vyplněno správně (na jiných stránkách, které jsou na serveru s podporou PHP4 to funguje). Přiložím obrázek: Ještě přidám odpověď z podpory webhostingu: Doporučuji aktivovat chybové výpisy a pokusit se skript odladit pod novějším PHP. PHP4 je již několik let značně zastaralé a přechodu na novější PHP5 se nelze v budoucnu vyhnout. Letos vydané PHP5.3 má živatele připravit na změny a novinky v dlouhodobě připravované PHP6. Jestli něco chybí, tak se omlouvám a napravím. Díky za pomoc. |
||
AM_ Profil |
#11 · Zasláno: 8. 12. 2009, 20:43:43
tak to jsou 99% vypnuté register_globals - buď je explicitně zapni, nebo si kód přepiš tak, aby je nevyužíval (lepší, ale technicky dost náročné - pokud PHP neumíš, někdo ti to možná za nějaký peníz v závislosti na rozsahu kódu udělá).
|
||
karelm Profil |
Pokud by to někdo měl chuť přepsat - opravit, nejsem vůbec proti nějakému honoráři (web dělám zadarmo, tedy přesněji ne za peníze). Zkusil jsem opravit některé položky, ale asi to bude chtít důsledněji. Např. toto je kus kódu:
if(isset($_POST['odesli_mail'])) { $cislo2 = escapeshellcmd($_POST[cislo]); if(($_POST[sifra]) && ($_POST[sifra] != md5($cislo2))) { $oznam .= " - číslo bylo špatně opsáno<br />"; $over = FALSE; } Měl bych ty jednoduché uvozovky dopsat všude tam, kde je POST[něco] ? V tomto případě nejen u prvního řádku, ale i u druhého a třetího ? Díky za radu. Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
Alphard Profil |
#13 · Zasláno: 8. 12. 2009, 22:20:19
karelm:
„Měl bych ty jednoduché uvozovky dopsat všude tam, kde je POST[něco] ?“ Ano. Všude, kde jsou řetězce (ale ne kolem $proměnných). if(isset($_POST['odesli_mail'])) { $cislo2 = escapeshellcmd($_POST['cislo']); if(($_POST['sifra']) && ($_POST['sifra'] != md5($cislo2))) { $oznam .= " - číslo bylo špatně opsáno<br />"; $over = FALSE; } if(isset($_POST['odesilatel'])) { $odesilatel = htmlspecialchars(escapeshellcmd($_POST['odesilatel'])); $odesilatel = strtr($odesilatel, "ÁÄČCĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčcďéěëíňóöřšťúůüýž", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz"); if($odesilatel == "") { $oznam .= " - povinné pole <b>Odesílatel</b> nebylo vyplněno<br />"; $over = FALSE; } $odesilatel = substr($odesilatel, 0, 50); } if(isset($_POST['predmet'])) { $predmet = htmlspecialchars(escapeshellcmd($_POST['predmet'])); $predmet = strtr($predmet, "ÁÄČCĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčcďéěëíňóöřšťúůüýž", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz"); $predmet = substr($predmet, 0, 50); } else { $predmet = $data['vych_pred']; } if(!empty($_POST['email'])) { $email = htmlspecialchars(escapeshellcmd($_POST['email'])); $cast1 = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; $cast2 = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; if((!eregi("^$cast1+(\\.$cast1+)*@($cast2?\\.)+$cast2\$", $email)) && ($pokrac != 1)) { $oznam .= " - emailová adresa je uvedena v nesprávném formátu - jmeno@domena.koncovka<br />"; $over = FALSE; } } Povolte si výpis všech chyb, varování apod. V .htaccess php_flag display_errors on php_flag display_startup_errors on Snad to pomůže odhalit chybu. |
||
karelm Profil |
#14 · Zasláno: 9. 12. 2009, 18:26:44
Tak jsem (snad) vše opravil, ale výsledek je jen to, že zmizela některá písmena v popiscích polí. Opravil jsem i to, ale stejně je to stále stejné - viz. obrázek výše.
Výpis chyb jsem snad povolil a ještě je tam něco o Register Global - obrázek níže (je to správně ? Bylo to na Off): |
||
Lamicz Profil |
#15 · Zasláno: 10. 12. 2009, 02:16:02
Pokud je to register globals, zkusil bych toto:
foreach($_REQUEST as $key => $value){ $$key=$value; } Je to strasna prasarna, ale pak by to melo fungovat. Staci tohle naincludovat na zacatek. |
||
karelm Profil |
#16 · Zasláno: 10. 12. 2009, 18:59:31
Díky všem za pomoc, zkusím najít jiný formulář - který bych mohl použít, protože tohle asi dohromady sám nedám.
|
||
Stepan Profil * |
#17 · Zasláno: 12. 12. 2009, 09:22:28
karelm:
Pokud chcete, ozvete se mi na mail stepan.kocourek@gmail.com, zkusime s tim neco udelat. :-) |
||
Časová prodleva: 14 let
|
0