[PHP] 'Undefined index' na query variabel

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Ik ben al een tijd bezig met een loginformulier, maar het wil niet lukken; dit is de HTML
Afbeeldingslocatie: http://gromba.mijnip.nl/img/got/html.png
't doet prima z'n werk dus er zijn vast gee problemen mee

Maar zodra ik bij de PHP kom, komen er rare foutmeldingen

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$wachtwoord = $_POST["pass"];
$naam = $_POST["name"];

//echo "<b>Naam:</b> $naam<br><b>Wachtwoord:</b> $wachtwoord<br><br>";

$kwijerie = "SELECT * FROM gebruikers WHERE wachtwoord = '$wachtwoord' AND naam = '$naam'";
$resultaat = mysql_query($kwijerie) or die (mysql_error());

$results2 = mysql_num_rows($resultaat);
if ($results2 == '1') {

echo 'Je bent inlogt!';
//- hier nog meer, maar da's niet belangrijk
}
offtopic:
Ik test het nu eerste ven zonder md5 ja :)


Als ik inlog met m'n eigen wachtwoord krijg ik de foutmelding
code:
1
2
Notice: Undefined index: pass in C:\server\www\coornhert\login.php on line 15
Notice: Undefined index: name in C:\server\www\coornhert\login.php on line 16

Maar zodra ik m'n naam of wachtwoord ook maar 1 letter verander, maakt hij de query perfect aan, maar dan mislukt het inloggen :)

Als ik $kwijerie weghaal, geeft hij geen foutmeldingen.

Ik gebruik PHP versie 4.3.1 (geen opmerkingen met het woord 'oud' erin graag ;))


Wat is hier de oplossing van?

Gromba.nl


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 21-09 00:18
Probeer eens met print_r($_POST) te kijken wat je echt 'ontvangt' :)

|>


Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Simon schreef op 30 oktober 2004 @ 13:48:
Probeer eens met print_r($_POST) te kijken wat je echt 'ontvangt' :)
Als ik het voor de $kwijerie zet
en ik kies het foute wachtwoord:
code:
1
( [name] => Peter [pass] => fout_wachtwoord

en met het goede wachtwoord alleen
code:
1
array ( )

Gromba.nl


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
Wat voer jij voor een wachtwoord in? Misschien zit daar een raar teken in ofzo? (hoeft dus niet het wachtwoord zelf te geven, maar alleen te kijken naar vreemde tekens).

Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Postman schreef op 30 oktober 2004 @ 13:52:
Wat voer jij voor een wachtwoord in? Misschien zit daar een raar teken in ofzo? (hoeft dus niet het wachtwoord zelf te geven, maar alleen te kijken naar vreemde tekens).
Nope, gewoon 8 kleine lettertjes :)

Gromba.nl


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
Lijkt me toch dat het probleem zit in het wachtwoord. Misschien gebruik je een wachtwoord dat PHP oid herkent als een variabele of functie en deze dan wil parsen ipv doorgeven als string. Lijkt me wel sterk trouwens, maar je weet maar nooit...

En je zegt zelf ook dat als je maar 1 letter verandert het wel werkt, dus het wachtwoord zelf lijkt mij toch het probleem hier...

Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Postman schreef op 30 oktober 2004 @ 13:58:
Lijkt me toch dat het probleem zit in het wachtwoord. Misschien gebruik je een wachtwoord dat PHP oid herkent als een variabele of functie en deze dan wil parsen ipv doorgeven als string. Lijkt me wel sterk trouwens, maar je weet maar nooit...

En je zegt zelf ook dat als je maar 1 letter verandert het wel werkt, dus het wachtwoord zelf lijkt mij toch het probleem hier...
Als ik alleen het (goede) wachtwoord invul zonder naam werkt ie perfect, en andersom ook

Gromba.nl


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Wat staat er nog meer voor code boven?

Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
djluc schreef op 30 oktober 2004 @ 14:05:
Wat staat er nog meer voor code boven?
PHP:
1
2
@$wat = $_GET['wat'];
if($wat == "login"){

Gromba.nl


Acties:
  • 0 Henk 'm!

  • G F0rce 1
  • Registratie: Juli 2003
  • Laatst online: 04-03-2015
offtopic:
echo 'Je bent inlogt!';
moet zijn
echo 'Je bent inlogd!';
;)

I feel absolutely clean inside, and there is nothing but pure euphoria. - Alexander Shulgin


Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
G F0rce 1 schreef op 30 oktober 2004 @ 14:07:
offtopic:
echo 'Je bent inlogt!';
moet zijn
echo 'Je bent inlogd!';
;)
:+ :+
Maar je wordt daarna toch meteen geredirect waar je vandaan kwam :+

[ Voor 6% gewijzigd door Gromba op 30-10-2004 14:09 ]

Gromba.nl


Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 21:12

Tux

G F0rce 1 schreef op 30 oktober 2004 @ 14:07:
offtopic:
echo 'Je bent inlogt!';
moet zijn
echo 'Je bent inlogd!';
;)
ingelogd ;)
Gromba schreef op 30 oktober 2004 @ 14:07:
[...]

PHP:
1
2
@$wat = $_GET['wat'];
if($wat == "login"){
@ gebruiken is niet zo netjes. Dan kan je beter het volgende doen:

PHP:
1
$wat = isset($_GET['wat']) ? $_GET['wat'] : '';


En controleer ook de inhoud van de gebruikersnaam en het wachtwoord op SQL. In het huidige script zit namelijk een SQL-injection bug.

[ Voor 20% gewijzigd door Tux op 30-10-2004 14:13 ]

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
Misschien geen " maar ' gebruiken in de $_POST net zoals je doet in $_GET...
Klinkt misschien raar, maar kan soms wel de oplossing zijn.

Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Postman schreef op 30 oktober 2004 @ 14:13:
Misschien geen " maar ' gebruiken in de $_POST net zoals je doet in $_GET...
Klinkt misschien raar, maar kan soms wel de oplossing zijn.
Nope werkt ook niet, maar het was te proberen

(voor de mensen die het 'in het echt' willen zien. klik)

Gromba.nl


Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 21:12

Tux

Zoals ik al eerder heb gepost. Voer addslashes uit op je input. Nu zit er een SQL-injection bug in.

code:
1
SELECT * FROM gebruikers WHERE wachtwoord = '' OR DIKKE SQL INJECTION AND DIT='NIET GOED' AND naam = 'Woei'


Kreeg ik door Username: Woei en Wachtwoord: ' OR DIKKE SQL INJECTION AND DIT='NIET GOED in te voeren.

[ Voor 34% gewijzigd door Tux op 30-10-2004 14:27 ]

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Ik wil eerst een oplossing voor m'n probleem voordat ik alles 'beter' ga maken :)

Gromba.nl


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 21-09 00:18
Gromba schreef op 30 oktober 2004 @ 15:03:
Ik wil eerst een oplossing voor m'n probleem voordat ik alles 'beter' ga maken :)
Dan zul je daar toch echt zelf aan moeten meewerken, en ons meer om te bekijken moeten geven. Wij zijn geen gratis helpdesk, maar dat begrijp je natuurlijk wel ;)

|>


Acties:
  • 0 Henk 'm!

Verwijderd

ok we gaan testen.

wat voor output krijg je als je het stukje code even vervangt met

print_r($_POST); of var_dump($_POST);

en je kan ook checken of de post daadwerkelijk is doorgevoerd met

PHP:
1
2
3
4
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
   // jaja
}

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Intern heet de REQUEST_METHOD trouwens post, niet POST... Dus vergelijken met =='POST' levert altijd false op ;) Wazige tips om ' ipv " te gebruiken slaan natuurlijk nergens op.

Maar let er wel op dat die code niet uitgevoerd mag worden als je geen wachtwoord/username hebt opgegeven, dat kan desalniettemin wel gebeuren omdat je bijvoorbeeld de pagina refreshed terwijl de wat=login nog in de url staat.

De melding "Undefined index" is geen foutmelding trouwens, het is een mededeling (notice) dat je een index (name/pass in jouw geval) van een array benadert die niet bestaat, dat kan alleen het gevolg zijn van het niet al eerder ingevuld zijn van die waarde.
En dat kan in dit geval eigenlijk alleen maar gebeuren als die code wel uitgevoerd wordt (wat=login) maar je geen submit van het formulier hebt gedaan.

[ Voor 43% gewijzigd door ACM op 30-10-2004 16:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ow acm, hier doet ie het met POST namelijk erg goed ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Kan het geen bug in IE zijn? Ik heb de laatste anderhalve week ook vreemde problemen met formulieren die maar halve half gepost worden. Voorheen werkte die formulieren flawless.
Pagina: 1