Forum » Server-Side scripting » INSERT error
Hardstyle
Berichten: 225
avatar
Offline Stuur privebericht
Wat is hier de fout, ik heb de query nog een keer na geschreven maar IK kan de fout er niet uithalen.

Code | Selecteer Alles
minimaliseren
1
mysql_query("INSERT INTO messages (to, from, subject, message, date, ip) VALUES ('" strtolower($_POST['to']) . "', '" strtolower($information['nickname']) . "', '" addslashes($_POST['subject']) . "', '" addslashes($_POST['message']) . "', '" time() . "', '" $_SERVER['REMOTE_ADDR'] . "')") or die(mysql_error());


De message tabel is:

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `messages` (
  `
idint(20NOT NULL AUTO_INCREMENT,
  `
tovarchar(16NOT NULL,
  `
fromvarchar(16NOT NULL,
  `
subjectvarchar(200NOT NULL,
  `
messagetext NOT NULL,
  `
dateint(50NOT NULL,
  `
readvarchar(5NOT NULL DEFAULT 'no',
  `
ipvarchar(50NOT NULL,
  
PRIMARY KEY (`id`)
ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=;


EDIT:

De error is:
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 'to, from, subject, message, date, ip) VALUES ('demo', 'jackie', 'Test bericht', ' at line 1
Laatst gewijzigd door Jackie op 2010-10-28 14:56:25
28-10-2010 14:55
Dit topic is 233 keer bekeken door 43 verschillende leden
Reacties op: "INSERT error"
1 | 2 Volgende pagina
R. Jipping
Berichten: 1596
avatar
Offline Stuur privébericht
Vervang

Code | Selecteer Alles
minimaliseren
1
time()

door:
Code | Selecteer Alles
minimaliseren
1
$time


En dan een varible erboven:
Code | Selecteer Alles
minimaliseren
1
$time date('Y-m-d H:i:s');




Edit:
en verander de int(50) gewoon in datetime
Code | Selecteer Alles
minimaliseren
1
`dateint(50NOT NULL,
28-10-2010 15:27
Hardstyle
Berichten: 225
avatar
Offline Stuur privébericht
Ik wil de unix timestamp gebruiken dus die vervang ik niet.

Iemand anders die weet wat het probleem is.
28-10-2010 15:32
world-of-maffia.nl
Berichten: 744
avatar
Offline Stuur privébericht
Code | Selecteer Alles
minimaliseren
1
ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=;


misschien weghalen?
dit had ik toen ook... en doordat ik die weghaalde werkte ie!
28-10-2010 15:40
Hardstyle
Berichten: 225
avatar
Offline Stuur privébericht
Dat betekend dat de engine MyISAM etc,etc.

De tabel is goed alleen die mysql query is fout, dat heeft ie ook aan!
28-10-2010 15:44
Webdeveloper & Programmeu
Berichten: 1000
avatar
Offline Stuur privébericht
Verander ten eerste je varchar van to en from naar iets van 50.
Aangezien je toch wel mensen tegen kom die een grotere naam gan nemen.
ik ben zelf voorstander van id's aangezien als je een naam aanpast veel werk moet verrichten om het overal te fixen.

Volgens mij is er iets fouts in je php code.
Mag ik je script even zien?
28-10-2010 17:26
Berichten: 170
avatar
Offline Stuur privébericht
zoals de error zegt, je bent iets vergeten, hij wilt vna jou 6 dingen weten, terwel jij er maar 3 geeft.
hij wilt weten: to, from, subject, message, date, ip

en jij geeft dit: 'demo', 'jackie', 'Test bericht',
probeer het nog een keer, maar doe het dn zo,
'demo', 'jackie', 'test bericht', 'hallo', '00-00-000 00:00', '127.0.0.1'
28-10-2010 17:31
Rapifia Europe
Berichten: 3714
avatar
Offline Stuur privébericht
Probeer zo eens:
Code | Selecteer Alles
minimaliseren
1
2
3
4
mysql_query("INSERT INTO messages (to, from, subject, message, date, ip) 
VALUES ('"
.strtolower($_POST['to'])."', '".strtolower($information['nickname'])."', 
'"
.addslashes($_POST['subject'])."', '".addslashes($_POST['message'])."', NOW(), 
'"
.$_SERVER['REMOTE_ADDR']."')") or die(mysql_error());


Je moet een query op meerdere regels verspreiden, om te zien welke regel er verkeerd is
Anders geeft ie altijd regel 1 aan etc.
Nu moet je alleen even date veranderen in DATETIME.
(als je dat nog niet had)

Lars
28-10-2010 17:36
Webdeveloper & Programmeu
Berichten: 1000
avatar
Offline Stuur privébericht
Ik snap trouwens niet waarom je per see die functie now moet gebruiken hoor.
Het makkelijkste en beste is gewoon echt time() of mktime().
Krijg je alleen maar cijfers en scheelt weer laad werk als je grotere site hebt. Int word namelijk sneller gepakt.

Ten tweede kan je het mooi gebruiken voor vergelijkingen als bijv date kleiner is als time zulke dingen.
28-10-2010 17:39
nyan nyan nyan nyan
Berichten: 2076
avatar
Offline Stuur privébericht
MySQL heeft hele handige functies wat betreft data, NielsB. Zo kan je BETWEEN _ AND _ gebruiken, met UNIX_TIMESTAMP de datum omvormen naar integers als je dat nog zou willen, makkelijk op jaar/maand selecteren (respectievelijk WHERE YEAR(date) = 2008 en WHERE MONTH(date) = 12), etc. Het is alleen even wennen, maar zeker de moeite waard om jezelf in te verdiepen

Jackie, waarom gebruik je bij $_POST['to'] alleen strtolower, en geen mysql_real_escape_string of addslashes? Persoonlijk gezien heb ik meer vertrouwen in veilige input als ik functies gebruik die ervoor gemaakt zijn, zoals mysql_real_escape_string dus Verder ga ik mee in larsisgoed9's query; in dit soort opmaak is je code veel overzichtelijker. Ook raad ik je aan om bepaalde waardes te echo'en, zeker weten of ze bevatten wat ze moeten bevatten. Succes!
28-10-2010 20:56
Webdeveloper & Programmeu
Berichten: 1000
avatar
Offline Stuur privébericht
@jannick, leuk en aardig maar je denkt toch niet serieus dat ik bepaalde functies niet ken? Ik gebruik zelf nooit omdat het ook de manier is hoe je programmeert. Als ik meerdere dingen uit me query nodig heb ga ik niet overbodig die dingen gebruiken waardoor je meerdere querys moet maken.

maar ik snap je punt wel ongeveer hoor, maar jij snapt denk ook wel mijn punt over de integer en varchar?


Als het nog niet wil werken zie ik graag een deel php code van je formulier en php checks.
28-10-2010 21:12
Reageer op: "INSERT error"
1 | 2 Volgende pagina
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden