Geboortedatum in register

Status
Niet open voor verdere reacties.

mick93

Gebruiker
Lid geworden
31 mrt 2010
Berichten
90
Hallo iedereen!

Ik heb een probleempje. Ik wil dat mensen, wanneer zij zich registreren, hun geboortedatum invoeren. Momenteel heb ik het zo gedaan:

HTML:
            	<td>Geboortedatum:</td>
					<td><input name="birthday" type="text" id="birthday" size="2" maxlength="2" value="DD">/
<input name="birthmonth" type="text" id="birthmonth" size="2" maxlength="2" value="MM">/
<input name="birthyear" type="text" id="birthyear" size="4" maxlength="4" value="JJJJ"></td></tr>

En op deze manier stuur ik het naar de database:
PHP:
mysql_query("INSERT INTO `users` (`username` , `password` , `firstname` , `lastname` , `birthday` , `birthmonth` , `birthyear`)

Nu wil ik echter dat birthday, birthmonth en birthyear zich "samenpakken" tot birthdate, hoe doe ik dit?
Zodat er in mijn database netjes staat "birthdate" ipv birthday, birthmonth, birthyear.
 
Veld in de database aanmaken "birthdate" met het type DATE

Vervolgens je INSERT-query opbouwen door in het veld voor "birthdate" de velden aan elkaar te plakken
PHP:
$query = "
INSERT INTO users (
  birthdate
) VALUES (
  '". $_POST['birthyear'] ."-". $_POST['birthmonth'] ."-". $_POST['birthday'] ."'
);";
En ja, de volgorde is bewust zo.

Je kunt hem dan uitlezen in elk formaat door dit te doen:
[sql]
/* DD-MM-YYYY */
SELECT DATE_FORMAT(birthdate, '%d-%m-%Y') as birthdate_f FROM users
[/sql]
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
 
PHP:
mysql_query("INSERT INTO `users` (`birthdate`) VALUES (  '". $_POST['birthyear'] ."-". $_POST['birthmonth'] ."-". $_POST['birthday'] ."');

mysql_query("INSERT INTO `users` (`username` , `password` , `firstname` , `lastname` , `birthdate`, `email` , `status` , `activated` , `registreer_ip`) VALUES ('$reg_username', '$password', '$firstname', '$lastname', '$birthdate', '$email', 'Actief', '0', '{$_SERVER['REMOTE_ADDR']}')")or die(mysql_error());

Dus dan krijg je het zo?
Want op deze manier geeft hij me een foutmelding..
 
Dan moet je een veld "birthdate" van het type "date" maken in je database. Date-velden hebben het formaat: JJJJ-MM-DD, dus deze kan je vullen met je insert-query met:
PHP:
"insert into ... '" . $_POST['birthyear'] . "-" . $_POST['birthmonth'] . "-" . $_POST['birthday'] . "'"
of nog beter (om SQL-injectie tegen te gaan):
PHP:
"insert into ... '" . intval($_POST['birthyear']) . "-" . intval($_POST['birthmonth']) . "-" . intval($_POST['birthday']) . "'"

[edit]Tha Devil was me voor.
Welke foutmelding krijg je met die query?[/edit]
 
Laatst bewerkt:
Oke, heb gedaan wat je zei, en de errors in het php bestand zijn weg, alleen krijg nu wel als ik wil registreren:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

de code:
PHP:
mysql_query("INSERT INTO `users` (`birthdate`) VALUES ('" . 
intval($_POST['birthyear']) . "-" . intval($_POST['birthmonth']) . "-" . 
intval($_POST['birthday']) . "'") or die(mysql_error());

mysql_query("INSERT INTO `users` (`username` , `password` , `firstname` , 
`lastname` , `birthdate`, `email` , `status` , `activated` , `registreer_ip`) VALUES 
('$reg_username', '$password', '$firstname', '$lastname', '$birthdate', '$email', 'Actief', 
'0', '{$_SERVER['REMOTE_ADDR']}')")or 
die(mysql_error());
 
Moet ik misschien het hele script posten? Wellicht dat jullie dan duidelijkere kunnen aangeven waar ik de fout inga?
 
intval() is volgens mij niet noodzakelijk.
Als je tegen SQL-Injection wilt beveiligen kun je beter mysql_real_escape_string() gebruiken.

Het kan best zijn dat de fout in de andere query zit, maar wellicht is wat meer context inderdaad handiger
 
Ik probeer het nu zo:

$birthdate=mktime(0,0,0, $birthmonth, $birthday, $birthyear);

maar weet niet of die 0,0,0, dan wel goed is
 
Laatst bewerkt:
Zo zou ik het niet doen...

Je hebt je velden "birthyear", "birthmonth" en "birthday" genoemd, dus moet je ze ook na een formulier-verzending als $_POST['birthyear'] etc.

Plaats je volledige code eens.
 
PHP:
if(isset($_POST['Submit']))
{

	// Define post fields into simple variables
	$today = gmdate('Y-m-d h:i:s');
	$reg_username = stripslashes(strip_tags(trim($_POST['reg_username'])));
	$firstname = stripslashes(strip_tags(trim($_POST['firstname'])));
	$lastname = stripslashes(strip_tags(trim($_POST['lastname'])));
	$birthday = stripslashes(strip_tags(trim($_POST['birthday'])));
	$birthmonth = stripslashes(strip_tags(trim($_POST['birthmonth'])));
	$birthyear = stripslashes(strip_tags(trim($_POST['birthyear'])));
	$email = stripslashes(strip_tags(trim($_POST['email'])));
	$email2 = stripslashes(strip_tags(trim($_POST['email2'])));
	
	if((!isset($reg_username)) || (!isset($firstname)) || (!isset($lastname)) || (!isset($birthday)) || (!isset($birthmonth)) || (!isset($birthyear)) || (!isset($email)))
	{
		$message="U moet alle velden invullen.";
	}
	else
	{
		if ($email != $email2)
		{
			$message="De e-mail adressen komen niet overeen.";
		}
		elseif ($email == $email2)
		{

			if (ereg('[^A-Za-z0-9]', $reg_username))
			{
				$message="Uw gebruikersnaam mag alleen letters en cijfers bevatten.";
			}
			elseif(!ereg('[^A-Za-z0-9]', $reg_username))
			{


				if (strlen($reg_username) <= 2 || strlen($reg_username) >= 31)
				{
					$message= "Uw gebruikersnaam is te groot of te klein (maximaal 30, minimaal 3).";
				}
				elseif (strlen($reg_username) > 2 || strlen($reg_username) < 30)
				{
					
					if (ereg('[^A-Za-z]', $firstname))
					{
					$message="Uw voornaam  mag alleen letters bevatten.";
					}
					elseif(!ereg('[^A-Za-z]', $firstname))
					{
						if (ereg('[^A-Za-z]', $lastname))
						{
						$message="Uw achternaam mag alleen letters bevatten.";
						}
						elseif(!ereg('[^A-Za-z]', $lastname))
						{


					$sql_email_check = mysql_query("SELECT `email` FROM `users` WHERE `email` ='$email' AND `status` = 'Actief'")or die(mysql_error());
					$sql_username_check = mysql_query("SELECT `username` FROM `users` WHERE `username` ='$reg_username'")or die(mysql_error());

					$email_check = mysql_num_rows($sql_email_check);
					$username_check = mysql_num_rows($sql_username_check);

						if($email_check > 0)
						{
							$message= "Uw email adres is al gebruikt. Als dit niet zo is, neem dan contact met ons op via de contactpagina. ";
							unset($email);
						}
						if($username_check > 0)
						{
							$message="Uw gewenste gebruikersnaam wordt al gebruikt.";
							unset($reg_username);
						}


					else
					{

						$ip = $_SERVER['REMOTE_ADDR'];
						$random_password22=rand(000000000,999999999);
						$password=md5($random_password22);

						
mysql_query("INSERT INTO `users` (`username` , `password` , `firstname` , `lastname` , `birthdate` , `email` , `status` , `activated` , `geregistreerd`,  `registreer_ip`) VALUES ('$reg_username', '$password', '$firstname', '$lastname', '$birthdate', '$email', 'Actief', '0', '$today' , '{$_SERVER['REMOTE_ADDR']}')")or die(mysql_error());							

						$userid = mysql_insert_id();
						// Let's mail the user!
						$subject = "Activatie Mick Verboeket.com";
						$message = "Hallo $firstname,
Hierbij bevestigen we uw registratie op mickverboeket.com. U kunt uw account activeren door op onderstaande link te klikken:

http://www.mickverboeket.com/activate.php?id=$userid&code=$random_password22
     
Zodra u dit heeft gedaan, kunt u inloggen met de volgende gegevens:
	Gebruikersnaam: $reg_username
	Wachtwoord: $random_password22

Met vriendelijke groet,

Mick Verboeket.
    "; 

						mail($email, $subject, $message,
						"From: Mick Verboeket <noreply@mickverboeket.com>");
						$message= 'Uw account is aangemaakt, kijk in uw postvak in. ';
					}
				}
			}
		}
	}
}
	}
}
?>

<html>
<head>
<title>Mick Verboeket - Register</title>
<link href="includes/style.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
	if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
		document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
		else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>
<body>
<form name ="form2" action="" method="post">
<table class="tabel" align="center">
       <tr> 
          <td colspan="2" background="includes/header.gif" class='kopje'><center class="bold"><b>Register</b></center></td>
        </tr>
				<?
				if(isset($message))
				{
				?>
				<tr> 
					<td colspan="2"><div align="center"><? echo "$message"; ?></font></div></td>
				</tr>
				<?php
				}
				?>
				<tr> 
					<td width="50%">Gebruikersnaam:</td>
					<td width="50%"><input name="reg_username" type="text" id="reg_username" value="" size="30" maxlength="30"></td>
				</tr>
				<tr> 
                	<td>Uw voornaam:</td>
					<td><input name="firstname" type="text" id="firstname" value="" size="30"></td></tr>
                    
				<tr> 
                	<td>Uw achternaam:</td>
					<td><input name="lastname" type="text" id="lastname" size="30" ></td></tr>
                    
				<tr> 
                	<td>Geboortedatum:</td>
					<td><input name="birthday" type="text" id="birthday" size="2" maxlength="2" value="DD">/<input name="birthmonth" type="text" id="birthmonth" size="2" maxlength="2" value="MM">/<input name="birthyear" type="text" id="birthyear" size="4" maxlength="4" value="JJJJ"></td></tr>
                    <tr>
					<td>Email adres:</td>
					<td><input name="email" type="text" id="username3" size="30" ></td>
				</tr>
				<tr> 
					<td>Bevestiging email adres:</td>
					<td><input name="email2" type="text" id="email" size="30"></td>
				</tr>
					
				<tr> 
					<td></td>
					<td><input type="submit" name="Submit" value="Register"></td>
				</tr>
			</td>
		</tr>
</table>
</form>
<br>
<tr>
<td class="links"><center><a href="index.php">Login</a> | <a href="lost.php">Lost password</a> | <a href="contact.php">Contact us</a></center></td>
</tr>
</body>
</html>
 
Overigens, als ik me nu registreer, komt er in de database de volgende tijd te staan:
2011-02-23 06:45:05

hoe kan ik dit naar "onze" tijd krijgen?
Als iemand me met beide problemen zou willen helpen zou ik dat top vinden, een nieuwe vraag maken lijkt me overbodig..
 
Ik kom $birthdate helemaal niet tegen in je script, behalve dan in de query. Ik weet niet hoe de birthdate kollom is opgezet in mysql, maar misschien dat het veld standaard met de now date gevuld wordt.
 
Ik had dus eerst onder $password=md5($random_password22); staan:
$birthdate=mktime(0,0,0, $birthmonth, $birthday, $birthyear);

maar dan werkt het niet. Vandaar dat ik hier op het forum ben, het is logisch dat die er niet staat want ik weet niet hoe ik het moet doen :P
 
Ik kan de tabel ook wel laten zien als je dat wil, maar ik zie niet hoe het iets bijdraaigt
 
echo date("d-M-Y", mktime(0, 0, 0,$birthmonth, $birthday, $birthyear));
Als je dit doet, wat laat hij dan zien?
Ik weet niet zeker, maar zou het niet kunnen dat de $_POST gegevens strings zijn ipv integers
 
voor de eerste if

dit vond ik nog online!

$timestamp = mktime(0, 0, 0, $_POST['month'], $_POST['day'], $_POST['year']);

$insert_date = date('M-j-Y', $timestamp);
 
Ik wil echt niet ondankbaar overkomen, alles beahlve dat, ik ben ontzettend dankbaar, maar ik kom niet wijs uit wat je bedoelt, zou je misschien mijn php code kunnen kopieëren en het daar inzetten, want ik weet echt niet op welke line ik hem nou percies moet hebben :P
 
Waarom niet gewoon het veld van de registratie-datum als type "TIMESTAMP" meegeven en dan als default-waarde CURRENT_TIMESTAMP meegeven.

Hoef je het veld niet eens meer in je INSERT-query op te nemen ;)
 
Snap er echt niks meer van op deze manier, haha.

Als iemand even duidelijk zou willen zeggen wat ik in welke lijn moet invoegen en waar ik de database op moeten zetten (kolom 'birthdate' staat nu gewoon op DATE)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan