Autor Zpráva
karelm
Profil
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
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
karelm:
Viz [#2], ale jako nejpravděpodobnější příčinu bych viděl vypnuté register globals.
Použijte např. $_POST['predmet'] apod.
karelm
Profil
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
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
také by byl dobrý detailnější popis problému / chybová hláška, než "nefunguje".
Majkl578
Profil
Tipl bych si, register_globals? :)
nightfish
Profil
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
nightfish
Ouha, to jsem přehlédl. :) Tak počkáme na onen slavný kód...
karelm
Profil
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
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
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
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
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
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 *
karelm:
Pokud chcete, ozvete se mi na mail stepan.kocourek@gmail.com, zkusime s tim neco udelat. :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0