Autor Zpráva
vojja01
Profil *
Dobrý den,
Mám jeden problém na mých stránkách (primitivní sociální síť).

Mám soubor registrace.php:
<?
include "../etc/databaselogin.php";
//zakódování přihlašovacích informací
$naroz = $_POST["year"]."-".$_POST["month"]."-".$_POST["day"];
$headers = "From: Kuncbook@bozena.net\n"."Content-Type: text/plain; charset=\"utf-8\"\n";
$username = encrypt($_POST["usrnm"]);
$password = encrypt($_POST["drwsp"]);
$mail = encrypt($_POST["email"]);
$narozeniny = encrypt($naroz);


if($_POST["registrovano"]):  //pokud vyplnil pole pro registraci 
  if($_POST["drwsp"] == "" || $_POST["drwsp2"] == ""):  //nevyplněné
    header('Location: spanta-registrace.php');
   //další kontroly...
  else:  //prošel kontrolami
    if(mail($_POST["email"], "Registrace na Kuncbook", "Vitajte!!!!\nPro dokončení registrace na Kuncbook klikněte na následující odkaz:\nhttp://kuncbook.ic.cz/registration/dokonceni-registrace.php?usrnm=".$username."&drwsp=".$password."&email=".$mail."&date=".$narozeniny, $headers)): //odešlu mail
      echo "Na Váš E-mail byl odeslán odkaz na dokončení registrace ;) .";
    else:
      echo "Email se nepodařilo odeslat :(";
    endif;
  endif;
else:  //ještě nevyplnil
  include "form.php";
endif;
?>
který jednoduše odešle mail s odkazem na:

dokonceni-registrace.php:
<?
include "../etc/databaselogin.php";
//dešifrování údajů z adresy
$username = iconv("UTF-8", "ISO-8859-2", decrypt($_GET["usrnm"]));
$password = iconv("UTF-8", "ISO-8859-2", decrypt($_GET["drwsp"]));
$mail = iconv("UTF-8", "ISO-8859-2", decrypt($_GET["email"]));
$narozeniny = decrypt($_GET["date"]);

//
$sql = "
INSERT INTO uzivatele (
id ,
jmeno ,
heslo ,
email ,
narozeniny
)
VALUES (
NULL , '$username', '$password', '$mail', '$narozeniny'
);
";

$vysledek = mysql_query($sql);
if($vysledek):
  header("Location: index.php");
else:
  echo "Registrace se nepodařila :'( Opakujte prosím znovu.";
endif;
?>
který potom vloží údaje do databáze.

Jenže, někdy ty údaje vypadají ůplně jinak, než by měly. Např. místo vyplněného emailu (např. SURAN******K@seznam.cz, hvězdišky kvůli anonymitě ;) se vloží jen:
"Bwk
Není to tak vždy. Někdy to funguje, někdy ne, zkoušel jsem to mockrát. Tuším, že budu muset dát někam entitu místo ampresandu nebo tak něco, ale zatím jsem na nic nepřišel.

Předem díky za všechny příspěvky. Jen dodávám, že něco jsem mírně upravil.
panther
Profil
vojja01:
kde se ten string „bwk“ bere? V emailu nemaji uvozovky co delat, dale neosetrujes data vstupujici do SQL dotazu od uzivatele.
vojja01
Profil *
No, to právě nevím kde se to bere, měl tam být email. Nevím, kde myslíš ty uvozovky.
Šéva
Profil
vojja01:
to "bwk" se vkládá kdy, to jsi nějak vypozoroval? Napadá mě, jestli se někde nepřidávají nějaké mezery nebo znaky, které to nemá rádo... pokud to dělá u nějakého konkrétního mailu, i když by taky tohle mohlo dělat ta změna kódování...
panther
Profil
vojja01:
to právě nevím kde se to bere
a my to vedet mame?

Zacni si postupne debugovat, jestli je v jednotlivych promennych prubezne to, co v nich ocekavas. Ono je divne uz jen to, ze tahas maily apod. v URL. Co te k tomu vede?
vojja01
Profil *
Já právě nevím, proč to tam je :(( To překódování je kvůli tomu, že databáze používá jiné kódování.

Jeden příklad:
nechal jsem si odeslat zkušební email s adresou " dokonceni-registrace.php?usrnm=IIcmbf314PJ74p1N01H12/Ez3LYqeALtaVVvhX4dYxI=&drwsp=JMml4yMI11JCKSMB4QyuFQ7tGASZKYADbDNVdGGx5Ys=&email=/rb7eirhKeiZo+4s/l7lTV2arEYPyOwChU2Sn76lFI0=&date=x+3UbINwP/Hzs9698auHdNseL81V+RcsCIqkK5pcz50= "

Což by mělo znamenat: usrnm=Uživatel Náhodný, drwsp(jako heslo)=mojeheslo, email=admin.xtrazabava@email.cz, date=1995-11-14.

Jenže, v souboru dokoneni-registrace.php jsem si zapnul vypisování sql dotazu s dekódovanými daty, který vypadá takto:
INSERT INTO uzivatele ( id , usrnm , drwsp , email , narozky ) VALUES ( NULL , 'Uživatel Náhodný', 'mojeheslo', '', '5\°7_M]Ôy|tl‚ ĺ˛âł-ú€h’•%;ÚőŞô' );

Většinou je problém v tom emailu, před chvílí jsem to zkoušel znovu, jen se pro změnu neuložilo nic, pouze kolonka email obsahovala otazník :/
Šéva
Profil
vojja01:
Zkus si vsechny údaje dát do jednoho řetězce, oddělit to nějakým speciálním znakem, to celé zašifrovat a pak to posílat na mail. Následně po kliknutí na odkaz si ten retězec zpětně rozšifruj, před explode() dej do pole a pak to nasázej do DB
WeeHool
Profil
problém byl patrně v php.. přeinstaloval sem easyphp a teďka to hází jiný chyby, že je formulář moc velkej a tak.. právě pracuju na tom, jak ho zeštíhlit.. třeba mi to pak házet chybu nebude..
Šéva
Profil
WeeHool:
uprav si post_max_size v php.ini

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: