Mysql/PHP Wat is hier mis mee ?
ik ben bezig met een form, ik haal bij php.net de nodige informatie.
maar dit script geeft geen errors warnings helemaal niets.
hij schijnt gewoon niets in de database te zetten...
dat mail dingetje heb ik hier ergens van gejat :), sry :)
das nog te moeilijk voor mij
mysql config
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$mysql_username="johan_full";
$mysql_password="***********";
$mysql_database="johan";
$mysql_host="localhost";
mysql_connect($mysql_host ,$mysql_username, $mysql_password) or die (" mysql connection failed");
mysql_select_db($mysql_database) or die("Database error");
?>
$mysql_username="johan_full";
$mysql_password="***********";
$mysql_database="johan";
$mysql_host="localhost";
mysql_connect($mysql_host ,$mysql_username, $mysql_password) or die (" mysql connection failed");
mysql_select_db($mysql_database) or die("Database error");
?>
dit is mijn hele process_registery.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Process registery</title>
</head>
<body>
Code (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
60
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
60
<?php
function check_mail($email){
$email_host = explode("@",$email);
$email_host = $email_host['1'];
$email_domein = gethostbyname($email_host);
if($email_domein !== $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email)){
$geldig = 1;
}
return $geldig;
}
if($_POST['password'] != $_POST['validate_password']){
echo"The passwords are not the same.<br/>";
echo"Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
}
else
if($_POST['password'] == $_POST['validate_password']){
$username = addslashes($_POST['nickname']);
$sql = "SELECT * FROM `darkbrotherhood` WHERE `nickname` = '".$username."'";
$query = mysql_query($sql);
if(mysql_num_rows($query) >= 1){
echo "The username is already been used<br/>";
echo "Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
}
else
{
$check = check_mail($_POST['email']);
if($check !== 1){
echo "The e-mail adress is not correct<br/>";
echo "Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
}
else
{
$username = addslashes($_POST['nickname']);
$md5_ww = md5($_POST['password']);
$email = addslashes($_POST['email']);
$realname = $_POST['real_name'];
$birthdate_day = $_POST['birthdate_day'];
$birthdate_month = $_POST['birthdate_month'];
$birthdate_year = $_POST['birthdate_year'];
$rank = $_POST['site_rank'];
mysql_query("INSERT INTO `darkbrotherhood` (`nickname`, `password`, `email`, `real_name`, `birthdate_day`, `birthdate_month`, `birthdate_year`, `site_rank`) VALUES ('".$username."','".$md5_ww."', '".$email."','".$realname."','".$birthdate_day."','".$birthdate_month."','".$birthdate_year."','".$rank."')");
echo "U can now <a href=\"login.php\">login</a>.<br/>";
}
}
}
?>
function check_mail($email){
$email_host = explode("@",$email);
$email_host = $email_host['1'];
$email_domein = gethostbyname($email_host);
if($email_domein !== $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email)){
$geldig = 1;
}
return $geldig;
}
if($_POST['password'] != $_POST['validate_password']){
echo"The passwords are not the same.<br/>";
echo"Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
}
else
if($_POST['password'] == $_POST['validate_password']){
$username = addslashes($_POST['nickname']);
$sql = "SELECT * FROM `darkbrotherhood` WHERE `nickname` = '".$username."'";
$query = mysql_query($sql);
if(mysql_num_rows($query) >= 1){
echo "The username is already been used<br/>";
echo "Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
}
else
{
$check = check_mail($_POST['email']);
if($check !== 1){
echo "The e-mail adress is not correct<br/>";
echo "Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
}
else
{
$username = addslashes($_POST['nickname']);
$md5_ww = md5($_POST['password']);
$email = addslashes($_POST['email']);
$realname = $_POST['real_name'];
$birthdate_day = $_POST['birthdate_day'];
$birthdate_month = $_POST['birthdate_month'];
$birthdate_year = $_POST['birthdate_year'];
$rank = $_POST['site_rank'];
mysql_query("INSERT INTO `darkbrotherhood` (`nickname`, `password`, `email`, `real_name`, `birthdate_day`, `birthdate_month`, `birthdate_year`, `site_rank`) VALUES ('".$username."','".$md5_ww."', '".$email."','".$realname."','".$birthdate_day."','".$birthdate_month."','".$birthdate_year."','".$rank."')");
echo "U can now <a href=\"login.php\">login</a>.<br/>";
}
}
}
?>
Gewijzigd op 13/02/2006 15:46:00 door Johan K
error_reporting(E_ALL);
De eerste kolom van je query heb ik al goed gedaan, nu de rest nog ;D
mysql_query("INSERT INTO `darkbrotherhood` (`nickname`, `password`, `email`, `real_name`, `birthdate_day`, `birthdate_month`, `birthdate_year`, `site_rank`) VALUES ('".$username."',"$md5_ww","$email","$realname","$birthdate_day","$birthdate_month","$birthdate_year","$rank")");
En pas op met query injections.
Gewijzigd op 13/02/2006 15:14:00 door Martijn B
Hij doet toch addslahes of is dat niet genoeg?
Haal de functies mysql_escape_string of mysql_real_escape_string nog maar over alle ingevoerde waardes.
edit:
addslashed kun je dan weg laten.
Gewijzigd op 13/02/2006 15:18:00 door Martijn B
maar ik zet het er wel effe boven.
edit:
voor dat ik gister naar bed ben gegaan het ik het helemaal verkloot :), brb effe fixen
Gewijzigd op 13/02/2006 15:23:00 door Johan K
("... VALUES ('$username', '$md5_ww', etc, '$rank')");
Addslashes oid is het probleem niet. Het probleem is dat je steeds de string beëindigt, de variabele print en vervolgens de string weer opent. MySQL krijgt dan waardes zonder quotes eromheen, en als het geen integer-waardes zijn gaat dat fout. En eigenlijk gaat het aan elkaar plakken van die string-fragmenten en de variabelen ook niet goed, omdat er geen concatenatie-operator tussen staat. Oftewel, de parser kan er geen kaas meer van maken ;-)
Gewijzigd op 13/02/2006 15:26:00 door Willem vp
(PHP 4 >= 4.3.0, PHP 5)
geen backtics gebruiken in je query, zo leer je jezelf een foute manier aan.
stelt je in staat "gereserveerde" mysql woorden te gebruiken en dat is meestal niet goed.
@ Woopie
htmlentities() zou ik zeker niet vergeten
*/ ik ben hier een week mee bezig geweest om het zelf te doen, maar het begint me uit de keel te hangen :P /*
@ martijn!
Notice: Undefined index: site_rank in C:\Program Files\hosting\xampp\xampp\htdocs\process_registery.php on line 66
probleem opgelost, maar alsnog zet hij niets in de database
Gewijzigd op 13/02/2006 15:39:00 door Johan K
jah htmlentities doe ik er ook nog altijd bij....
hoe vaker ik er overheen kijk, hoe gekker ik wordt, ik zie echt helemaal geen fouten, maar ze zitten er. :S
laat eens zien hoe je het nu hebt
Ik zou gaan voor:
$rank = $_POST['site_rank'] ? $_POST['site_rank'] : '';
Dit zorgt ervoor dat $rank op z'n minst een lege string bevat. Eigenlijk zou je iets dergelijks ook voor de andere variabelen moeten doen, zodat je script niet bokt als een van de parameters niet wordt meegegeven in de URL.
willem waarvoor staat dat ? er eiglijk?
$var = $a ? $b : $c;
$a is hierbij de conditie. Dat kan alles zijn, als het maar iets oplevert wat door PHP wordt gezien als true of false.
Als de conditie $a true is, is het resultaat van de expressie $b. Is $a false, dan is het resultaat van de expressie (en dus de waarde van $var) $c.
De coderegel uit mijn vorige post is dus eigenlijk een korte versie van
Code (php)
Doordat het maar 1 regel is, vind ik het een stuk leesbaarder dan wanneer je de if-then-else uit zou schrijven (en al helemaal als je hetzelfde moet doen voor 10 andere variabelen).
Dit is een constructie die afkomstig is uit C (of misschien zelfs daarvoor) en die best vaak wordt gebruikt in talen als C of Perl (en afgeleiden daarvan, zoals PHP).
Voor meer informatie, klik hier en zoek naar het kopje "Ternary Operator".
Gewijzigd op 13/02/2006 18:03:00 door Willem vp
bedankt willem voor de zeer goede uitleg
BEDANKT voor de hele heldere uitleg!!