PHP Select code gaat ergens fout

Pagina: 1
Acties:
  • 626 views

Acties:
  • 0 Henk 'm!

  • AcidBanger
  • Registratie: Maart 2008
  • Laatst online: 10-10 21:06
Beste Tweakers !

Ik ga ergens de fout in maar kan het niet vinden.
Waar het volgens mij fout gaat is in de volgende regel:

$sql="SELECT * FROM $tbname WHERE werknemer='$werknemer' and wachtwoord='$wachtwoord'";

Maar ik zie geen fout voor de rest.
De tablename is werknemers.
Er zijn twee kolommen die werknemer en wachtwoord heten.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
$servername = "localhost";
$username = "******";
$password = "******";
$dbname = "unfinished";
$tbname = "werknemers";

// Verbinding maken naar server en database selecteren
mysql_connect("$servername", "$username", "$password")or die("Kan geen verbinding maken"); 
mysql_select_db("$dbname")or die("Kan de de database niet selecteren");

// gebruikersnaam en wachtwoord vanuit inlog.php
$werknemer=$_POST['werknemer']; 
$wachtwoord=$_POST['wachtwoord']; 

// Extra beveiliging  injectie troep
$werknemer = stripslashes($werknemer);
$wachtwoord = stripslashes($wachtwoord);
$werknemer = mysql_real_escape_string($werknemer);
$wachtwoord = mysql_real_escape_string($wachtwoord);
$sql="SELECT * FROM $tbname WHERE werknemer='$werknemer' and wachtwoord='$wachtwoord'";
$result=mysql_query($sql);

// Tellen
$count=mysql_num_rows($result);

// Checken of het inderdaad 1 rij
if($count==1){

// Checken of het klopt en registeer de sessie en zet door naar loginsuccess.php
session_register("werknemer");
session_register("wachtwoord"); 
header("location:login_success.php");
}
else {
echo "Verkeerde gebruikersnaam en/of wachtwoord.";
}

?>


Typ ik bijvoorbeeld een verkeerde gebruikersnaam en wachtwoord dan doet de code het wel. ( krijg ik netjes die error in beeld)
Typ ik het goede in zie ik gewoon een witte pagina en blijft hij op deze PHP bestand hangen.

[ Voor 6% gewijzigd door AcidBanger op 31-07-2015 15:10 ]


Acties:
  • 0 Henk 'm!

  • Arjan90
  • Registratie: September 2005
  • Laatst online: 23:40
Zou je ook code tags kunnen gebruiken? Dat is wel een voorwaarde als je wil dat we je helpen, dit leest nogal lastig... Als je een echo ipv de header plaatst, doet hij het dan wel? Op die manier kun je uitsluiten of hij het wel doet. Dan zou het probleem bijv. in je header zitten.

Nog een snelle tip, bij mysql_connect en mysql_select_db hoef je geen quotes te gebruiken, aangezien je alleen een variabele gebruikt. Dat maakt de code wat leesbaarder in de code editor.

"Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid."


Acties:
  • 0 Henk 'm!

  • Pin0
  • Registratie: November 2002
  • Niet online
En je php foutmeldingen aanzetten en tonen kan ook helpen. Zo zal je bijvoorbeeld een warning krijgen als $_POST['werknemer'] niet bestaat.

Mijn Lego Mocs - LEGO idea: The Motorcycle Garage


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Na een header("Location:") moet altijd een exit();. Sowieso is je header() aanroep foutief. Dus:

PHP:
1
2
header("Location: http://www.example.com/login_success.php");
exit();


Wijzigingen:
• Location met een hoofdletter
• Spatie na de :
• Je moet de volledige URL opgeven
• exit() na een header-location

Overige tips: gebruik geen afsluitende ?> tag in je PHP bestanden. Je pagina bevat waarschijnlijk nog witruimte na de ?>, waardoor de header-location niet werkt omdat er output is naar de browser (witruimte).

Zet ook error_reporting aan: error_reporting(-1);

edit3: Poeh... hoe langer ik kijk, hoe meer rare dingen ik zie:

PHP:
1
2
mysql_connect("$servername", "$username", "$password")or die("Kan geen verbinding maken"); 
mysql_select_db("$dbname")or die("Kan de de database niet selecteren");

Waarom staan er " om $servername, $username, $password en $dbname? Dat is nergens voor nodig en heel raar. Dat moet gewoon zo:

PHP:
1
2
mysql_connect($servername, $username, $password) or die("Kan geen verbinding maken"); 
mysql_select_db($dbname)or die("Kan de de database niet selecteren");

Sowieso zijn de mysql_* functies verouderd en kun je beter overstappen op mysqli_* (of PDO).

[ Voor 67% gewijzigd door HuHu op 31-07-2015 09:38 ]


Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Laatst online: 13-10 16:50
Allereerst: dit is geen PHP select code, maar een MySQL query die je toevallig vanuit PHP stuurt.
Verder inderdaad graag code-tags gebruiken voor je code.


Nu, je zegt zelf al:
AcidBanger schreef op vrijdag 31 juli 2015 @ 09:16:
Typ ik bijvoorbeeld een verkeerde gebruikersnaam en wachtwoord dan doet de code het wel. ( krijg ik netjes die error in beeld)
Typ ik het goede in zie ik gewoon een witte pagina en blijft hij op deze PHP bestand hangen.
Dat betekent dat je query dus gewoon werkt, want je komt op de else uit bij geen results. Geef je de goede user/pass combo, dan kom je dus blijkbaar op de if uit:
PHP:
1
2
3
4
5
6
7
8
9
if($count==1) {
     // Checken of het klopt en registeer de sessie en zet door naar loginsuccess.php
     session_register("werknemer");
     session_register("wachtwoord");
     header("location:login_success.php");
}
else {
     echo "Verkeerde gebruikersnaam en/of wachtwoord.";
}

Kijk dus eens naar de 3 regels in de if. Pak het eens zo aan:
PHP:
1
2
3
4
5
     var_dump($count);
     // Checken of het klopt en registeer de sessie en zet door naar loginsuccess.php
     // session_register("werknemer");
     // session_register("wachtwoord");
     // header("location:login_success.php");

Je krijgt nu sowieso output door de var_dump, en de rest is uitgeschakeld (gecomment). Uncomment ze nu eens regel voor regel en kijk waar de fout zit.

HuHu heeft gelijk, maar ik wilde het niet meteen weggeven. ;)

Tjolk is lekker. overal en altijd.


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 01:12

AW_Bos

Liefhebber van nostalgie... 🕰️

Verder is session_register() een verouderde functie, die je beter om kan schrijven naar:

$_SESSION['werknemer'] = $_POST['werknemer'];

En waarom je je een wachtwoord in een sessie wilt, is mij een raadsel. Die heb je eigenlijk alleen nodig om te controleren of iemand de correcte inloggegevens heeft ingevoerd.

En wachtwoorden onbeveiligd opslaan, is ook behoorlijk uit de tijd. Gebruik op zijn minst password_hash() en password_verify().

Overigens kan het ook nog eens geen kwaad om je eens te verdiepen in de materie van functies van MySQLi, omdat de MySQL-functies in PHP afgeschreven zijn en in nieuwe versies niet meer zullen werken. Mogelijk al over een jaar bij je hosting.

[ Voor 38% gewijzigd door AW_Bos op 31-07-2015 09:40 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • AcidBanger
  • Registratie: Maart 2008
  • Laatst online: 10-10 21:06
Super bedankt voor alle info zo ver :)

Ik heb nu denk ik de echte fout gevonden.

session_register("werknemer"); zodra ik hiervoor // doe dan werkt de code wel dus die session werkte niet goed. En ik heb deze functie via een tutorial gekregen maar blijkbaar was deze verouderd :(.
Ga het nu op de manier van AW_Bos proberen :D Bedankt zo ver :D

Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 01:12

AW_Bos

Liefhebber van nostalgie... 🕰️

Dat is dan een behoorlijke oude tutorials met een flinke baard ;)
Dan vind ik dit toch wel wat beterder opgezet ;)

http://phptuts.nl/view/39/10/

[ Voor 29% gewijzigd door AW_Bos op 31-07-2015 09:42 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • AcidBanger
  • Registratie: Maart 2008
  • Laatst online: 10-10 21:06
http://www.phpeasystep.com/phptu/6.html

Ik was deze aan het volgen.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Doe jezelf en iedereen een plezier en zoek aub een andere tutorial, want die link lijkt nergens naar. Is het type tutorial dat door een of andere code-politie van het internet gehaald moet worden. :P

{signature}


Acties:
  • 0 Henk 'm!

  • AcidBanger
  • Registratie: Maart 2008
  • Laatst online: 10-10 21:06
Duidelijk O-)


Nieuwe code geschreven maar nu zit ik weer in de fout en ik krijg geen fout informatie te zien...


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
ini_set('display_errors', 'On'); 
error_reporting(E_ALL); 

session_start(); 
$servername = "localhost";
$username = "*******";
$password = "*******";
$dbname = "unfinished";
$tbname = "werknemers";

// Verbinding maken naar server en database selecteren
mysqli_connect($servername, $username, $password)or die("Kan geen verbinding maken"); 
mysqli_select_db($dbname)or die("Kan de de database niet selecteren");

// Controle of het formulier verzonden is 
if($_SERVER['REQUEST_METHOD'] == 'POST') 
{   
    // Controle of benodigde velden wel ingevuld zijn 
    if(isset($_POST['werknemer'], $_POST['wachtwoord'])) 
    {
        

            // Overbodige spaties verwijderen 
        $werknemer = trim($_POST['werknemer']); 
        $wachtwoord = trim($_POST['wachtwoord']);
        $werknemer = stripslashes($_POST['werknemer']);
        $wachtwoord = stripslashes($_POST['wachtwoord']);
        $werknemer = mysqli_real_escape_string($_POST['werknemer']);
        $wachtwoord = mysqli_real_escape_string($_POST['wachtwoord']);
        
        // Checken of input klopt
        $sql="SELECT * FROM $tbname WHERE werknemer='$werknemer' and wachtwoord='$wachtwoord'";
        $result=mysqli_query($sql);
        $count=mysqli_num_rows($result);
        
        if($count==1){
        $_SESSION['werknemer'] = $_POST['werknemer'];
        header("Location: http://10.10.11.20/input.html");
        exit();
        
        else {
        echo "Verkeerde gebruikersnaam en/of wachtwoord.";
        }
        
    else  
    { 
    header('Refresh: 3; url=http://10.10.11.20/login.php'); 
    exit();
    echo 'Een vereist veld bestaat niet!'; 
    } 
}
else 
{ 
    // Terug naar het formulier 
    header('Location: http://10.10.11.20/login.php'); 
    exit(); 
}
?> 

[ Voor 116% gewijzigd door AcidBanger op 31-07-2015 15:57 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23:09

Creepy

Tactical Espionage Splatterer

"Geen informatie" is nogal weinig.. Ergens in je webserver logs zal ergens een foutmelding zitten. Als je die vindt dan heb je waarschijnlijk ook gelijk het probleem te pakken. Hier op tweakers.net gaan we er vanuit dat je op z'n minst in staat bent om dit soort foutmeldingen zelf boven water te halen en opzoek te gaan naar een oplossing. Je foutieve code dumpen zonder info en hopen dat wij het voor je gaan fixen is niet de bedoeling. Programming draait om zelf programmeren, niet om anderen dat voor je te laten doen. Ik kan dan ook niet anders dan dit topic sluiten.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.