[PHP] Registratieformulier wil niet lukken

Pagina: 1
Acties:
  • 249 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Ik ben een afgeschermd gedeelte voor een website aan het bouwen in PHP. Nu heb ik al een werkende login, maar ik krijg het registratieformulier niet werkende. Wanneer ik de POST waardes van mijn formulier naar het onderstaande PHP bestand stuur krijg ik de volgende melding:
Notice: Undefined index: password in /var/www/html/includes/register.php on line 17

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/djarea/includes/register.php:17) in /var/www/html/djarea/includes/register.php on line 41
De fout zit hem in regel 17, maar ik zie echt niet wat er mis is. Misschien dat iemand mij een beetje op weg kan helpen?


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
<?php
error_reporting(E_ALL);
include('db.php');
if(isset($_POST['submit'])) {

    // Not leave any fields blank
    if (!$_POST['username'] | !$_POST['password1'] | !$_POST['password2'] | !$_POST['age'] | !$_POST['country'] | !$_POST['email']) {
        die('You did not complete all of the required fields.');
    }
    // Passwords match
    if ($_POST['password1'] != $_POST['password2']) {
        die('Your passwords did not match.');
    }
    // Username and password sent from signup form
    // Remove all HTML-tags and PHP-tags, then create a sha1-hash
    $username = strip_tags(mysql_real_escape_string($_POST['username']));
    $password = sha1(strip_tags(mysql_real_escape_string($_POST['password'])));
    // Check if username already exists
    $query = sprintf("SELECT username FROM users WHERE username = '$username'") or die(mysql_error());
    $result = mysql_query($query);
    if(0 != mysql_num_rows($result)) {
        die('Sorry, the username '.$username.' is already in use.');
    }
    // Check if age are digits
    $age = strip_tags(mysql_real_escape_string($_POST['age']));
    // Check country
    $country = strip_tags(mysql_real_escape_string($_POST['country']));
    // Check email
    $email = strip_tags(mysql_real_escape_string($_POST['email']));
    if(!preg_match("/^[a-z0-9\å\ä\ö._-]+@[a-z0-9\å\ä\ö.-]+\.[a-z]{2,6}$/i", $email)) {
        die('Invalid e-mail');
    }
    // Check website
    $website = strip_tags(mysql_real_escape_string($_POST['website']));
    
    // insert it into the database
    $insert = "INSERT INTO users (username, password, age, country, email, website) VALUES ('$username', '$password, '$age, '$country, '$email, '$website')";
    $add_member = mysql_query($insert);
    
    //Redirect
    header('Location: ../login.php');
}
?>

Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 20:37
Je hebt geen veld dat "password" heet in je formulier (waarschijnlijk wel password1 en password2)

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

Verwijderd

Je vergelijkt eerst password1 en password2 met elkaar, maar in de query gebruik je password, maar die waarde is niet in de post parameters array aanwezig. Daarom krijg je dus die notice. En door die notice begint de output, en krijg je daaroverheen nog eens de "headers already sent" warning.

[edit]
Die strip_tags aanroepen overal slaan trouwens helemaal nergens op. Bij het registreren controleer je de waarden. Als die niet goed zijn, dan meld je dat, en laat je de gebruiker nieuwe waarden invullen. Maar je gaat niet waarden zomaar vervangen voordat je ze in de database stopt.

Misschien wil ik wel zo'n wachtwoord: "passw<o>rd"

Dat je bij het presenteren van de gegevens aan escaping doet is natuurlijk prima. Maar dan is escapen nog steeds een betere oplossing dan HTML-achtige code uit de waarden strippen.

[ Voor 46% gewijzigd door Verwijderd op 10-11-2007 14:17 ]


Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
Volgens mij print hij als hij bij regel 17 komt een error omdat er geen post waarde password is opgestuurt (spelfout in het formulier?) en omdat er dan al output is gemaakt kun je op regel 41 geen headers meer aanpassen.

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
OnTracK schreef op zaterdag 10 november 2007 @ 14:12:
Je hebt geen veld dat "password" heet in je formulier (waarschijnlijk wel password1 en password2)
Argh...ja klopt, ik heb het veranderd in password1 en nu krijg ik geen errors meer. |:(

Maar nu wil het toevoegen van de gegevens aan de database ook niet lukken.
Ik krijg verder geen errors...

Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 20:43

DukeBox

loves wheat smoothies

comment regel 41, dan kom je verder met debuggen.

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
DukeBox schreef op zaterdag 10 november 2007 @ 14:19:
comment regel 41, dan kom je verder met debuggen.
Geen errors/warnings/notices...

Acties:
  • 0 Henk 'm!

Verwijderd

Doe dan voor de grap ook even
PHP:
1
echo mysql_error ();
na elke query. En echo de query eerst als je gaat debuggen, en voer die query handmatig rechtstreeks uit, bijvoorbeeld even copy/pasten naar phpMyAdmin.

Acties:
  • 0 Henk 'm!

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 24-10-2024

kingmuze

so don&#039;t fear

DeepFreeze.NL schreef op zaterdag 10 november 2007 @ 14:21:
[...]

Geen errors/warnings/notices...
voeg het volgende onder het uitvoeren van de query toe:
code:
1
echo mysql_error();

[ Voor 12% gewijzigd door kingmuze op 10-11-2007 14:26 ]

[gvr]muze[nl] says: fear is the mind killer


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Verwijderd schreef op zaterdag 10 november 2007 @ 14:24:
[...]

Doe dan voor de grap ook even
PHP:
1
echo mysql_error ();
na elke query. En echo de query eerst als je gaat debuggen, en voer die query handmatig rechtstreeks uit, bijvoorbeeld even copy/pasten naar phpMyAdmin.
geeft het volgende:
You have an error in your SQL syntax near 'q, 'q, 'qq@qq.com, 'http://')' at line 1

Edit: zie het al, ik dit teken vergeten: '

[ Voor 7% gewijzigd door DeepFreeze.NL op 10-11-2007 14:29 ]


Acties:
  • 0 Henk 'm!

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 24-10-2024

kingmuze

so don&#039;t fear

DeepFreeze.NL schreef op zaterdag 10 november 2007 @ 14:27:
[...]

geeft het volgende:
You have an error in your SQL syntax near 'q, 'q, 'qq@qq.com, 'http://')' at line 1
Je bent alle quotes om de variabelen vergeten (achter q, q, en .com):

code:
1
 ... 'q, 'q, 'qq@qq.com, 'http://')'

[gvr]muze[nl] says: fear is the mind killer


Acties:
  • 0 Henk 'm!

Verwijderd

DeepFreeze.NL schreef op zaterdag 10 november 2007 @ 14:27:

Edit: zie het al, ik dit teken vergeten: '
4 keer ja.

Nu mag je best even een uurtje besteden aan gewoon kijken hoe alles werkt, en niet direct terug komen hollen naar dit forum. Debuggen kun je makkelijk zelf.

Acties:
  • 0 Henk 'm!

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 24-10-2024

kingmuze

so don&#039;t fear

Verwijderd schreef op zaterdag 10 november 2007 @ 14:30:
[...]

4 keer ja.

Nu mag je best even een uurtje besteden aan gewoon kijken hoe alles werkt, en niet direct terug komen hollen naar dit forum. Debuggen kun je makkelijk zelf.
Yep, misschien even een goede tutorial programmeren doen. Dan je in ieder geval de basics snapt.

[gvr]muze[nl] says: fear is the mind killer


Acties:
  • 0 Henk 'm!

Verwijderd

Zoiets simpel als ontbrekende quotes had je inderdaad met standaard debug werk (output printen) kunnen ontdekken :).

[ Voor 130% gewijzigd door Verwijderd op 10-11-2007 14:37 ]


Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 20:43

DukeBox

loves wheat smoothies

met set_ini(display_errors, 1) kun je ook de errors direct krijgen in je std output. Anders staat ze meestal in je syslog/eventlog.

[ Voor 7% gewijzigd door DukeBox op 10-11-2007 14:37 ]

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

Verwijderd

DukeBox schreef op zaterdag 10 november 2007 @ 14:36:
met set_ini kun je ook de errors direct krijgen in je std output. Anders staat ze meestal in je syslog/eventlog.
Op een server waarop ontwikkeld wordt, hoort display_errors sowieso al aan te staan, en error_reporting zo hoog mogelijk, minimaal E_ALL.

Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Verwijderd schreef op zaterdag 10 november 2007 @ 14:30:
[...]

4 keer ja.

Nu mag je best even een uurtje besteden aan gewoon kijken hoe alles werkt, en niet direct terug komen hollen naar dit forum. Debuggen kun je makkelijk zelf.
I know, shame on me :)
Ik zit al een tijdje met deze pagina te werken en dan zie je soms de kleine foutjes over het hoofd :)

Edit: En als beginnende PHP'er vind ik dat ik al aardig ver was gekomen 8)

[ Voor 8% gewijzigd door DeepFreeze.NL op 10-11-2007 14:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

in ieder geval even een hint met die queries uitvoeren. standaard geeft hij geen foutmelding. die moet je zelf genereren. gebruik daarom altijd (een variant van):

PHP:
1
 $result = mysql_query($query) or die(mysql_error());

Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Verwijderd schreef op zaterdag 10 november 2007 @ 14:54:
in ieder geval even een hint met die queries uitvoeren. standaard geeft hij geen foutmelding. die moet je zelf genereren. gebruik daarom altijd (een variant van):

PHP:
1
 $result = mysql_query($query) or die(mysql_error());
Dankje, tips kan ik altijd gebruiken!
Ik heb het in me script verwerkt :)

Acties:
  • 0 Henk 'm!

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 24-10-2024

kingmuze

so don&#039;t fear

Verwijderd schreef op zaterdag 10 november 2007 @ 14:37:
[...]

Op een server waarop ontwikkeld wordt, hoort display_errors sowieso al aan te staan, en error_reporting zo hoog mogelijk, minimaal E_ALL.
Is E_ALL ook niet het maximum?

[gvr]muze[nl] says: fear is the mind killer


Acties:
  • 0 Henk 'm!

Verwijderd

Nee. Er is ook nog zoiets als E_STRICT en E_RECOVERABLE_ERROR. Er zijn tegenwoordig 12 bits in gebruik, en geen 10 meer zoals in PHP4.

Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:23
Verwijderd schreef op zaterdag 10 november 2007 @ 15:51:
[...]

Nee. Er is ook nog zoiets als E_STRICT en E_RECOVERABLE_ERROR. Er zijn tegenwoordig 12 bits in gebruik, en geen 10 meer zoals in PHP4.
E_ALL (6143) is de som van:
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
4096 E_RECOVERABLE_ERROR

dus de enige nieuwe is E_STRICT (2048)

Acties:
  • 0 Henk 'm!

Verwijderd

jvdmeer schreef op zondag 11 november 2007 @ 09:20:

E_ALL (6143) is de som van:
...
dus de enige nieuwe is E_STRICT (2048)
In PHP5 ja, in PHP6 zal het weer iets anders zijn. Maar het gaat even om het punt dat ik zei minimaal E_ALL, waarmee ik dus poog aan te geven dat er méér is dan E_ALL, namelijk E_ALL | E_STRICT in PHP5. En E_RECOVERABLE_ERROR is niet altijd al deel geweest van E_ALL, namelijk sinds 5.2
Maar het idee blijft natuurlijk dat ik bedoel dat je eigenlijk alles moet aanzetten, maar vooral dat meer ook beter is, in de ontwikkelingsfase.
Pagina: 1