Formulier input's tellen en weergeven
In de vorm van:
Gewijzigd op 06/12/2013 17:15:09 door Ger van Steenderen
Array ( [titel] => [t1] => [t2] => [links] => Array ( [001] => [002] => [003] => [004] => [005] => [006] => [007] => [008] => [009] => [010] => ) [rechts] => Array ( [001] => [002] => [003] => [004] => [005] => [006] => [007] => [008] => [009] => [010] => ) [sturen] => Versturen )
Hoe zet ik de gegevens netjes in een database?
Bump.
als ik print_r($_POST); doe krijg ik dit:
Array ( [titel] => [t1] => [t2] => [links] => Array ( [001] => [002] => [003] => [004] => [005] => [006] => [007] => [008] => [009] => [010] => ) [rechts] => Array ( [001] => [002] => [003] => [004] => [005] => [006] => [007] => [008] => [009] => [010] => ) [sturen] => Versturen )
Hoe zet ik de gegevens netjes in een database?
Even die print_r terug vertalen naar de array:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
$a = Array (
'titel' => NULL,
't1' => NULL,
't2' => NULL,
'links' => Array (
'001' => NULL,
'002' => NULL,
'003' => NULL,
'004' => NULL,
'005' => NULL,
'006' => NULL,
'007' => NULL,
'008' => NULL,
'009' => NULL,
'010' => NULL,
),
'rechts' => Array (
'001' => NULL,
'002' => NULL,
'003' => NULL,
'004' => NULL,
'005' => NULL,
'006' => NULL,
'007' => NULL,
'008' => NULL,
'009' => NULL,
'010' => NULL
),
'sturen' => 'Versturen'
)
?>
$a = Array (
'titel' => NULL,
't1' => NULL,
't2' => NULL,
'links' => Array (
'001' => NULL,
'002' => NULL,
'003' => NULL,
'004' => NULL,
'005' => NULL,
'006' => NULL,
'007' => NULL,
'008' => NULL,
'009' => NULL,
'010' => NULL,
),
'rechts' => Array (
'001' => NULL,
'002' => NULL,
'003' => NULL,
'004' => NULL,
'005' => NULL,
'006' => NULL,
'007' => NULL,
'008' => NULL,
'009' => NULL,
'010' => NULL
),
'sturen' => 'Versturen'
)
?>
Daar zit (bijna) niet in
------
Okay, de laatste keer toen ik hier iets zei, had ik opmerkingen over het formulier.
Ik heb sinds dien nog geen enkel verbeterd formulier gezien.
Ik ben benieuwd
Gewijzigd op 12/12/2013 09:54:41 door Kris Peeters
Kris Peeters op 06/12/2013 16:29:09:
Alle gegevens in een database tabel steken, na de submit van de gebruiker. Dat bedoel je?
Ja, wat je dan moet doen: geen de input's een name, met de karakters [] aan het einde.
dus bv.
<input name="item[]">
Wat dan gebeurt bij het verwerken:
$_POST['item'] zal een array zijn.
$_POST['item'][0] is de eerste, $_POST['item'][1] de tweede, ...
Je kan die dus in een foreach steken
Ja, wat je dan moet doen: geen de input's een name, met de karakters [] aan het einde.
dus bv.
<input name="item[]">
Wat dan gebeurt bij het verwerken:
$_POST['item'] zal een array zijn.
$_POST['item'][0] is de eerste, $_POST['item'][1] de tweede, ...
Je kan die dus in een foreach steken
Dan kan je in PHP dit doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$values = array();
$sql = "INSERT INTO items (titel, links, rechts) VALUES ";
foreach ($_POST['titel'] as $key => $value) {
if (trim($value) != '') {
$values[] = "('" . $db->escape($value) . "','" .
$db->escape($_POST['links'][$key]) . "','" . $db->escape($_POST['rechts'][$key]) ."')";
}
}
$sql .= implode(',',$values);
?>
$values = array();
$sql = "INSERT INTO items (titel, links, rechts) VALUES ";
foreach ($_POST['titel'] as $key => $value) {
if (trim($value) != '') {
$values[] = "('" . $db->escape($value) . "','" .
$db->escape($_POST['links'][$key]) . "','" . $db->escape($_POST['rechts'][$key]) ."')";
}
}
$sql .= implode(',',$values);
?>
$db->escape() moet je wel even vervangen door de juiste functie van de eztensie die jij gebruikt.
Gewijzigd op 13/12/2013 18:23:48 door Ger van Steenderen
Dit heb ik nu als PHP:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
include 'bgup.php';
error_reporting(E_ALL);
if(isset($_POST['add'])){
$id = rand(0,50000);
$titel = mysql_real_escape_string($_POST['titel']);
$taal_1 = mysql_real_escape_string($_POST['t1']);
$taal_2 = mysql_real_escape_string($_POST['t2']);
$leerj = mysql_real_escape_string($_POST['jaar']);
$vak = mysql_real_escape_string($_POST['vak']);
$values = array();
echo $values;
mysql_query("INSERT INTO woorden_lijsten(titel,inhoud_1,inhoud_2) VALUES ";
foreach ($_POST['titel'] as $key => $value) {
if (trim($value) != '') {
$values[] = "('" . mysql_real_escape_string($value) . "','" .
mysql_real_escape_string($_POST['links'][$key]) . "','" . mysql_real_escape_string($_POST['rechts'][$key]) ."')");
}
}
print(mysql_error());
}
?>
include 'bgup.php';
error_reporting(E_ALL);
if(isset($_POST['add'])){
$id = rand(0,50000);
$titel = mysql_real_escape_string($_POST['titel']);
$taal_1 = mysql_real_escape_string($_POST['t1']);
$taal_2 = mysql_real_escape_string($_POST['t2']);
$leerj = mysql_real_escape_string($_POST['jaar']);
$vak = mysql_real_escape_string($_POST['vak']);
$values = array();
echo $values;
mysql_query("INSERT INTO woorden_lijsten(titel,inhoud_1,inhoud_2) VALUES ";
foreach ($_POST['titel'] as $key => $value) {
if (trim($value) != '') {
$values[] = "('" . mysql_real_escape_string($value) . "','" .
mysql_real_escape_string($_POST['links'][$key]) . "','" . mysql_real_escape_string($_POST['rechts'][$key]) ."')");
}
}
print(mysql_error());
}
?>
Echter krijg ik geen foutmelding, maar worden de records ook niet toegevoegd. Waardoor komt dit?
Bovenin je script:
Er mist wat aan deze query:
mysql_query("INSERT INTO woorden_lijsten(titel,inhoud_1,inhoud_2) VALUES ";
De error's staan aan, maar maken geen verschil.
Als je goed verder kijkt zie je dat de query verder gaat na $values[] = .
Frank
De regel eindigt met een puntkomma. Dus is ie afgesloten en er mist nogal wat. Er kan niet middenin een foreach() zitten.
Ik kom er niet uit... Hoe zou het script volgens jou moeten zijn?
Volgens mij zou het zoiets moeten zijn
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
include 'bgup.php';
error_reporting(E_ALL);
if(isset($_POST['add'])){
$sql = "INSERT INTO woorden_lijsten(titel,inhoud_1,inhoud_2) VALUES ";
foreach($_POST['titel'] as $key => $value) {
if(trim($value) != '') {
$sql .= "('" . mysql_real_escape_string($value) . "',
'" . mysql_real_escape_string($_POST['links'][$key]) . "',
'" . mysql_real_escape_string($_POST['rechts'][$key]) . "')";
}
}
$res = mysql_query($sql);
if($res){
echo 'Insert done';
} else {
print(mysql_error());
}
}
?>
include 'bgup.php';
error_reporting(E_ALL);
if(isset($_POST['add'])){
$sql = "INSERT INTO woorden_lijsten(titel,inhoud_1,inhoud_2) VALUES ";
foreach($_POST['titel'] as $key => $value) {
if(trim($value) != '') {
$sql .= "('" . mysql_real_escape_string($value) . "',
'" . mysql_real_escape_string($_POST['links'][$key]) . "',
'" . mysql_real_escape_string($_POST['rechts'][$key]) . "')";
}
}
$res = mysql_query($sql);
if($res){
echo 'Insert done';
} else {
print(mysql_error());
}
}
?>
Daarbij let op dat MySQL 'depraceted' is wat inhoud dat deze functie in de toekomst zal verdwijnen en niet meer wordt aangeraden om te gebruiken.
Met isset($_POST['add']) controleer je of een formulier is gepost? Gebruik hier ($_SERVER['REQUEST_METHOD'] == 'POST') voor
Edit:
typo
Gewijzigd op 18/12/2013 08:55:32 door Michael -
Ger van Steenderen op 13/12/2013 18:23:06:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$values = array();
$sql = "INSERT INTO items (titel, links, rechts) VALUES ";
foreach ($_POST['titel'] as $key => $value) {
if (trim($value) != '') {
$values[] = "('" . $db->escape($value) . "','" .
$db->escape($_POST['links'][$key]) . "','" . $db->escape($_POST['rechts'][$key]) ."')";
}
}
$sql .= implode(',',$values);
?>
$values = array();
$sql = "INSERT INTO items (titel, links, rechts) VALUES ";
foreach ($_POST['titel'] as $key => $value) {
if (trim($value) != '') {
$values[] = "('" . $db->escape($value) . "','" .
$db->escape($_POST['links'][$key]) . "','" . $db->escape($_POST['rechts'][$key]) ."')";
}
}
$sql .= implode(',',$values);
?>
Met deze code wordt een query opgebouwd waarmee je in één keer meerdere rijen in een tabel kan invoegen. Een voorbeeld om op weg te helpen, en die query moet natuurlijk nog wel uitgevoerd worden.
Warning: Invalid argument supplied for foreach() in /home/kennemer/public_html/login_succes_nieuw/lijsten_aanmaken.php on line 7
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 '' at line 1
Bij dit script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
include 'bgup.php';
if(isset($_POST['sturen'])){
$values = array();
$sql = "INSERT INTO woorden_lijsten(titel,inhoud_1,inhoud_2) VALUES ";
foreach($_POST['titel'] as $key => $value) {
if(trim($value) != '') {
$sql .= "('" . mysql_real_escape_string($value) . "',
'" . mysql_real_escape_string($_POST['links'][$key]) . "',
'" . mysql_real_escape_string($_POST['rechts'][$key]) . "')";
}
}
$res = mysql_query($sql);
if($res){
echo 'Insert done';
} else {
print(mysql_error());
}
}
?>
<html>
<head>
<style>
.stuur {
width:150px;
height:35px;
margin:0px 20px 0px 0px;
-moz-border-radius: 4px 4px 4px 4px;
-webkit-border-radius: 4px 4px 4px 4px;
border-radius: 4px 4px 4px 4px;
background-color:#000000;
color:#FFFFFF;
}
</style>
<script language="javascript">
function addInput(x)
{
if(fields < fieldmax)
{
fields += 1;
if(fields < 10) nummer = '00'+fields;
else if(fields < 100) nummer = '0'+fields;
else nummer = fields;
document.getElementById('row').innerHTML += '<tr><td><font color=white>'+nummer+':</font></td><td><input type="text" name="links['+nummer+']" value="" /></td><td><input type="text" name="rechts['+nummer+']" value="" /></td></tr><br>';
}
else
{
document.form.add.disabled=true;
document.getElementById('max').innerHTML = 'Het maximum van '+fieldmax+' is bereikt.';
}
if(x > 1) addInput(x-1);
}
fields = 0;
fieldmax = 1000;
addInput(10);
</script>
<title></title>
</head>
<body>
<form name="form" method="post" action="">
<font color='white'>Titel:</font> <br><input type='text' name='titel' value='' size="75"/><br>
<table><tr><td><font color='white'>Taal 1:</font></td><td><font color='white'>Taal 2:</font></td></tr>
<tr><td><input type='text' name='t1' value='' /></td><td><input type='text' name='t2' value='' /></td></tr>
<tr><td><font color='white'>Vak:</font> </td><td><font color='white'>Leerjaar:</font> </td></tr>
<tr><td><select name="vak">
<option DISABLED SELECTED>Kies een vak</option>
<option>Nederlands</option>
<option>Engels</option>
<option>Frans</option>
<option>Duits</option>
<option>Geschiedenis</option>
<option>Aardrijkskunde</option>
<option>Wiskunde</option>
<option>Techniek</option>
<option>Biologie</option>
<option>Maatschappelijke Vorming</option>
<option>Natuurkunde</option>
<option>Muziek</option>
<option>Economie</option>
<option>Scheikunde</option>
</select></td><td><select name="jaar">
<option DISABLED SELECTED>Kies een leerjaar</option>
<option>Brugklas</option>
<option>Havo 2</option>
<option>VWO 2</option>
<option>Havo 3</option>
<option>VWO 3</option>
<option>Havo 4</option>
<option>VWO 4</option>
<option>Havo 5</option>
<option>VWO 5</option>
<option>VWO 6</option>
</select></td></tr>
</table>
<form method="post" name="form">
<table>
<div id="row0">
</div>
</table>
<div id="max">
</div>
<button type="button" name="add" onclick="addInput(5)" class="stuur">Meer velden</button>
<input type="submit" class="stuur" name='sturen' value='Versturen'><br />
</form>
<script language="javascript">
function addInput(x)
{
if(fields < fieldmax)
{
getid = 'row'+fields;
fields += 1;
putid = 'row'+fields;
if(fields < 10) nummer = '00'+fields;
else if(fields < 100) nummer = '0'+fields;
else nummer = fields;
document.getElementById(getid).innerHTML = '<tr><td><font color=white> '+nummer+':</font></td><td><input type="text" name="links['+nummer+']" value="" /></td><td><input type="text" name="rechts['+nummer+']" value="" /></td></tr></div><div id="'+putid+'">';
if(fields == fieldmax)
{
document.form.add.disabled=true;
document.getElementById('max').innerHTML = 'Het maximum van '+fieldmax+' is bereikt.';
}
}
if(x > 1) addInput(x-1);
}
fields = 0;
fieldmax = 1000;
addInput(10);
</script>
</html>
<?php
include 'bgdown.php';
?>
include 'bgup.php';
if(isset($_POST['sturen'])){
$values = array();
$sql = "INSERT INTO woorden_lijsten(titel,inhoud_1,inhoud_2) VALUES ";
foreach($_POST['titel'] as $key => $value) {
if(trim($value) != '') {
$sql .= "('" . mysql_real_escape_string($value) . "',
'" . mysql_real_escape_string($_POST['links'][$key]) . "',
'" . mysql_real_escape_string($_POST['rechts'][$key]) . "')";
}
}
$res = mysql_query($sql);
if($res){
echo 'Insert done';
} else {
print(mysql_error());
}
}
?>
<html>
<head>
<style>
.stuur {
width:150px;
height:35px;
margin:0px 20px 0px 0px;
-moz-border-radius: 4px 4px 4px 4px;
-webkit-border-radius: 4px 4px 4px 4px;
border-radius: 4px 4px 4px 4px;
background-color:#000000;
color:#FFFFFF;
}
</style>
<script language="javascript">
function addInput(x)
{
if(fields < fieldmax)
{
fields += 1;
if(fields < 10) nummer = '00'+fields;
else if(fields < 100) nummer = '0'+fields;
else nummer = fields;
document.getElementById('row').innerHTML += '<tr><td><font color=white>'+nummer+':</font></td><td><input type="text" name="links['+nummer+']" value="" /></td><td><input type="text" name="rechts['+nummer+']" value="" /></td></tr><br>';
}
else
{
document.form.add.disabled=true;
document.getElementById('max').innerHTML = 'Het maximum van '+fieldmax+' is bereikt.';
}
if(x > 1) addInput(x-1);
}
fields = 0;
fieldmax = 1000;
addInput(10);
</script>
<title></title>
</head>
<body>
<form name="form" method="post" action="">
<font color='white'>Titel:</font> <br><input type='text' name='titel' value='' size="75"/><br>
<table><tr><td><font color='white'>Taal 1:</font></td><td><font color='white'>Taal 2:</font></td></tr>
<tr><td><input type='text' name='t1' value='' /></td><td><input type='text' name='t2' value='' /></td></tr>
<tr><td><font color='white'>Vak:</font> </td><td><font color='white'>Leerjaar:</font> </td></tr>
<tr><td><select name="vak">
<option DISABLED SELECTED>Kies een vak</option>
<option>Nederlands</option>
<option>Engels</option>
<option>Frans</option>
<option>Duits</option>
<option>Geschiedenis</option>
<option>Aardrijkskunde</option>
<option>Wiskunde</option>
<option>Techniek</option>
<option>Biologie</option>
<option>Maatschappelijke Vorming</option>
<option>Natuurkunde</option>
<option>Muziek</option>
<option>Economie</option>
<option>Scheikunde</option>
</select></td><td><select name="jaar">
<option DISABLED SELECTED>Kies een leerjaar</option>
<option>Brugklas</option>
<option>Havo 2</option>
<option>VWO 2</option>
<option>Havo 3</option>
<option>VWO 3</option>
<option>Havo 4</option>
<option>VWO 4</option>
<option>Havo 5</option>
<option>VWO 5</option>
<option>VWO 6</option>
</select></td></tr>
</table>
<form method="post" name="form">
<table>
<div id="row0">
</div>
</table>
<div id="max">
</div>
<button type="button" name="add" onclick="addInput(5)" class="stuur">Meer velden</button>
<input type="submit" class="stuur" name='sturen' value='Versturen'><br />
</form>
<script language="javascript">
function addInput(x)
{
if(fields < fieldmax)
{
getid = 'row'+fields;
fields += 1;
putid = 'row'+fields;
if(fields < 10) nummer = '00'+fields;
else if(fields < 100) nummer = '0'+fields;
else nummer = fields;
document.getElementById(getid).innerHTML = '<tr><td><font color=white> '+nummer+':</font></td><td><input type="text" name="links['+nummer+']" value="" /></td><td><input type="text" name="rechts['+nummer+']" value="" /></td></tr></div><div id="'+putid+'">';
if(fields == fieldmax)
{
document.form.add.disabled=true;
document.getElementById('max').innerHTML = 'Het maximum van '+fieldmax+' is bereikt.';
}
}
if(x > 1) addInput(x-1);
}
fields = 0;
fieldmax = 1000;
addInput(10);
</script>
</html>
<?php
include 'bgdown.php';
?>
Wat gaat er mis?
Die foutmelding krijg je omdat $_POST['titel'] geen array is. Foreach gebruik je voor arrays.
Wat doet values() ?
if(isset($_POST['sturen'])){ is de foute manier om te kijken of iets gepost is.
Gebruik hier, zoals ik al eerder zei, if($_SERVER['REQUEST_METHOD'] == 'POST'){ voor.