Hallo allemaal,

Ik heb een orderinvoer.html gemaakt (formulier) en die heeft als action weborderinvoer.php, waarvan hier de code:

<?PHP
//connecten met DB

mysql_connect ("localhost", "root", "", "qontrast")
or die ("Kan geen verbinding maken met de database");

//variabelen toewijzen aan POST-invoer

$lbedrijfsnaam = $_POST ['lbedrijfsnaam'];
$lcontactpersoon = $_POST['lcontactpersoon'];
$ladres = $_POST ['ladres'];
$lpostcode = $_POST ['lpostcode'];
$lplaats = $_POST ['lplaats'];
$laantal = $_POST ['laantal'];
$lgewicht = $_POST ['lgewicht'];

//gegevens in de database zetten

$SQLINPUT = "INSERT INTO orders (lbedrijfsnaam, lcontactpersoon, ladres, lpostcode, lplaats, laantal, lgewicht) VALUES ('".$lbedrijfsnaam."', '".$lcontactpersoon."', '".$ladres."', '".$lpostcode."', '".$lplaats."', '".$laantal."', '".$lgewicht."')";
mysql_query($SQLINPUT);

echo "De gegevens zijn werkt";
?>

Ik krijg geen enkele foutmelding, sterker nog, ik krijg netjes de melding 'De gegevens zijn verwerkt". Echter, als ik via PHPmyAdmin in de database ga kijken dan staan de gegevens er vreemd genoeg niet in.

Wat doe ik fout?

Ook is het mij niet duidelijk waarom de VALUES tussen '". ."' moeten staan, kan iemand me dat uitleggen?

Alvast bedankt voor jullie reacties!
Je gebruikt mysql_connect() verkeerd. Zie php.net.
Er is geen database geselecteerd.
Niet zinloos variabelen copïeren. Regels 9-15.
Query is lek. Zie mysql_real_escape_string() op php.net.
"De gegevens zijn werkt" is geen Nederlands.

De enkele quotes gebruik je in de query gewoon om het begin en eind van de teksten/data aan te geven.
Hoi SanThe,

De taalfout heb ik aangepast (te snel getypt denk ik). Ik zal een regel mysql_select_db toevoegen, stom van me. Maar kun je wat specifieker zijn met 'query is lek'?

bedankt voor je reactie.

Aad B: ik ga uitzoeken hoe ik een foutafhandeling in kan bouwen (ik dacht dat PHP deze standaard al had?)
- SanThe - op 02/12/2012 10:39:19

Query is lek. Zie mysql_real_escape_string() op php.net.


Zie ook SQL-Injection.
<?php or die ("Kan geen verbinding maken met de database");?>
Heeft die() überhaupt nut? Zo toon je alleen maar een halve pagina toch? Als je een bezoeker krijgt wilt die niet op een halve pagina komen. Die wilt weten of er iets fout is of niet.
Albert,

Ik ben maar wat aan het testen. Het is mijn eerste script, ik ben allang blij dat het IETS doet :-) Maar ik moet er zeker van leren dus dank voor je comment.

SanThe, ik heb je links opgezocht maar krijg daar als comment:

mysql_real_escape_string() Escapes special characters in the unescaped_string, taking into account the current character set of the connection so that it is safe to place it in a mysql_query(). If binary data is to be inserted, this function must be used.

Er is hier toch geen sprake van special characters? In dit filmpje http://www.youtube.com/watch?v=QB1A_y45VB0
word er heel simpel iets in een database gestoken, bij hem werkt het ook....

Kun je wat duidelijker zijn tegen mij beginnende PHPer? dit is mijn eerste script en van alleen links naar engelstalige websites word ik niet veel duidelijker (en dat is niet omdat ik geen Engels kan).

Alvast bedankt voor de moeite!

[size=xsmall]Toevoeging op 02/12/2012 11:26:28:[/size]

Het script ziet er nu zo uit:

<?PHP

//foutafhandeling aanzetten
ini_set('display_errors', 'On');
error_reporting(E_ALL);

//connecten met DB

mysql_connect ("localhost", "root", "")
or die ("Kan geen verbinding maken met de server");
mysql_select_db ("qontrast")
or die ("Kan geen verbinding maken met de database");

//variabelen toewijzen aan POST-invoer

$lbedrijfsnaam = $_POST ['lbedrijfsnaam'];
$lcontactpersoon = $_POST['lcontactpersoon'];
$ladres = $_POST ['ladres'];
$lpostcode = $_POST ['lpostcode'];
$lplaats = $_POST ['lplaats'];
$laantal = $_POST ['laantal'];
$lgewicht = $_POST ['lgewicht'];

//gegevens in de database zetten

$SQLINPUT = "INSERT INTO orders (lbedrijfsnaam, lcontactpersoon, ladres, lpostcode, lplaats, laantal, lgewicht) VALUES ('".$lbedrijfsnaam."', '".$lcontactpersoon."', '".$ladres."', '".$lpostcode."', '".$lplaats."', '".$laantal."', '".$lgewicht."')";
mysql_query($SQLINPUT);

echo "De gegevens zijn verwerkt";



?>

Waarom mag ik de $variabelen niet koppelen aan de POST? dat moet toch om de velden te definiëren zodat deze later in de query gebruikt kunnen worden? WAT doe ik dan fout en WAAROM?

Ik kreeg en krijg overigens geen foutmelding, alleen is het zo dat de gegevens niet in de database terecht komen....
S B op 02/12/2012 11:09:21

Ik kreeg en krijg overigens geen foutmelding, alleen is het zo dat de gegevens niet in de database terecht komen....
Je hebt nog steeds geen SQL foutmeldingen ingebouwd. Zie daarvoor de link die ik eerder gaf. Bouw dat in en je zal zien waarom de insert mislukt.
[code]
<?PHP
$sQuery = "SELECT iets FROM <tbl>";
if(!$rResult = MySQL_Query($sQuery))
{ echo MySQL_Error();
}
S B

Waarom mag ik de $variabelen niet koppelen aan de POST? dat moet toch om de velden te definiëren zodat deze later in de query gebruikt kunnen worden? WAT doe ik dan fout en WAAROM?

Je mag het wel maar het is niet nodig, je hebt immers de POST-variabelen al en die kan je in de query gebruiken.
mysql_real_escape_string gebruik je om te voorkomen dat iemand SQL statements in een invoer veld kan opgeven.

Je controleert niet of de velden zijn ingevuld, dus als een veld uit het formulier niet is ingevuld terwijl dat in de tabel wel moet zijn krijg je een foutmelding.
Die foutmelding moet je dan dus opvangen, zoals Aad aangeeft.

Reageren