f
Column count doesn't match value count at row 1
Door
frank
op 19-10-2006 01:18
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?
Link gekopieerd
waar plaats ik de INSERT dan, want in mijn versie was die verdeeld over voor en na de 2 lange reeksen waarden (die hierboven in mn code)
Link gekopieerd
Je maakt op een gegeven moment $sql_query aan (vraagje: waarom knip je deze op in 2 stukken? Volkomen overbodig en zinloos, maakt het onoverzichtelijk) en daarna komt mijn stukje code om de boel uit te voeren en te checken of het is gelukt.
Link gekopieerd
mijn php is nu als volgd:
<?
if(!empty($_POST)){
$prospect_nr = mysql_real_escape_string($_POST['prospect_nr']);
$naam = mysql_real_escape_string($_POST['naam']);
$voornaam = mysql_real_escape_string($_POST['voornaam']);
$titel = mysql_real_escape_string($_POST['titel']);
$adres = mysql_real_escape_string($_POST['adres']);
$postcode = mysql_real_escape_string($_POST['postcode']);
$plaats = mysql_real_escape_string($_POST['plaats']);
$land = mysql_real_escape_string($_POST['land']);
$identiteit = mysql_real_escape_string($_POST['identiteit']);
$email = mysql_real_escape_string($_POST['email']);
$telefoon = mysql_real_escape_string($_POST['telefoon']);
$mobiel = mysql_real_escape_string($_POST['mobiel']);
$fax = mysql_real_escape_string($_POST['fax']);
$beroep = mysql_real_escape_string($_POST['beroep']);
$werk = mysql_real_escape_string($_POST['werk']);
$interesse1 = mysql_real_escape_string($_POST['interesse1']);
$interesse2 = mysql_real_escape_string($_POST['interesse2']);
$interesse3 = mysql_real_escape_string($_POST['interesse3']);
$oppervlak1 = mysql_real_escape_string($_POST['oppervlak1']);
$oppervlak2 = mysql_real_escape_string($_POST['oppervlak2']);
$oppervlak3 = mysql_real_escape_string($_POST['oppervlak3']);
$gebruik = mysql_real_escape_string($_POST['gebruik']);
$financiering = mysql_real_escape_string($_POST['financiering']);
$geld = mysql_real_escape_string($_POST['geld']);
$gesprek = mysql_real_escape_string($_POST['gesprek']);
$nieuwsbrief = mysql_real_escape_string($_POST['nieuwsbrief']);
$termsofuse = mysql_real_escape_string($_POST['termsofuse']);
$wachtwoord = mysql_real_escape_string($_POST['wachtwoord']);
} 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
) 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); // hier GEEN foutafhandeling! Zie volgende regel:
if(!result && mysql_errno() == 1062) {
$text = $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 = $naam.' is toegevoegd';
echo $text;
die();
}
?>
maar nu wordt mn formulier in zijn geheel niet meer weergegeven. Heb ik het stukje code van Frank niet goed geimplementeerd?
Link gekopieerd
Dat heb je uitstekend gedaan, je hebt alleen het formulier vergeten... Die had er niet bijgezet omdat het niets toevoegd om dat hier nogmaals neer te zetten.
Link gekopieerd
over die browsers, misschien zie je het wel als je de temporary internet files veranderd, ik heb het vaak met css, volgens mij cached ie die gewoon
Link gekopieerd
zou dit een goede manier zijn om het formulier erin te zetten?
Ik heb de bovenste helft even weggelaten wegens de ruimte die het in beslag neemt.
<?
$result = mysql_query($sql_query); // hier GEEN foutafhandeling! Zie volgende regel:
if(!result && mysql_errno() == 1062) {
$text = $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 = $naam.' is toegevoegd';
echo $text;
die();
} else {
?>
<b>Registreren</b><br>
<FORM NAME="toevoegen" METHOD="post" ACTION="<? echo($_SERVER["PHP_SELF"]);?>">
<table width="90%" border="0">
<tr>
<td width="17%">First name</td>
<td colspan="3"><INPUT TYPE="text" NAME="voornaam" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Name</td>
<td colspan="3"><input type="text" name="naam" maxlength="40"></td>
</tr>
<tr>
<td>Title</td>
<td colspan="3"><INPUT TYPE="text" NAME="titel" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Address</td>
<td colspan="3"><INPUT TYPE="text" NAME="adres" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Postal code</td>
<td colspan="3"><INPUT TYPE="text" NAME="postcode" MAXLENGTH="40"></td>
</tr>
<tr>
<td>City</td>
<td colspan="3"><INPUT TYPE="text" NAME="plaats" MAXLENGTH="40"></td>
</tr>
<tr>
<td>ID</td>
<td colspan="3"><select name="identiteit">
<option value="paspoort">Passport</option>
<option value="rijbewijs">Driver licence</option>
<option value="euid">EU ID</option>
</select></td>
</tr>
<tr>
<td>Email</td>
<td colspan="3"><INPUT TYPE="text" NAME="email" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Telephone</td>
<td colspan="3"><INPUT TYPE="text" NAME="telefoon" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Mobile</td>
<td colspan="3"><INPUT TYPE="text" NAME="mobiel" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Fax</td>
<td colspan="3"><INPUT TYPE="text" NAME="fax" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Profession</td>
<td colspan="3"><INPUT TYPE="text" NAME="beroep" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Company url</td>
<td colspan="3"><INPUT TYPE="text" NAME="werk" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Interest</td>
<td width="20%"><input type="checkbox" name="gesprek2" value="checkbox">
Appartment</td>
<td width="5%">Oppervlakte</td>
<td width="64%"><INPUT TYPE="text" NAME="oppervlak1" MAXLENGTH="40"></td>
</tr>
<tr>
<td> </td>
<td><input type="checkbox" name="gesprek3" value="checkbox">
Villa</td>
<td>Oppervlakte</td>
<td><INPUT TYPE="text" NAME="oppervlak2" MAXLENGTH="40"></td>
</tr>
<tr>
<td> </td>
<td><input type="checkbox" name="gesprek4" value="checkbox">
Office</td>
<td>Oppervlakte</td>
<td><INPUT TYPE="text" NAME="oppervlak3" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Use</td>
<td colspan="3"><select name="gebruik">
<option value="investering">Investing</option>
<option value="vakantie">Vacation and rental</option>
<option value="eigen">Own use</option>
</select></td>
</tr>
<tr>
<td>Finance</td>
<td colspan="3"><INPUT TYPE="text" NAME="financiering" MAXLENGTH="40"></td>
</tr>
<tr>
<td>How much</td>
<td colspan="3"><INPUT TYPE="text" NAME="geld" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Introduction gesprek</td>
<td colspan="3"><input type="checkbox" name="gesprek" value="checkbox"></td>
</tr>
<tr>
<td>News letter</td>
<td colspan="3"><input type="checkbox" name="nieuwsbrief" value="checkbox"></td>
</tr>
<tr>
<td>Terms of use</td>
<td colspan="3"><input type="checkbox" name="termsofuse" value="checkbox"></td>
</tr>
<tr>
<td>Password</td>
<td colspan="3"><INPUT TYPE="text" NAME="wachtwoord" MAXLENGTH="40"></td>
</tr>
<tr>
<td>Confirm password</td>
<td colspan="3"><INPUT TYPE="text" NAME="wachtwoord2" MAXLENGTH="40"></td>
</tr>
<tr>
<td> </td>
<td colspan="3"> </td>
</tr>
<tr>
<td> </td>
<td colspan="3"><INPUT name="submit" TYPE="submit" VALUE="toevoegen"></td>
</tr>
</table>
</FORM>
<br>
<br>
<br>
<br>
<?
}
?>
Link gekopieerd
Nog een tip. Iets als dit:
<?php
if(!empty($_POST)){
$prospect_nr = mysql_real_escape_string($_POST['prospect_nr']);
$naam = mysql_real_escape_string($_POST['naam']);
$voornaam = mysql_real_escape_string($_POST['voornaam']);
$titel = mysql_real_escape_string($_POST['titel']);
$adres = mysql_real_escape_string($_POST['adres']);
$postcode = mysql_real_escape_string($_POST['postcode']);
$plaats = mysql_real_escape_string($_POST['plaats']);
$land = mysql_real_escape_string($_POST['land']);
$identiteit = mysql_real_escape_string($_POST['identiteit']);
$email = mysql_real_escape_string($_POST['email']);
$telefoon = mysql_real_escape_string($_POST['telefoon']);
$mobiel = mysql_real_escape_string($_POST['mobiel']);
$fax = mysql_real_escape_string($_POST['fax']);
$beroep = mysql_real_escape_string($_POST['beroep']);
$werk = mysql_real_escape_string($_POST['werk']);
$interesse1 = mysql_real_escape_string($_POST['interesse1']);
$interesse2 = mysql_real_escape_string($_POST['interesse2']);
$interesse3 = mysql_real_escape_string($_POST['interesse3']);
$oppervlak1 = mysql_real_escape_string($_POST['oppervlak1']);
$oppervlak2 = mysql_real_escape_string($_POST['oppervlak2']);
$oppervlak3 = mysql_real_escape_string($_POST['oppervlak3']);
$gebruik = mysql_real_escape_string($_POST['gebruik']);
$financiering = mysql_real_escape_string($_POST['financiering']);
$geld = mysql_real_escape_string($_POST['geld']);
$gesprek = mysql_real_escape_string($_POST['gesprek']);
$nieuwsbrief = mysql_real_escape_string($_POST['nieuwsbrief']);
$termsofuse = mysql_real_escape_string($_POST['termsofuse']);
$wachtwoord = mysql_real_escape_string($_POST['wachtwoord']);
}
?>
kan veel gemakkelijker zo:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$values = array ();
foreach ($_POST as $key => $value) {
$values[$key] = mysql_real_escape_string ($value);
}
}
?>
Hierna heb je een array met $values['naam'], $values['voornaam'], enz.
Link gekopieerd
zou dit een goede manier zijn om het formulier erin te zetten? Het is 1 van de vele mogelijkheden en er is niets mis mee.
Tip: Gebruik voor je html-tags nooit hoofdletters. Het is geen valide html en het wordt een bende wanneer je upper- en lowercase door elkaar gaat gooien.
En echo is geen functie, ( en ) horen daar dus niet bij.
Link gekopieerd
Jan Koehoorn schreef op 19.10.2006 17:00
Nog een tip. Iets als dit:
kan veel gemakkelijker zo:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$values = array ();
foreach ($_POST as $key => $value) {
$values[$key] = mysql_real_escape_string ($value);
}
}
?>
Hierna heb je een array met $values['naam'], $values['voornaam'], enz.
Omvat dit meteen al mijn waardes of moet ik die er nog op de één of andere manier inzetten?
Link gekopieerd
<?php
print_r($values);
?>
Laat je direct zien wat er is gebeurd!
Link gekopieerd