Formulier input's tellen en weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Ger van Steenderen
Tutorial mod

Ger van Steenderen

06/12/2013 17:12:13
Quote Anchor link
En dan niet elke keer een insert uitvoeren maar met een bulk insert werken.
In de vorm van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
iNSERT INTO items (name, titel  VALUES ('naam1','titel'),('naam2','titel2')
Gewijzigd op 06/12/2013 17:15:09 door Ger van Steenderen
 
PHP hulp

PHP hulp

01/11/2024 01:17:11
 

08/12/2013 22:10:05
Quote Anchor link
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?
Gewijzigd op 08/12/2013 22:10:15 door
 

11/12/2013 07:07:29
Quote Anchor link
Bump.
 

12/12/2013 07:17:53
Quote Anchor link
En nogmaals bump ik dit topic. Zie vraag:

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?
 
Kris Peeters

Kris Peeters

12/12/2013 09:49:54
Quote Anchor link
Die gegevens zijn leeg. Er valt niet veel in de DB te zetten.

Even die print_r terug vertalen naar de array:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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'
)
?>


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
 

13/12/2013 16:18:51
Quote Anchor link
Ik gaf de array's als voorbeeld. Het ging mij erom, hoe ik dat in een DB zet (weet ik nogsteeds niet). En betreft het formulier, deze bedoel je?

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
...
foreach($_POST['item'] as $key=>$item) {
  ...
}

?>


 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

13/12/2013 18:23:06
Quote Anchor link
Allereerst moet je ervoor zorgen dat alle inputs die bij elkaar horen dezelfde keys krijgen, dus bv titel[001], links[001], rechts[001].
Dan kan je in PHP dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>

$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
 

16/12/2013 20:57:41
Quote Anchor link
Hoi Ger,

Dit heb ik nu als PHP:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());
}

?>


Echter krijg ik geen foutmelding, maar worden de records ook niet toegevoegd. Waardoor komt dit?
 
- SanThe -

- SanThe -

16/12/2013 21:22:04
Quote Anchor link
Zet de errors eens aan.

Bovenin je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
?>


Er mist wat aan deze query:
mysql_query("INSERT INTO woorden_lijsten(titel,inhoud_1,inhoud_2) VALUES ";
 

16/12/2013 21:25:36
Quote Anchor link
Hoi SanThe,

De error's staan aan, maar maken geen verschil.
Als je goed verder kijkt zie je dat de query verder gaat na $values[] = .

Frank
 
- SanThe -

- SanThe -

16/12/2013 21:45:20
Quote Anchor link
De regel eindigt met een puntkomma. Dus is ie afgesloten en er mist nogal wat. Er kan niet middenin een foreach() zitten.
 

18/12/2013 08:27:08
Quote Anchor link
Ik kom er niet uit... Hoe zou het script volgens jou moeten zijn?
 
Michael -

Michael -

18/12/2013 08:49:15
Quote Anchor link
'Ik kom er niet uit' hebben we niks aan. Toon relevante code en foutmeldingen.
Volgens mij zou het zoiets moeten zijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());
    }
}

?>


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
Tutorial mod

Ger van Steenderen

18/12/2013 12:01:14
Quote Anchor link
Ger van Steenderen op 13/12/2013 18:23:06:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>

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.
 

19/12/2013 09:04:37
Quote Anchor link
Ik krijg deze error:

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>&nbsp;'+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?
 
Michael -

Michael -

19/12/2013 09:35:16
Quote Anchor link
Er gaat een hele hoop 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.
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.