?>
-----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 ;
@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?
@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.
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.
?>
<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> €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:
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
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.