goedenacht!

ik ben bezig met een login systeem te maken, alleen stuit ik nu al een avond lang op de zelfde error:

Column count doesn't match value count at row 1

Mijn database ziet er als volgt uit:
CREATE TABLE `prospect` (
`prospect_nr` int(11) NOT NULL auto_increment,
`naam` varchar(50) NOT NULL default '',
`voornaam` varchar(50) NOT NULL default '',
`titel` char(3) NOT NULL default '',
`adres` varchar(50) NOT NULL default '',
`postcode` varchar(6) NOT NULL default '',
`plaats` varchar(50) NOT NULL default '',
`land` varchar(20) NOT NULL default '',
`identiteit` varchar(10) NOT NULL default '',
`email` varchar(50) NOT NULL default '',
`telefoon` varchar(13) NOT NULL default '',
`mobiel` varchar(13) NOT NULL default '',
`fax` varchar(13) NOT NULL default '',
`beroep` varchar(50) NOT NULL default '',
`werk` varchar(50) NOT NULL default '',
`interesse1` varchar(50) NOT NULL default '',
`interesse2` varchar(50) NOT NULL default '',
`interesse3` varchar(50) NOT NULL default '',
`oppervlak1` varchar(10) NOT NULL default '',
`oppervlak2` varchar(10) NOT NULL default '',
`oppervlak3` varchar(10) NOT NULL default '',
`gebruik` varchar(50) NOT NULL default '',
`financiering` varchar(10) NOT NULL default '',
`geld` varchar(10) NOT NULL default '',
`gesprek` char(3) NOT NULL default '',
`nieuwsbrief` char(3) NOT NULL default '',
`termsofuse` char(3) NOT NULL default '',
`wachtwoord` varchar(32) default NULL,
PRIMARY KEY (`prospect_nr`)


Mijn codering waar het fout gaat is deze:
<?
if(!empty($_POST)){
$prospect_nr = $_POST['prospect_nr'];
$naam = $_POST['naam'];
$voornaam = $_POST['voornaam'];
$titel = $_POST['titel'];
$adres = $_POST['adres'];
$postcode = $_POST['postcode'];
$plaats = $_POST['plaats'];
$land = $_POST['land'];
$identiteit = $_POST['identiteit'];
$email = $_POST['email'];
$telefoon = $_POST['telefoon'];
$mobiel = $_POST['mobiel'];
$fax = $_POST['fax'];
$beroep = $_POST['beroep'];
$werk = $_POST['werk'];
$interesse1 = $_POST['interesse1'];
$interesse2 = $_POST['interesse2'];
$interesse3 = $_POST['interesse3'];
$oppervlak1 = $_POST['oppervlak1'];
$oppervlak2 = $_POST['oppervlak2'];
$oppervlak3 = $_POST['oppervlak3'];
$gebruik = $_POST['gebruik'];
$financiering = $_POST['financiering'];
$geld = $_POST['geld'];
$gesprek = $_POST['gesprek'];
$nieuwsbrief = $_POST['nieuwsbrief'];
$termsofuse = $_POST['termsofuse'];
$wachtwoord = $_POST['wachtwoord'];


$sql_query = "SELECT * FROM prospect WHERE naam='".$naam."';";
$result = mysql_query($sql_query);

if(mysql_num_rows($result) > 0) {
$text = "$naam is al geregistreerd. <A HREF=\"" . $_SERVER["PHP_SELF"] . "\">Opnieuw registeren</A>";

echo($text);


} else {
$sql_query = "INSERT INTO prospect (prospect_nr,naam,voornaam,titel,adres,postcode,plaats,land,identiteit,email,telefoon,mobiel,fax,beroep,werk,interesse1,interesse2,interesse3,oppervlak1,oppervlak2,oppervlak3,gebruik,financiering,geld,gesprek,nieuwsbrief,termsofuse,wachtwoord)";
$sql_query .="VALUES ('".$prospect_nr."','".$naam."','".$voornaam."','".$titel."','".$adres."','".$postcode."','".$plaats."','".$land."','".$identiteit."','".$email."','".$telefoon."','".$mobiel."','".$fax."','".$beroep."','".$werk."' '".$interesse1."','".$interesse2."','".$interesse3."','".$oppervlak1."','".$oppervlak2."','".$oppervlak3."','".$gebruik."','".$financiering."','".$geld."','".$gesprek."','".$nieuwsbrief."','".$termsofuse."','".$wachtwoord."');";
$result = mysql_query($sql_query) or die(mysql_error());
$text="U heeft $naam toegevoegd, bedankt voor de aanmelding";

echo($text);


}
?>

Ik heb al gezocht op een aantal fora, waar ze de volgende oplossingen hadden:
- spaties weghalen;
- goed alle velden laten vullen

Ik kom er dus nog steeds niet uit, iemand anders misschien?
`prospect_nr` int(11) NOT NULL auto_increment,

en dan met handje het prospect-nummer in de database proberen weg te schrijven, gaat natuurlijk niet lukken. Met auto_increment laat je de database zélf een nieuw nummer invullen, het is dan overbodig (en onmogelijk) om zelf nogmaals een nummer in te vullen.

Oplossing: Neem deze kolom niet op in de INSERT-query en verwijder uiteraard ook de value die je probeert in deze kolom te zetten.
ik heb deze verwijderd bij de INSERT en ook bij de VALUE. Ik krijg nu nog steeds dezelfde foutmelding over colom count. Moet ik deze waarden meesturen met het formulier misschien? Hij staat nog steeds op http://www.frank-raterink.nl/Zinvest/tEN/test.php
Hoe ziet de query die je nu gebruikt eruit?
<?
require("connection.php");

?>
<?php
require("connection.php");
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$values = array ();
foreach ($_POST as $key => $value)
{
$values[$key] = mysql_real_escape_string ($value);
}

$sql_query = "INSERT INTO prospect (
naam,
voornaam,
titel,
(............................)
termsofuse,
wachtwoord
) VALUES (
'".$values['naam']."',
'".$values['voornaam']."'
'".$values['titel']."'
(...........................)
'".$values['termsofuse']."'
'".$values['wachtwoord']."'
);";


$result = mysql_query($sql_query); // hier GEEN foutafhandeling! Zie volgende regel:
if(!$result && mysql_errno() == 1062)
{
$text = $values['naam'].' is al geregistreerd. <A HREF="' . $_SERVER['PHP_SELF'] . '">Opnieuw registeren</A>';
echo $text;
die;
}
elseif(!$result)
{
die(mysql_error()); // kan nog beter, die() verdient geen schoonheidsprijs
}
else
{
$text= "$values[naam] is toegevoegd";
echo $text;
die();
}
}
else
{
?>
<b>Registreren</b><br>
<FORM NAME="toevoegen" METHOD="post" ACTION="<?php echo($_SERVER["PHP_SELF"]);?>">
<table width="90%" border="0">
<tr>
<td width="17%">First name</td>
<td colspan="3"><INPUT TYPE="text" NAME="voornaam"
(...................................)
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="3"><INPUT TYPE="submit" VALUE="toevoegen"></td>
</tr>
</table>
</FORM>

<?php
}
?>
Blanche schreef op 20.10.2006 14:14
Hoe ziet de query die je nu gebruikt eruit?
Waarom voor de 100ste keer de volledige code??? Graag even alle overbodige zooi weghalen, mijn scroll-muisje wordt een beetje moe van al dat scrollen...
<?
'".$values['voornaam']."'
'".$values['titel']."'
?>
Waar zijn de komma's gebleven om de verschillende waardes van elkaar te scheiden? Er missen er zeker een stuk of 26.
<?php
require("connection.php");
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$values = array ();
foreach ($_POST as $key => $value)
{
$values[$key] = mysql_real_escape_string ($value);
}

$sql_query = "INSERT INTO prospect (
naam,
voornaam,
titel,
adres,
(.......................................)
termsofuse,
wachtwoord
) VALUES (
'".$values['naam']."',
'".$values['voornaam']."',
(........................................................)
'".$values['termsofuse']."',
'".$values['wachtwoord']."',
);";


$result = mysql_query($sql_query); // hier GEEN foutafhandeling! Zie volgende regel:
if(!$result && mysql_errno() == 1062)
{
$text = $values['naam'].' is al geregistreerd. <A HREF="' . $_SERVER['PHP_SELF'] . '">Opnieuw registeren</A>';
echo $text;
die;
}
elseif(!$result)
{
die(mysql_error()); // kan nog beter, die() verdient geen schoonheidsprijs
}
else
{
$text= "$values[naam] is toegevoegd";
echo $text;
die();
}
}
else
{
?>


ok dat was iig één fout. nu geeft ie de foutmelding:
You have an error in your SQL syntax near ')' at line 57
terwijl
<? '".$values['postcode']."', ?>
regel 57 is (in mn dreamweaver) daar komen geen includes bij oid.
Tja, maar waarschijnlijk wordt de fout veroorzaakt door iets dat in de buurt van regel 57 staat. Met alleen die regel zonder verdere context is je vraag niet te beantwoorden...
Wat dacht je van:
'".$values['wachtwoord']."',
);";

Wat doet die komma achter het wachtwoord? Komma's gebruik je om waardes van elkaar te scheiden. Wanneer er geen waardes meer zijn, valt er ook niets te scheiden. Na de laaste VALUE kan er dus nooit meer een komma komen, het is tenslotte de laatste. En wat komt er na de laaste? Precies, helemaal niets!

Oplossing: Komma met een grote boog richting prullenbak gooien.
JUIST!! dat was hem... geloof het of niet:
MAAR HET WERKT!!! ECHT BLIJHEID nu :P
BEDANKT IEDEREEN TOT ZO VER!!!

Reageren