Autor | Zpráva | ||
---|---|---|---|
Tomáš_ Profil * |
#1 · Zasláno: 7. 6. 2012, 17:59:18
Zdravím,
mám dva hostingy (wedos a banán) a php skript, který má sloužit k uložení e-mailové adresy zadané uživatelem do formuláře a jejího uložení do textového souboru, a tyto adresy jsou užívány k hromadnému zasílání novinek na webu. Script není můj, je stažený od někud z webu. Problém je v tom že, na banánu ten skript normálně funguje, ale když se ho snažím rozjet na wedosu tak to při zadávání mailové adresy vypisuje, že je zadaná v neplatném formátu - neprojde podmínka o správnosti mailu. Odesílací formulář <form method="post" action="pridej.php"> <input type="text" name="email"><br> <input type="submit" value="Odeslat"><br> <a href="zrusit.htm">zrušit zasílání</a> </form> Script, který má sloužit pro přidání adresy (pridej.php) <? if (ereg("^.+@.+\\..+$", $mail)) { ?> Váš email byl přidán do databáze.<br>Budete pravidelně informováni o změnách na těchto stránkách. <br><a href="javascript:history.go(-1)">Zpět</a> <? @mail($email,"Přidání emailu do databáze","Váš email byl na Vaše přání přidán do naší databáze.","From: odesilatel@server.cz"); @$filename="data/emaily.txt"; @$fp = fopen($filename,"r"); @$obsah = fread( $fp, filesize( $filename ) ); @fclose( $fp ); $obsah=$email."\n".$obsah; @unlink($filename); @$fp = fopen($filename,"w"); @fwrite( $fp , $obsah); @fclose($fp); } else { ?> Je tedy chyba ve scriptu nebo někde na hostingu? |
||
Mároš Profil |
#2 · Zasláno: 7. 6. 2012, 18:13:54
Neštudoval jsem script, ale vím, že od PHP 5.3 je ereg() DEPRACTED. Zkus to nahradit za preg_match.
|
||
Alphard Profil |
Nejčastější potíže s PHP (FAQ) » Nefungují proměnné z formuláře nebo z URL (vypnuté register globals)
Jinak teda dát všude @ je zajímavá technika. Teď se ještě dívám, že ve formuláři je "email" a v podmínce jen "mail", ale to by nefungovalo nikde, takže to bude asi překlep. |
||
Tomáš_ Profil * |
#4 · Zasláno: 7. 6. 2012, 19:13:46
Aha na wedosu je PHP 5.3, to znamená, že tam ereg nefunguje. Zkusil jsem tedy preg_match, ale bez výsledku.
Jinak ten "mail" je překlep :) |
||
panther Profil |
#5 · Zasláno: 7. 6. 2012, 19:17:50
Tomáš:
„Zkusil jsem tedy preg_match, ale bez výsledku.“ pouze přepsat „ereg“ na „preg“ nestačí. Podívej se do manuálu, jaký je rozdíl mezi těmito dvěma funkcemi. |
||
Majkl578 Profil |
#6 · Zasláno: 7. 6. 2012, 19:27:42
Jen bych dodal, že ereg na PHP 5.3 funguje stejně jako v předchozích verzích (ač vyhazuje E_DEPRECATED) a tudíž tady problém nebude. Problém zcela jistě způsobuje spoléhání se na povolené register_globals (řešení odkázal Alphard v [#3]).
|
||
Davex Profil |
#7 · Zasláno: 7. 6. 2012, 19:32:31
Tomáš:
Mám jen technickou připomínku. Zkus si představit co se stane, když se po provedení funkce unlink() na 18. řádku bude současně druhý proces skriptu snažit o čtení souboru na 12. a 13. řádku. Když se to takto sejde, tak přijdeš o všechny uložené adresy.
Raději používej přidávání adresy na konec souboru pomocí funkce file_put_contents($filename, $_POST['email'] . "\n", FILE_APPEND); |
||
Tomáš_ Profil * |
#8 · Zasláno: 7. 6. 2012, 19:40:58
místo if (ereg("^.+@.+\\..+$", $mail)) jsem dal if (preg_match("/^[\w-\.]+@([\w-]+\\.)+[a-zA-Z]{2,4}$/", $email))
na wedosu to napíše, že adresa byla přidaná, ale nezapíše se do souboru a ani se neodešle mail. Složka i se souborem mají nastavená práva, takže tam by problém být neměl. |
||
panther Profil |
#9 · Zasláno: 7. 6. 2012, 19:45:02
Tomáš:
na kontrolu e-mailu můžeš místo reguláru použít přímo i funkci filter_var. |
||
Davex Profil |
#10 · Zasláno: 7. 6. 2012, 19:55:33
Tomáš:
„nezapíše se do souboru a ani se neodešle mail.“ A chybu se nedozvíš, protože máš pomocí zavináče před příkazy vypnuté jejich vypisování. |
||
Tomáš_ Profil * |
#11 · Zasláno: 7. 6. 2012, 20:14:47
Nevim, zkusil sem spoustu kombinací všeho a stále to nefunguje, přitom to vždy stačí nahrát na webhosting banán a normálně to běží. Ach jo
|
||
Majkl578 Profil |
#12 · Zasláno: 7. 6. 2012, 20:42:49
Tomáš:
Odstraň ze scriptu všechny zavináče před funkcemi/proměnnými a zkus to znovu, třeba se dozvíš důvod. |
||
Tomáš_ Profil * |
#13 · Zasláno: 7. 6. 2012, 20:56:19
Majkl578:
Díky, oni tomu vadili pouze ty zavináče... :-D, na banánu to přelouskalo, ale na wedosu ne. Dík |
||
Časová prodleva: 12 let
|
0