Autor Zpráva
FesanCZ
Profil
Dobrý den, vytvořil jsem Login script, který mi na localu neháže žádný error, ale na placeném hostingu mi to píše "HTTP ERROR 500"

<?php
session_start();
 
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: admin.php");
    exit;
}
 
$link = mysqli_connect("*","*", "*", "*","*") ;
 
$username = $password = "";
$username_err = $password_err = "";
 
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    if(empty(trim($_POST["username"]))){
        $username_err = "Zadejte jméno.";
    } else{
        $username = trim($_POST["username"]);
    }
    
    if(empty(trim($_POST["password"]))){
        $password_err = "Zadejte heslo";
    } else{
        $password = trim($_POST["password"]);
    }
    
    if(empty($username_err) && empty($password_err)){
        $sql = "SELECT id, username, password FROM users WHERE username = ?";
        
        if($stmt = $link->prepare($sql)){
            $stmt->bind_param("s", $param_username);
            
            $param_username = $username;
            
            if($stmt->execute()){
                $stmt->store_result();
                
                if($stmt->num_rows == 1){                    
                    $stmt->bind_result($id, $username, $hashed_password);
                    if($stmt->fetch()){
                        if(password_verify($password, $hashed_password)){
                            session_start();
                            
                            $_SESSION["loggedin"] = true;
                            $_SESSION["id"] = $id;
                            $_SESSION["username"] = $username;                            
                            
                            header("location: admin.php");
                        } else{
                            $password_err = "Heslo není správně";
                        }
                    }
                } else{
                    $username_err = "Tento uživatel neexistuje.";
                }
            } else{
                echo "Něco se pokazilo, zkuste to příště";
            }
        }
        
        $stmt->close();
    }
    
    $link->close();
}
?>
Keeehi
Profil
FesanCZ:
na placeném hostingu mi to píše "HTTP ERROR 500"
To se většinou děje když máš ve scriptu nějakou chybu ale není zapnuté vypisování chybových hlášek. Buď si zapni vypisování chybových hlášek nebo se se podívej do souboru error.log. Error log mají přístupný jen některé hostingy, takže může být jednodušší zapnout vypisování chybových hlášek přímo ve scriptu. Jakmile budeš mít text problému, nejspíše to už zvládneš vyřešit sám. Pokud ne, tak nám to sem nakopíruj.
FesanCZ
Profil
Keeehi:
Zapl jsem vypisování hlášek jak ve scriptu, tak i na hostingu a beze změny.
Kajman
Profil
Tak v tom případě se podívejte do error logu.
FesanCZ
Profil
Kajman:
Už jsem zprovoznil chybové hlášky. Hlásí mí to na řádku 16 "Can't use function return value in write context", nějaké nápady? Na localu to běží bez chyb..
FesanCZ
Profil
Došel jsem k závěru, že hosting nějakým zvláštním způsobem neumí pracovat s funkcí empty. Kdekoli použiju tuto funci tak mi hodí error, ale na Localu běží všechno jak má.
Kajman
Profil
V manuálu píší, že u starých verzích php je možné funkcí empty testovat jen proměnné.
Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words, the following will not work: empty(trim($name)). Instead, use trim($name) == false.

a) výsledek trimu uložit do proměnné, pak ho testovat funkcí empty
b) testovat dvěma rovnítky výsledek trimu, jak je zmíněné v manuálu
c) změnit si na hostingu verzi php (nejlépe na nějakou, které vychází ještě bezpečností podpora) nebo změnit celý hosting
FesanCZ
Profil
Kajman:
Super, moc děkuji. Ještě mi tam skočila jedna chybka ze kterou si nevím rady.. "Call to undefined function password_hash() in" nevíte jak na to ?
T-fon
Profil
Asi fakt tam máš nějakou starou verzi PHP, ne? password_hash je od verze 5.5
Keeehi
Profil
FesanCZ:
Víme. Když už za něco platíš, tak bys měl platit za něco aktuálního a ne za něco, co se zaseklo někde v pravěku. Funkce password_hash se v PHP objevila ve verzi 5.5 a jak už jsme předchozí chybou zjistili, na tvém hostingu je v "nejlepším" případě verze 5.4, možná ještě něco staršího. Pokud by tam byla verze 5.4, tak té zkončila 3. srpna 2015. To znamená, že už téměř čtyři roky nedostává bezpečnostní záplaty. Na hostingu který za něco stojí by měl v dnešní době najít PHP verze 7.2 nebo 7.3. Verze 7.1 je ještě akceptovatelná nicméně do konce roku by měli přejít na některou z vyšších verzí. Navíc hashovací funkce bcrypt, která by v dnešní době měla být minimem pro hashování hesel je v PHP dostupná až od verze 5.5. Asi by to šlo nějak sestavit z funkce crypt a algoritmu CRYPT_BLOWFISH ale nikdy není dobré s pouštět do vlastních řešení v oblasti bezpečnosti, i když tomu člověk rozumí. Prostě shrnuto, podtrženo, najdi si nějaký moderní a bezpečný hosting. Nějaký český nejlevnější seženeš i za cenu do 50 korun měsíčně.

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