Login - Onbekend Variable & Call to a member function prepare()
Door
B van der Leeden
op 03-07-2014 14:06
gewijzigd op 03-07-2014 15:49
2.037 views
Goedendag,
Ben een beginnende PHP'er en heb nog niet veel verstand van PDO.
Ben al een paar dagen bezig om dit werkende te krijgen maar ik blijf vastlopen op 2 punten
Ik krijg de volgende errors: Undefined variable: dbh
nu moet ik toch:
$dbh= new PDO("mysql:host=127.0.0.1;dbname=db_demopool", 'Admin', '1');
ergens boven in script zetten?? Dan maak ik toch deze variabel aan??
en volgende punt waar ik vastloop:
Call to a member function prepare()
Heb deze error gegoogled maar ik kom er effe niet meer uit
Nu moet ik een construct?? aanmaken? waar plaats ik deze en hoe moet ik deze aanmaken?
beide foutmelding zijn voor regel 19:
$sth = $dbh->prepare("SELECT * FROM account WHERE myusername=? AND mypassword=?");
Kan er iemand hier na kijken, en als mogelijk is de juiste manier laten zien. ALs ik kan zien wat ik fout doe en wat de goede manier moet zijn ben ik enorm dankbaar.
<?php
// Start Session because we will save some values to session varaible.
session_start();
// Connection to Database
try {
$dbh= new PDO("mysql:host=127.0.0.1;dbname=db_demopool", 'Admin', '1');
}
catch(PDOException $e)
{
echo $e->getMessage();
}
// Define $myusername and $mypassword
$uname=$_POST['username'];
$pword=$_POST['password'];
// We Will prepare SQL Query
$sth = $dbh->prepare("SELECT * FROM account WHERE myusername=? AND mypassword=?"); //<===== Regel 19
// bind paramenters, Named paramenters alaways start with colon(:)
$sth->bindParam('1', $uname);
$sth->bindParam('2', $pword);
// For Executing prepared statement we will use below function
$sth->execute();
// Count no. of records
$count = $sth->rowCount();
//just fetch. only gets one row. So no foreach loop needed :)
$row = $sth -> fetch();
// User Redirect Conditions will go here
if($count==1)
{
// Save type and other information in Session for future use.
$_SESSION[myusername]=$uname;
// if user type is Admin only then he can access protected page.
if($row[0] == 'Admin') { header( "location:Admin.php"); }
else { header( "location:loginsucces.php"); }
}
else
{
header("location:login.php");
}
?>
Alvast bedankt voor de hulp, zelf snap ik het ff totaal niet meer :P
Ik heb jouw code gekopieerd en hier lokaal even uitgevoerd maar ik krijg geen errors en wordt netjes naar de login:php gestuurd.
Kijk even goed of het catch() gedeelte in werking treedt. Je kunt dat simpel testen met
<?php
catch(PDOException $e)
{
echo 'FOUTMELDING: ' . $e->getMessage();
}
?>
Bedankt voor de reactie, heb de foutenafhandling erin geplakt, maar krijg echter nog wel dezelfde melding:
FOUTMELDING: SQLSTATE[HY000] [1045] Access denied for user 'Admin'@'localhost' (using password: YES)
( ! ) Notice: Undefined variable: dbh in C:\wamp\www\Demopool\logincheck2.php on line 19
Call Stack
# Time Memory Function Location
1 0.0010 251048 {main}( ) ..\logincheck.php:0
( ! ) Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\Demopool\logincheck2.php on line 19
Call Stack
# Time Memory Function Location
1 0.0010 251048 {main}( ) ..\logincheck.php:0
Mijn code ziet er nu zo uit:
<?php
// Start Session because we will save some values to session varaible.
session_start();
// Define $uname and $pword
$uname=$_POST['username'];
$pword=$_POST['password'];
// We Will prepare SQL Query
$sth = $dbh->prepare("SELECT * FROM account WHERE myusername=? AND mypassword=?"); //<===== Regel 19
// bind paramenters, Named paramenters alaways start with colon(:)
$sth->bindParam('1', $uname);
$sth->bindParam('2', $pword);
// For Executing prepared statement we will use below function
$sth->execute();
// Count no. of records
$count = $sth->rowCount();
//just fetch. only gets one row. So no foreach loop needed :)
$row = $sth -> fetch();
// User Redirect Conditions will go here
if($count==1)
{
// Save type and other information in Session for future use.
$_SESSION[myusername]=$uname;
// if user type is Admin only then he can access protected page.
if($row[0] == 'Admin') { header( "location:http://127.0.0.1/phpmyadmin/"); }
else { header( "location:loginsucces.php"); }
}
else
{
header("location:login.php");
}
?>
Kan het zijn dat het aan mijn wamp ligt? heb de nieuwste versie van de wampsite gedownload.
Ik had een account aangemaakt in me phpmyadmin met naam Admin pass 1. Deze alle rechten gegeven. En ging er toen vanuit dat het zo in orde was, Heb ik iets over het hoofd gezien?
ook ben ik bezig met googlen van de "Access denied for user 'Admin'@'localhost' (using password: YES)"
Dat moet haast wel, heb het nog is in me database nagekeken en staat echter wel dat admin all priveleges heeft.
Maar ik ben al superblij dat ik nu een verbinding heb kunnen maken doormiddel van de root.ik kan nu gewoon inloggen op me webpagina met de gegevens uit me Account tabel.
Ben nu gelijk verder aan het gaan met het projectje waar mee bezig ben.
De volgende stap is gegevens uit de database halen en weergeven in een tabel.
Heb het zelf nog op de ouderwetse manier staan met mysqli
$prodcut=$_POST['product'];
$result = mysqli_query("SELECT * FROM demopool WHERE product_id='$product'");