Autor Zpráva
Michal Sebek
Profil
Mám tady jeden problém s aktivací e-mailu. Když v e-mailu kliknu na odkaz tak by to mělo aktivovat e-mail, ale místo toho to napíše:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a9295322/public_html/activation.php on line 11
Kód:
<?php
header('Content-type: text/html;charset=UTF-8'); 
require_once 'db.php';

if(isset($_GET['login']) AND isset($_GET['code'])){

    $login = stripslashes(htmlspecialchars(trim($_GET['login'])));
    $code = htmlspecialchars(trim($_GET['code']));

    $query = mysql_query("SELECT `id` FROM `uzivatele` WHERE `login`='".$login."'");
    if(mysql_num_rows($query)!=0)
    {
        $result = mysql_fetch_assoc($query);
        $activation = md5($result['id']).md5($login);

        if($activation == $code)
        {

            $query1 = mysql_query("UPDATE `uzivatele` SET `activation`=1 WHERE `login`='".$login."'");
            if(!$query1) { echo mysql_error() . " - " . mysql_errno(); }
            else {
                echo "Váš e-mail byl úspěšně potvrzen, teď se můžete <a href=\"index.php?page=login\">přihlásit</a>.";
            }
        } else {
            echo "Váš e-mail nebyl potvrzen <a href=\"index.php\">Hlavní stránka</a>";
        }
    } else {
        exit("Login a aktivační kód neodpovídají");
    }
} else {
    exit("Nemáte co tady dělat.");
}
?>
lionel messi
Profil
Michal Sebek:
1. Neescapuješ vstup.
$query = mysql_query("SELECT `id` FROM `uzivatele` WHERE `login`='". mysql_real_escape_string($login) ."'");
(to samé r. 19)

2. Chyba „supplied argument is not a valid MySQL result resource“
Michal Sebek
Profil
lionel messi:
Stále nefunguje :(
lionel messi
Profil
Michal Sebek:
Stále nefunguje :(
Chyba „supplied argument is not a valid MySQL result resource“
Michal Sebek
Profil
lionel messi:
No tak mi řekni co mám špatně
juriad_
Profil *
Dot


Dotaz na 10. radku selze. Ta funkce vrati FALSE.
lionel messi
Profil
Michal Sebek:
No tak mi řekni co mám špatně
Krištáľovú guľu, žiaľ, plánujem až na Vianoce. A teraz vážne: Uprav kód takto:
<?php
header('Content-type: text/html;charset=UTF-8'); 
require_once 'db.php';
 
if(isset($_GET['login']) AND isset($_GET['code'])){
 
    $login = stripslashes(htmlspecialchars(trim($_GET['login'])));
    $code = htmlspecialchars(trim($_GET['code']));
 
    $query = mysql_query("SELECT `id` FROM `uzivatele` WHERE `login`='".$login."'") or die(mysql_error());
a napíš, čo ti vypíše, inak sa z miesta veľmi nepohneme.

Poznámka: Za bežných okolností je konštrukcia or die(mysql_error()) v ostrom prostredí absolútne nevhodná, patrí na produkčné prostredie (a aj tam je to na zváženie), toto je len pre jednoduchosť.
Michal Sebek
Profil
lionel messi:
Napíše to: Unknown column 'login' in 'where clause'


Michal Sebek:
Aha, už vím, v databázi to neni login ale jmeno... Ale teď to píše že to neodpovídá ty dva kódy
lionel messi
Profil
Michal Sebek:
Asi je to blbosť, ale skús opraviť select takto:
$query = mysql_query("SELECT `id`, `login` FROM `uzivatele` WHERE `login`='".$login."'") or die(mysql_error());
Michal Sebek
Profil
lionel messi:
Nejde, nejspíš to bude tím že se ty akivační kódy lišej, zkusím je vypsat každý zvlášť


Bohužel, proměnnou activation to nevypíše, nejspíš není nastavená :(


Když to vypíšu a nedám do toho kódu to if($code == $activation){blablabla} tak to vypíše obě hodnoty. Když to tam vrátím, vypíše to pouze tu code

Čím to je? Pomozte
smiesek
Profil
já tedy nejsem odborník a spíše se snažím pochopit php a čtení jednotlivých částí kódů, jsem spíše zelenáč, ale ráda bych se pokusila zapojit do diskuse...

Michal Sebek: píšete, že jakmile to dáte do podmínky if ... nestálo by za úvahu se tedy ještě zaměřit na obsah proměnné $activation, ve které máte
$activation = md5($result['id']).md5($login);

tedy předpokládám, že proměnná z výše uvedeného $login bude v pořádku, zkuste třeba schválně nepracovat s proměnnou id a jestli bude výsledek pořád stejný, takhle když se na to dívu, bych řekla, že problém bude v zápisu $result['id'], ale taky nemusí, jdu jen podle toho co vidím a netuším, jakou logiku má ten tvar zápisu. buď zkusit jej vypustit a nebo bych zkusila tvar proměnné
$activation = md5($result).md5($login);
Michal Sebek
Profil
smiesek:
Ta proměnná result je dotaz do databáze. Takže kdybych dal jen $result, tak by to byl nesmysl. Já bych chtěl vědět proč když tam je ta část kódu, tak to nejde. Když tam není, ty výsledky se shodují (předem vygenerovaný - zaslaný na e-mail a ten právě vygenerovaný, vč. toho $result['id']).
smiesek
Profil
Michal Sebek:
ano, do databáze a právě proto si myslím, že již není nutné tam dávat další id a postačilo by jen result, protože to je viditelné z toho dotazu, že se má id vybrat, ale nechcu přesvědčovat o něčem, co nemohu odzkoušet a co se teprve učím.
Michal Sebek
Profil
smiesek:
Ale s tim ['id'] to funguje, já řeším proč když tam je část kódu tak to nejde, když tam není tak to vypočítá a hodnoty se shodují
smiesek
Profil
Michal Sebek:
a kterou prosím tedy část máte namysli?
mimochodec
Profil
Michal Sebek:
Co se shoduje? Co neproběhne?
Michal Sebek
Profil
smiesek:
Mám na mysli
    if($activation == $code)
        {
            $query1 = mysql_query("UPDATE `uzivatele` SET `activation`=1 WHERE `jmeno`='".$login."'");
            if(!$query1) { echo mysql_error() . " - " . mysql_errno(); }
            else {
                echo "Váš e-mail byl úspěšně potvrzen, teď se můžete <a href=\"index.php?page=login\">přihlásit</a>.";
            }
        } else {
            echo "Váš e-mail nebyl potvrzen <a href=\"index.php\">Hlavní stránka</a>";
        }



mimochodec:
Shoduje se předem vygenerovaný kód, který byl zaslán na e-mail s právě vygenerovaným kódem
mimochodec
Profil
Michal Sebek:
Shoduje se předem vygenerovaný kód, který byl zaslán na e-mail s právě vygenerovaným kódem

V tom[#17]: shodují se $activation a $code? Zkus

if(trim($activation) == trim($code))
Michal Sebek
Profil
mimochodec:
Nepomáhá. Problém je v tom že když tam ten kód je tak se $activation jeví jako prázdná :(


Když tam ale není, $activation se shoduje s $code (na konci mám
<?php
echo $code."<br>".$activation;
?>
mimochodec
Profil
Michal Sebek:
Co znamená "jeví jako prázdná?" Proč si vypisuješ ty proměnné někde na konci? Jestli se ten if neprovede, vypiš si je nad ním, ať se něčeho dopátráš.
Michal Sebek
Profil
Sláva, už to funguje


Aha, tak ne, ale už se to hnulo kousek dál

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: