<?php
include ("connect.php") ;

if(isset($_POST['Schrijf']))
{

$naam = $_POST['naam'];
$achternaam = $_POST['achternaam'];
$telefoon = $_POST['telefoon'];
$mobiel = $_POST['mobiel'];
$ip = $_SERVER["REMOTE_ADDR"];

$sql = "INSERT INTO nieuws
VALUES
(
'" . $_POST['naam'] . "',
'" . $_POST['achternaam'] . "',
'" . $_POST['telefoon'] . "',
'" . $_POST['mobiel'] . "'

)";
if(mysql_query($sql))
{
echo 'Succesvol ingeschreven!';
}
else
{
echo mysql_error();
}


}else{

?>
-----connect.php--------
<?php
$host = "localhost"; // Hier je mysql-host
$user = "Erik"; // Hier je mysql-usernaam
$pass = "****"; // Hier je mysql-wachtwoord
$db = "Test"; // Hier je mysql-database

mysql_connect($host,$user,$pass) or die("Kon niet verbinden met MySQL");
mysql_select_db($db) or die("Kon niet verbinden met de database");

?>
----------------

Dan krijg ik de volgende error:
Column count doesn't match value count at row 1

De database ziet er zo uit:

CREATE TABLE `nieuws` (
`Id` int(11) NOT NULL auto_increment,
`naam` text NOT NULL,
`achternaam` text NOT NULL,
`telefoon` text NOT NULL,
`mobiel` text NOT NULL,
`datum` date NOT NULL default '0000-00-00',
`Ip` text NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;

Kan iemand me helpen? alvast bedankt.
regel 13 t/m 21. Je moet even aangeven in welke velden je wil inserten, dus:

INSERT INTO tabel
(
veld1,
veld2
)
VALUES
(
value1,
value2
)
En hoe moet ik dat in mijn geval oplossen?

(niet zo goeie php-er)
<?php
include ("connect.php");

function StripVar($value)
{
if(version_compare(phpversion(),"4.3.0") == "-1")
{
return mysql_escape_string($value);
}
else
{
return mysql_real_escape_string($value);
}
}

if(isset($_POST['Schrijf']))
{

$naam = StripVar($_POST['naam']);
$achternaam = StripVar($_POST['achternaam']);
$telefoon = StripVar($_POST['telefoon']);
$mobiel = StripVar($_POST['mobiel']);
$ip = $_SERVER["REMOTE_ADDR"];

$sql = "INSERT INTO nieuws
('veldnaam1',
'veldnaam2',
'veldnaam3',
'veldnaam4'
)
VALUES
(
'" . $naam . "',
'" . $achternaam . "',
'" . $telefoon . "',
'" . $mobiel . "'

)";
if(mysql_query($sql))
{
echo 'Succesvol ingeschreven!';
}
else
{
echo mysql_error();
}


}else{

?>

[edit]
Even volledige gemaakt. Zo beter heren?
[/edit]
@Pepijn
Waarom maak je eerst $naam enz. aan en gooi je de boel daarna in een query maar rechtstreeks uit de $_POST[] waarden? PHP een beetje aan het werk houden?
Robert_Deiman schreef op 05.02.2008 22:56
@Pepijn
Waarom maak je eerst $naam enz. aan en gooi je de boel daarna in een query maar rechtstreeks uit de $_POST[] waarden? PHP een beetje aan het werk houden?


Omdat ik alleen de query volledig voor hem heb gemaakt. Aan de rest van de code heb ik niet gezeten.
Bedankt voor je reactie.

Nu krijg ik:
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 ''naam', 'achternaam', 'telefoon', 'mobiel' ) VALUES ' at line 2

Of doe ik nu iets gigantisch verkeerd?

BVD

[edit]Mijn code ziet er nu als volgd uit... Hij zegt wel, succes vol ingeschreven, maar hij schrijft alleen niets in database.

<?php include ("connect.php") ;

if(isset($_POST['Schrijf']))
{

$naam = $_POST['naam'];
$achternaam = $_POST['achternaam'];
$telefoon = $_POST['telefoon'];
$mobiel = $_POST['mobiel'];
$ip = $_SERVER["REMOTE_ADDR"];

$sql = "INSERT INTO nieuws(Id,naam,achternaam,telefoon,mobiel,datum,ip)
VALUES
(
'',
'" . $_POST['naam'] . "',
'" . $_POST['achternaam'] . "',
'" . $_POST['telefoon'] . "',
'" . $_POST['mobiel'] . "',
NOW(),
'" . $_SERVER['REMOTE_ADDR'] . "'
)";

echo 'Succesvol ingeschreven!';



}else{

?>
<table width="426" height="108" border="2" bordercolor="#FF0000">
<tr>
<td scope="row">BELANGRIJK!!!<br />
Opgeven mag alleen als je <strong>16</strong> jaar of ouder bent.<br />
Na het klikken op inschrijven, maak je <strong>direct</strong> &euro;5.- over naar rekening <strong>XXXXXX</strong>. Als <strong>omschrijving</strong> gebruik je je<strong> voor en achternaam.</strong></td>
</tr>
</table>
<br />
<form name="inschrijven" method="post">
<table width="316" border="0">
<tr>
<td width="162" scope="row"><div align="left">Naam:

</div></td>
<td width="144" scope="row"><input name="naam" type="text" id="naam" /></td>
</tr>
<tr>
<td scope="row"><div align="left">Achternaam:

</div></td>
<td scope="row"><input name="achternaam" type="text" id="achternaam" /></td>
</tr>
<tr>
<td scope="row"><div align="left">Telefoon:
</div></td>
<td scope="row"><input name="telefoon" type="text" id="telefoon" /></td>
</tr>
<tr>
<td scope="row"><div align="left">Telefoon(06):
</div></td>
<td scope="row"><input name="mobiel" type="text" id="mobiel" /></td>
</tr>
</table>

<input name="Schrijf" type="submit" value="Opgeven">

</form>
<?php
}
?>[/edit]

[edit]EDIT 2: Probleem opgelost![/edit]
Je voert je query nergens uit je controleerd ook nergens of je query wel netjes is uitgevoerd. je foutafhandeling dus.


<?php
    $sql = "INSERT INTO
                    nieuws
                (
                    naam,
                    achternaam,
                    telefoon,
                    mobiel,
                    datum,
                    ip
                ) VALUES (
                    '" . mysql_real_escape_string($_POST['naam']) . "',
                    '" . mysql_real_escape_string($_POST['achternaam']) . "',
                    '" . mysql_real_escape_string($_POST['telefoon']) . "',
                    '" . mysql_real_escape_string($_POST['mobiel']) . "',
                    NOW(),
                    '" . $_SERVER['REMOTE_ADDR'] . "'
                )";

    $res = mysql_query($sql);

        if($res){
        echo 'Succesvol ingeschreven!';
        }else{
        trigger_error(mysql_error());
        }

?>


ik heb de [php]mysql_real_escape_string()[/php] functie toegevoegd om je te behoeden voor mysql injections. Ook heb ik je id veld laten vervallen in je query. SQL verzint deze er zelf bij omdat je autoincrement aan hebt staan op je id veld in je tabel

ik hoop dat je 't snapt zo!

Crispijn
[edit]inspringen[/edit]
Offtopic en het is eigenlijk al gezegd: $naam = $_POST['naam']; is fout. Dit is dé manier om bugs in je systeem aan te maken, de garantie op ernstige (veiligheids-) problemen.

Geen mens die namelijk kan zien dat $naam eigenlijk een onbetrouwbare hond is die flink van zich af kan bijten. Een hacker kan hier namelijk de meest gruwelijke code in zetten, jij controleert dat helemaal nergens. Daarnaast is het volkomen zinloos, zo kun je nog wel een stuk of tig zinloze kopietjes aanmaken. Werkverschaffing dus.

Alles wat van de bezoeker/browser afkomstig is, zul je moeten controleren en beveiligen. Dit mag je nooit vergeten! En om het voor jezelf eenvoudig te houden, gebruik je de originele variabele, bv. $_POST['naam'], om in 1 oogopslag te kunnen zien dat je hier met user-input te maken hebt:
ALARM! onbetrouwbare zooi, dat moet worden beveiligd.

@Crispijn: SQL verzint helemaal niks, de database voert jouw opdrachten uit. En wanneer jij als default een auto_increment hebt opgegeven, zal dit veld automatisch worden opgehoogd wanneer jij geen andere input geeft.

MySQL wil nog wel eens de data verneuken, maar dat ligt aan jouw keuze voor MySQL en gebrekkige instellingen. Dat valt in de categorie 'verzinnen'...
@Frank... SQL verzint het niet indd. Alleen die waarde id hoef je dus niet in een query in te vullen... You get my point... Beetje verkeerd geformuleerd door mij.
@Crispijn: Ik ging er ook al wel van uit dat jij het snapt, maar anderen lezen dit topic ook. Vandaar mijn opmerking over het "verzinnen" van een waarde voor het id.

Reageren