PHP

session_start(); 
$username = $_POST['regduser']; 
$userpass = md5($_POST['regdpass']); 
$sql = $sql->prepare("SELECT * from Students WHERE regduser='$username' and regdpass='$userpass'");
$sql->bindParam(':username', $username);
$sql->bindParam(':userpass', $userpass);
$stmnt->execute();
$result = mysql_query($sql); 
if (mysql_num_rows($result)!= 1) { 
 $error = "Login failed"; 
 #include "loginform.php"; 
} else { 
    echo "<h1>exists</h1>";
 #$_SESSION['regduser'] = "$username"; 
 #$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
 // any other data needed to navigate the site or 
 // to authenticate the user can be added here 
 #include "membersection.php"; 
}

?>

HTML:

<form action="inc/check_regUsr.php" method="post" id="userLogon">
    <div class="field required">
        Username: <input type="text" name="regduser" tabindex="1" /><br />
        </div>
        <div class="field required">
        Password: <input type="password" name="regdpass" tabindex="2" /><br />
        </div>
        <input type="submit" name="submitUser" />
</form>

Błąd krytyczny: wywołanie funkcji członkowskiej Prepare() na obiekcie niebędącym obiektem w wierszu 9 Ta linia to:

$sql = $sql->prepare("SELECT * from Students WHERE regduser='$username' and regdpass='$userpass'");

Co tu robię źle?!

1
Jshee 4 sierpień 2011, 02:46

2 odpowiedzi

Najlepsza odpowiedź

Och, od czego zacząć...

  1. Gdzie jest nawiązywane połączenie z bazą danych $sql?
  2. W przygotowanych wyciągach używaj :placeholdername, a nie $placeholdername.
  3. Nadpisujesz $sql, niszcząc połączenie z bazą danych, jeśli kiedykolwiek je posiadałeś.
  4. $stmnt nie istnieje
  5. Co tam robi mysql_query? Masz 3 opcje: mysql, mysqli lub PDO. Trzymaj się jednego, nie mieszaj i nie dopasowuj.
5
Wrikken 4 sierpień 2011, 02:51
Dzięki za wskazówki. Gdzie jest dobre miejsce do nauki PDO lepiej INNE niż PHP.net?
 – 
Jshee
4 sierpień 2011, 04:08

$sql w ogóle nie jest przedmiotem. Musi to być obiekt, taki jak coś z PDO, np. $sql = new PDO(…).

Ponadto nie należy używać skrótów MD5 do haseł, patrz Bezpieczny hash i sól dla haseł PHP.

2
Community 23 maj 2017, 14:55