Hallo mensen ik heb een leuk inlog-systeem gemaakt, wat eerder op een andere website wel werkte. Nu moest ik een website voor school maken en heb ik een paar mogelijkheden veranderd, zoals het invullen van je leerlingnummer dat er nu bij zit. Toch krijg ik steeds te horen 'Column count doesn't match value count at row 1' als ik op 'registreren' druk. Hieronder het stukje waar het waarschijnlijk mis gaat:

		

$naam = mysql_real_escape_string(substr($_POST['naam'],0,255));
		$wachtwoord = mysql_real_escape_string(substr($_POST['wachtwoord'],0,255));
		$wachtwoord = md5($wachtwoord);
		$mail = mysql_real_escape_string(substr($_POST['mail'],0,255));
		$leerlingnummer = mysql_real_escape_string(substr($_POST['leerlingnummer'],0,255));
		$ip = $_SERVER['REMOTE_ADDR'];
		
		
		$query = "INSERT INTO accounts (naam,ip,wachtwoord,mail,leerlingnummer,datum,avatar) VALUES (\""   . $naam .  "\", \"" . $ip .  "\", \"" . $wachtwoord .  "\", \"" . $mail .  "\", \"" . $leerlingnummer .  "\", NOW() , \"" . $avatar .  "\",' ')";
		$res = mysql_query($query) or die(mysql_error());		$sql3 = "SELECT member_id FROM accounts WHERE naam='".$naam."'";
		$res3 = mysql_query($sql3)or die(mysql_error());
		$row = mysql_fetch_assoc($res3); // Vraag nu de row op van de email!
		$member_id = $row['member_id'];
		$headers = "Content-type: text/html"; // Zet headers zodat je html in je email kan gebruiken
		mail($mail,"Activatie account Economie Marnix College","
			
			Je link om je account te activeren is: <strong><a href='http://www.paulbroek.nl/EconomieSectie/registreren.php?a=$member_id'>http://www.paulbroek.nl/EconomieSectie/registreren.php?a=$member_id</a></strong> <br>
			<br>
			<br>
			Groeten <strong><a href='http://www.paulbroek.nl/EconomieSectie/index.php'>Economie Sectie</a></strong>.",$headers);  // stuur de email

1. strings binnen een sql statement dienen geqoute te worden met '' en niet met ""

2. zie http://dev.mysql.com/doc/refman/5.1/en/insert.html

het aantal velden genoemd in () VALUES dient gelijk te zijn aan VALUES ()

En waarom zit je het wachtwoord te verkloten met een substr welke ook nog eens nergens op slaat.
En dat flipje doe je ook bij de naam.

Zorg dat bij de insert / update gewoon een foutmelding komt indien een waarde niet past.

Zie http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html
Zoiets als dit:

INSERT INTO ....
(veld1, 2, 3, 4)
VALUES
(value1, 2, 3, 4, 5, 6)
Vergis ik me of is het aantal velden genoemd in () VALUES al gelijk aan VALUES ()? Ik zie het nog steeds niet, overigens het quoten heb ik altijd zo gedaan en heeft altijd z'n werk gedaan. Ik zoek nog naar de fout..
Paul, het is nu eenmaal vastegelegd dat je strings binnen SQL qoute met '' en niet met "", dus bent nu niet koppig door halstarige te blijven qouten met "", want dat is syntactisch fout!

voor de rest moet je eens goed kijken wat je doet met `email`

indien je overzichtelijk - en correcte foutafhandeling - programeert dan had je dit allang gezien
Duidelijk scripten geeft overzicht.
Je hebt (7 velden) VALUES (8 waarden)
<?php
$query = "INSERT INTO accounts
(naam,
ip,
wachtwoord,
mail,
leerlingnummer,
datum,
avatar)
VALUES
('" . $naam . "',
'" . $ip . "',
'" . $wachtwoord . "',
'" . $mail . "',
'" . $leerlingnummer . "',
NOW(),
'" . $avatar . "',
' ')";
?>

Reageren