Archief - Waarden aan MySQL-database toevoegen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

brecko

Legacy Member
Ik ben zopas begonnen met een beetje PHP te leren.
Heb zowat tutorials gevolgd om te proberen data uit een form
naar een database te krijgen (lokaal, via MAMP).

Dit is mijn HTML-code:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title>Hello</title>
<link rel="stylesheet" type="text/css" href="css/main.css"/>
</head>
<body>
	
<div id="topline"></div>
<div id="container">
	<form action="process.php" method="get">
		<label for="id">ID:</label><br /><input type="text" name="id" /><br />
		<label for="titel">Titel:</label><br /><input type="text" name="titel" /><br />
		<label for="desc">Inhoud:</label><br /><input type="text" name="desc" /><br />
		<input type="submit" value="submit" />
	</form>
</div>
</body>
<html>

Dit is het stukje PHP:

PHP:
<?php
$id=$_POST['id']; 
$titel=$_POST['titel']; 
$desc=$_POST['desc']; 
mysql_connect("localhost", "root", "root") or die(mysql_error()); 
mysql_select_db("Data") or die(mysql_error()); 
mysql_query("INSERT INTO tblITEMS VALUES ('$id', '$titel', '$desc')"); 
Print "Data met succes toegevoegd."; 
header("Location: index.php");
?>

Mijn waarden worden wel toegevoegd aan de tabel, maar de velden 'titel' en 'desc' zijn gewoon leeg.. ID-veld moet er normaal niet staan, maar als ik die weglaat, dan krijg ik helemaal niets toegevoegd.. Als het ID-veld er wel staat, wordt dat veld in mijn tabel automatisch geincrementeerd..

Weet er iemand waar mijn fout zit?

- EDIT - Ik heb er op het einde ook een redirect ingestoken, maar die doet helemaal niets!

Cycloon

Legacy Member
Echo uw $desc en $titel eens, als die correct worden geëcho'ed is uw tabel niet correct opgebouwd (verkeerde types ofzo).

brecko

Legacy Member
Dit is de structuur van mijn tabel.
s3zgo3.png


Als ik echo (op deze manier?):

PHP:
<?php 
$id=$_POST['id']; 
$titel=$_POST['titel']; 
$desc=$_POST['desc']; 

echo $titel;
echo $desc;

//$link = mysql_connect("localhost", "root", "root") or die(mysql_error()); 
//mysql_select_db("Data") or die(mysql_error()); 
//mysql_query("INSERT INTO tblITEMS VALUES ('$id','$titel', '$desc')"); 
//mysql_close($link);
//echo "great succes!";
//
//header('refresh: 5; url=index.php');
?>

dan krijg ik gewoon een lege pagina terug...

Heb trouwens ook de 'method' van het form ook naar 'post' gezet, stond nog op 'get'..

blackrabbit

Legacy Member
Zet eens bovenaan uw pagina de volgende regel code:
PHP:
error_reporting(E_ALL);
Dan zullen errors/warnings zichtbaar worden...

Joeshoe

Legacy Member
Probeer eens de velden te definieren in je mysql_query (en zet er eventueel een or die(mysql_error()) achter
dus
PHP:
mysql_query("INSERT INTO tblITEMS(id,titel,desc) VALUES ('$id', '$titel', '$desc')") or die(mysql_error());
Als je je velden niet definieert op voorhand, moet er bij VALUES voor elk veld een waarde staan in de juiste volgorde. Zoals je zelf zegt moet $id er staan anders gebeurt er geen auto_increment.
Als het probleem daarentegen bij je variabelen ligt, zit er iets mis met je POST. Je definitie van de variabelen zit wel goed, dus ik zie niet direct hoe het daar fout kan gaan.

Kemblin

Legacy Member
PHP:
<form action="process.php" method="get">

je form method naar "post" veranderen want in je php code spreek je je variabelen aan met $_POST
Als je "get" wil gebruiken zoals het nu is moet je variabelen met $_GET aanspreken.

*edit ik lees net dat ge het al op post hebt gezet. n/m
zeker dat je form action naar de juiste pagina verwijst?

blackrabbit

Legacy Member
Eens even wat deftiger gelezen: vermits er wel rijen worden toegevoegd maar slechts een aantal velden niet zijn ingevuld, denk ik ook aan incompatibele datatypes.
Ook: je ID is auto_increment, dan moet je niet zelf een waarde gaan meegeven he...

Nogmaals: voeg error_reporting toe aan je file + het volgende achter elke mysql_query:
PHP:
or die(mysql_error());
//vb: mysql_query("select 1") or die (mysql_error());
Je krijgt dan zowel de Mysql als PHP errors te zien.

Dat je header niets doet wil zeggen dat er al output is.

En gebruik eens echo ipv print ;-)

Ook: escape je input eens... (bvb met add_slashes)

Cycloon

Legacy Member
brecko zei:
Dit is de structuur van mijn tabel.
s3zgo3.png


Als ik echo (op deze manier?):

PHP:
<?php 
$id=$_POST['id']; 
$titel=$_POST['titel']; 
$desc=$_POST['desc']; 

echo $titel;
echo $desc;

//$link = mysql_connect("localhost", "root", "root") or die(mysql_error()); 
//mysql_select_db("Data") or die(mysql_error()); 
//mysql_query("INSERT INTO tblITEMS VALUES ('$id','$titel', '$desc')"); 
//mysql_close($link);
//echo "great succes!";
//
//header('refresh: 5; url=index.php');
?>

dan krijg ik gewoon een lege pagina terug...

Heb trouwens ook de 'method' van het form ook naar 'post' gezet, stond nog op 'get'..

Dan ligt het zeker aan uw code en niet aan mysql. Zeker uw form op method="post" zetten en die php code zit toch zeker in process.php?

brecko

Legacy Member
Ok, heb vandaag nog eens opnieuw geprobeerd, en nu voegt hij de teksten wel in,
in mijn tabel! Raar maar waar, heb niet echt noemenswaardige aanpassingen gedaan..

Ik zit nu wel nog met het probleem van die ID's. Momenteel geef ik het veld ID nog handmatig in, maar dat is uiteraard niet de bedoeling. De volgorde klopt trouwens ook soms niet, als ik bv. na ID '5' een record met ID '6' wil invoegen, zet hij die soms achter de record met ID '4'..

Wanneer ik nu mijn veld ID weglaat, en in de PHP dat ook aanpas, krijg ik volgende error:

Column count doesn't match value count at row 1

add.php:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title>Hello</title>
<link rel="stylesheet" type="text/css" href="css/main.css"/>
</head>
<body>
	
<div id="topline"></div>
<div id="container">
	<form action="process.php" method="post">
		<!--<label for="id">ID:</label><br /><input type="text" name="id" /><br />-->
		<label for="titel">Titel:</label><br /><input type="text" name="titel" /><br />
		<label for="desc">Inhoud:</label><br /><input type="text" name="desc" /><br />
		<input type="submit" value="submit" />
	</form>
</div>
</body>
<html>

process.php

PHP:
<?php 
//$id=$_POST['id'];
$titel=$_POST['titel']; 
$desc=$_POST['desc']; 

$link = mysql_connect("localhost", "root", "root") or die(mysql_error()); 
mysql_select_db("Data") or die(mysql_error()); 
mysql_query("INSERT INTO tblITEMS VALUES ('$titel', '$desc')") or die(mysql_error()); 
mysql_close($link) or die(mysql_error());
echo "<h1>great succes</h1>";

//header('refresh: 5; url=index.php');
?>

Hoe kan ik er voor zorgen dat ik ID niet moet invullen,
maar dat hij toch elke keer een nieuwe rij aanmaakt?


Bedankt alvast!

@blackrabbit: wat bedoel je met het escapen van de input?

blackrabbit

Legacy Member
brecko zei:
1) Hoe kan ik er voor zorgen dat ik ID niet moet invullen,
maar dat hij toch elke keer een nieuwe rij aanmaakt?


Bedankt alvast!

2) @blackrabbit: wat bedoel je met het escapen van de input?
1) staat hierboven al ergens uitgelegd
2) doe effe moeite en check PHP: Hypertext Preprocessor -> addslashes (en andere)

Over dat "hij zet 6 achter 4 en voor 5": hoe MySQL die data opslaat kan jij helemaal niet zien. Als je resultaten gesorteerd wil terugkrijgen, dan moet je dat specifieren met ORDER BY (MySQL :: Developer Zone)

brecko

Legacy Member
Heb het aangepast naar het volgende:

PHP:
<?php
//create array to temporarily grab variables
$input_arr = array();
//grabs the $_POST variables and adds slashes
foreach ($_POST as $key => $input_arr) {
    $_POST[$key] = addslashes($input_arr);
}

$id=$_POST['id'];
$titel=$_POST['titel']; 
$desc=$_POST['desc']; 

$link = mysql_connect("localhost", "root", "root") or die(mysql_error()); 
mysql_select_db("Data") or die(mysql_error()); 
mysql_query("INSERT INTO tblITEMS(id,titel,desc) VALUES ('$id','$titel', '$desc')") or die(mysql_error()); 
mysql_close($link) or die(mysql_error());
echo "<h1>great succes</h1>";

//header('refresh: 5; url=index.php');
?>

Ik krijg nu volgende error:
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 'desc) VALUES ('0','Hallo Wereld!', 'Ja, \\\'t gaat goed')' at line 1

Ik begrijp niet goed hoe het zit met die ID's. Als ik dat veld weglaat,
krijg ik ook een foutmelding. Maar JoeCatshoe zei hierboven dit:

Zoals je zelf zegt moet $id er staan anders gebeurt er geen auto_increment.

Welja, wat is het dan? :)

En @blackrabbit, ik doe echt wel moeite hoor. Ik vind het alleen niet altijd simpel om opgezochte code op een juiste manier te integreren in mijn code.

Cycloon

Legacy Member
Je kan gewoon
Code:
VALUES ('','Hallo Wereld!', 'Ja, \\\'t gaat goed')
dit zetten, laat gewoon een leeg veld voor uw id en mysql zal die zelf wel invullen.

Of je doet:

Code:
mysql_query("INSERT INTO tblITEMS(titel,desc) VALUES ('$titel', '$desc')") or die(mysql_error());

RpR

Legacy Member
uw id auto increment zetten en manueel niet opvullen dus gewoon uit uw query laten.

blackrabbit

Legacy Member
brecko zei:
Ik begrijp niet goed hoe het zit met die ID's. Als ik dat veld weglaat,
krijg ik ook een foutmelding. Maar JoeCatshoe zei hierboven dit:



Welja, wat is het dan? :)

En @blackrabbit, ik doe echt wel moeite hoor. Ik vind het alleen niet altijd simpel om opgezochte code op een juiste manier te integreren in mijn code.

Wat betreft IDs:
PHP:
mysql_query("INSERT INTO tblITEMS(titel,desc) VALUES ('$titel', '$desc')") or die(mysql_error());
Id dus zowel weglaten bij kolommen als bij values. auto-increment zal die waarde immers volledig zelfstandig invullen.

Het leek er gewoon op dat je weinig moeite deed, als je addslashes opzoekt vind je immers aardig wat info. Ik kan wel begrijpen dat je met weinig (algemene) programmeerkennis problemen hebt met het begrijpen van voorbeelden enzo. heb je een PHP-guide gevolgd?

Code:
\\\'t
wijst er op dat je input 2x wordt geëscaped: magic_quotes staat aan?

dJeez

Legacy Member
DESC is een gereserveerd woord, dat gebruiken als kolomnaam is - zoals je nu merkt - niet aan te raden, aangezien de SQL parser daar niet mee omkan tenzij je die gaat escapen. Het is echter sowieso aan te raden van geen gereserveerde woorden als kolomnamen te gebruiken.

brecko

Legacy Member
Inderdaad dJeez, nu lukt het wel..
Bedankt voor de raad!
Nu nog net de volgorde goed krijgen, maar dat wel lukken..

Volgende stap is afbeeldingen in database krijgen, en ze daarna bij het bijhorende stukje tekst weergeven! Iemand die toevallig een goeie/gemakkelijke tutorial weet staan?

Zal zowiezo wel op Google zoeken hoor..

-brucken-

Legacy Member
Zet gewoon in uw sql tabel een kolom bij waar je de naam van de afbeelding gaat in zetten. Dan zijn ze automatisch gekoppeld.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan