inhoud checkbox in mysql db
Onderste heb ik ook al bij Database en SQL hulp gezet, maar misschien hoort hij meer hier thuis omdat ik bij de andere geen reacties krijg...
Ik loop al enkele dagen te rommelen met een issue en ik kom er niet uit. Stackflow en andere sites geraadpleegd maar niets boodt de oplossing die ik wilde/werkte.
Nu zijn jullie mijn laatste hoop!
Issue:
CMS met een gallery. achter elke foto zijn er 3 checkboxen. 1ste checkbox: toon op homepage. 2de checkbox: toon in gallery en de 3rde is dat je hem kan verwijderen. checkbox 1 en 2 kunnen ook beide geselecteerd zijn.
Ik krijg het niet werkend om de waarde van de check in mijn database te krijgen. Of ik krijg het helemaal niet werkend, of enkel bij het 1ste record, ookal vink ik de 9de record aan.
Mijn code:
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
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
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
ob_start();
require('../../lib/dbconnection.php');
require("../../lib/checklogin.php");
require("includes/upload.inc.php");
$query = 'SELECT * FROM gallery where image_deleted != 1 order by id desc';
$result=$conn->query($query);
$count=$result->num_rows;
<!DOCTYPE html>
<html>
<head>
<title>Classic Nails - CMS</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="description" content="ClassicNails">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="../css/screen.css">
<link rel="stylesheet" href="../css/libs/magnific-popup.css">
<script src="../js/libs/min/jquery-min.js" type="text/javascript"></script>
<script src="../js/min/custom-min.js" type="text/javascript"></script>
<script src="js/jquery.magnific-popup.js"></script>
<script>
$(document).ready(function() {
$('.image-link').magnificPopup({
type:'image',
gallery:{
enabled:true
}
});
});
</script>
</head>
<body>
<?php include('includes/header.inc.php');
[code]<?php include('includes/nav.inc.php');
<div class="wrapper">
<article class="content">
<h1>Foto gallery</h1>
[code]<?php
if (isset($uploadResult)) {
echo "<p><strong>$uploadResult</strong></p>";
}
<form action="" method="post" enctype="multipart/form-data" name="uploadImage" id="uploadImage">
<p>
<label for="image">Upload image:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_FILE_SIZE; " />
<input type="file" name="images" id="imagesd" />
</p>
<p>
<input type="submit" name="upload" id="upload" value="Upload" />
</p>
</form>
<div id="maincontent">
<h2>Foto informatie</h2>
<form name="FotoInformatie" id="fotoInformatie" method="post" action="">
<table>
<tr>
<td align="center"><strong>Foto<strong></td>
<td align="center"><strong>Titel</strong></td>
<td align="center"><strong>Beschrijving</strong></td>
<td align="center"><strong>Homepage</strong></td>
</tr>
[code]<?php
while ($rows=$result->fetch_assoc()) {
<tr>
<td class="hide" align="center">[code]<?php $id[]=$rows['id']; [code]<?php echo $rows['id']; </td>
<td><a href="../img/uploads/<?php echo $rows['filename'];" class="image-link"><img src="../img/thumbs/<?php echo $rows['filename']; "></a></td>
<td align="center"><input name="title[]" type="text" id="title" value="<?php echo $rows['title']; "></td>
<td align="center"><input name="caption[]" type="text" id="caption" value="<?php echo $rows['caption']; "></td>
<td><input type="checkbox" name="checkboxHome[]" id="checkBoxHome" value="<?php echo $rows['home']"/></td>
</tr>
[code]<?php
}
<tr>
<td colspan="4" align="center">
<input type="submit" name="submit" value="Submit">
</tr>
</table>
</form>
</div>
</article> <!-- end of content -->
</div> <!-- end of container -->
[code]<?php include('includes/footer.inc.php');
</body>
</html>
[code]<?php
if(isset($_POST['submit'])) {
$title = $_POST['title'];
$caption = $_POST['caption'];
var_dump($_POST['$checkboxHome']);
if ('$checkboxHome' == "" xor NULL) {
$checkboxHome = '0';
} else {
$checkboxHome = '1';
}
for($i=0;$i<$count;$i++){
$result1=mysqli_query($conn, "UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$checkboxHome[$i]' WHERE id='$id[$i]'");
// header("location:/admin/foto-admin.php");
}
}
?>
Nu is enkel 1 checkbox aanwezig. Het gaat mij om het principe.
ben bekend met de prepare statements die mogelijkerwijs ontbreken. dat is van latere zorg..
Hoop dat iemand mij kan helpen.
alvast bedankt.
ini_set('display_errors', 1);
error_reporting(E_ALL);
ob_start();
require('../../lib/dbconnection.php');
require("../../lib/checklogin.php");
require("includes/upload.inc.php");
$query = 'SELECT * FROM gallery where image_deleted != 1 order by id desc';
$result=$conn->query($query);
$count=$result->num_rows;
<!DOCTYPE html>
<html>
<head>
<title>Classic Nails - CMS</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="description" content="ClassicNails">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="../css/screen.css">
<link rel="stylesheet" href="../css/libs/magnific-popup.css">
<script src="../js/libs/min/jquery-min.js" type="text/javascript"></script>
<script src="../js/min/custom-min.js" type="text/javascript"></script>
<script src="js/jquery.magnific-popup.js"></script>
<script>
$(document).ready(function() {
$('.image-link').magnificPopup({
type:'image',
gallery:{
enabled:true
}
});
});
</script>
</head>
<body>
<?php include('includes/header.inc.php');
[code]<?php include('includes/nav.inc.php');
<div class="wrapper">
<article class="content">
<h1>Foto gallery</h1>
[code]<?php
if (isset($uploadResult)) {
echo "<p><strong>$uploadResult</strong></p>";
}
<form action="" method="post" enctype="multipart/form-data" name="uploadImage" id="uploadImage">
<p>
<label for="image">Upload image:</label>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAX_FILE_SIZE; " />
<input type="file" name="images" id="imagesd" />
</p>
<p>
<input type="submit" name="upload" id="upload" value="Upload" />
</p>
</form>
<div id="maincontent">
<h2>Foto informatie</h2>
<form name="FotoInformatie" id="fotoInformatie" method="post" action="">
<table>
<tr>
<td align="center"><strong>Foto<strong></td>
<td align="center"><strong>Titel</strong></td>
<td align="center"><strong>Beschrijving</strong></td>
<td align="center"><strong>Homepage</strong></td>
</tr>
[code]<?php
while ($rows=$result->fetch_assoc()) {
<tr>
<td class="hide" align="center">[code]<?php $id[]=$rows['id']; [code]<?php echo $rows['id']; </td>
<td><a href="../img/uploads/<?php echo $rows['filename'];" class="image-link"><img src="../img/thumbs/<?php echo $rows['filename']; "></a></td>
<td align="center"><input name="title[]" type="text" id="title" value="<?php echo $rows['title']; "></td>
<td align="center"><input name="caption[]" type="text" id="caption" value="<?php echo $rows['caption']; "></td>
<td><input type="checkbox" name="checkboxHome[]" id="checkBoxHome" value="<?php echo $rows['home']"/></td>
</tr>
[code]<?php
}
<tr>
<td colspan="4" align="center">
<input type="submit" name="submit" value="Submit">
</tr>
</table>
</form>
</div>
</article> <!-- end of content -->
</div> <!-- end of container -->
[code]<?php include('includes/footer.inc.php');
</body>
</html>
[code]<?php
if(isset($_POST['submit'])) {
$title = $_POST['title'];
$caption = $_POST['caption'];
var_dump($_POST['$checkboxHome']);
if ('$checkboxHome' == "" xor NULL) {
$checkboxHome = '0';
} else {
$checkboxHome = '1';
}
for($i=0;$i<$count;$i++){
$result1=mysqli_query($conn, "UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$checkboxHome[$i]' WHERE id='$id[$i]'");
// header("location:/admin/foto-admin.php");
}
}
?>
Nu is enkel 1 checkbox aanwezig. Het gaat mij om het principe.
ben bekend met de prepare statements die mogelijkerwijs ontbreken. dat is van latere zorg..
Hoop dat iemand mij kan helpen.
alvast bedankt.
tags te zetten zodat het beter leesbaar word.
Ik denk dat je anders niet snel hulp kunt verwachten het is niet echt overzichtelijk op deze manier.
Het is handig om je scripts even binnen de Ik denk dat je anders niet snel hulp kunt verwachten het is niet echt overzichtelijk op deze manier.
Gewijzigd op 25/07/2014 15:02:27 door Vincent Post
Wat is de reden waarom je de ene keer een stukje PDO gebruikt en de andere keer weer een stuk MySQLi?
Vincent Post op 25/07/2014 15:00:21:
Er zitten HTML-codes tussen door. heb gewoon de gehele pagina gekopieerd zodat er geen "belangrijke" codes missen.
Toevoeging op 25/07/2014 16:21:12:
C NVT op 25/07/2014 15:35:25:
Wat is de reden waarom je de ene keer een stukje PDO gebruikt en de andere keer weer een stuk MySQLi?
Welk stukje bedoel je dan? ik ben niet bewust geweest dat er PDO tussen zat. Ik wilde alles gewoon via MySQLi bouwen...
Dave Greebe op 25/07/2014 16:20:24:
Er zitten HTML-codes tussen door. heb gewoon de gehele pagina gekopieerd zodat er geen "belangrijke" codes missen.
Toch is het handig om even het geheel tussen de te plaatsen zodat het beter leesbaar word, zodat je ook beter geholpen kan worden!
Vincent Post op 25/07/2014 15:00:21:
Er zitten HTML-codes tussen door. heb gewoon de gehele pagina gekopieerd zodat er geen "belangrijke" codes missen.
Toch is het handig om even het geheel tussen de te plaatsen zodat het beter leesbaar word, zodat je ook beter geholpen kan worden!
Dave Greebe op 25/07/2014 14:54:18:
Of ik krijg het helemaal niet werkend, of enkel bij het 1ste record, ookal vink ik de 9de record aan.
Dat is logisch: je voert een redirect uit in de for-loop die de database bijwerkt. Dat gaat waarschijnlijk hooguit één keer goed, want daarna is de browser al vertrokken, maar crasht de server op een "headers already sent". De andere records worden daarna niet meer bijgewerkt, maar jij ziet de fout niet.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
for($i=0;$i<$count;$i++){
$result1=mysqli_query($conn, "UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$checkboxHome[$i]' WHERE id='$id[$i]'");
// header("location:/admin/foto-admin.php");
}
}
?>
for($i=0;$i<$count;$i++){
$result1=mysqli_query($conn, "UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$checkboxHome[$i]' WHERE id='$id[$i]'");
// header("location:/admin/foto-admin.php");
}
}
?>
Dus de arrays title en caption lopen niet synchroon daarmee
Vincent Post op 25/07/2014 16:45:48:
Akkoord, begreep je niet goed. heb het hersteld...
Toevoeging op 25/07/2014 17:21:01:
Hoe kan het dan wel dat buiten de checkbox om, ik alle andere velden wel kan updaten (meerdere gelijkertijd)? Zover ik weet heb ik enkel de checkbox optie erin gezet.
Wat moet ik dan precies aanpassen wat jij aangeeft? for-loop ziet er hetzelfde uit en de header is uitgecomment
Toevoeging op 25/07/2014 17:25:15:
Okay... helder maar heb je een tip/idee hoe ik dit kan fixen?
Dave Greebe op 25/07/2014 16:20:24:
Er zitten HTML-codes tussen door. heb gewoon de gehele pagina gekopieerd zodat er geen "belangrijke" codes missen.
Toch is het handig om even het geheel tussen de te plaatsen zodat het beter leesbaar word, zodat je ook beter geholpen kan worden!
Vincent Post op 25/07/2014 15:00:21:
Er zitten HTML-codes tussen door. heb gewoon de gehele pagina gekopieerd zodat er geen "belangrijke" codes missen.
Toch is het handig om even het geheel tussen de te plaatsen zodat het beter leesbaar word, zodat je ook beter geholpen kan worden!
Akkoord, begreep je niet goed. heb het hersteld...
Toevoeging op 25/07/2014 17:21:01:
Ward van der Put op 25/07/2014 16:48:24:
Dat is logisch: je voert een redirect uit in de for-loop die de database bijwerkt. Dat gaat waarschijnlijk hooguit één keer goed, want daarna is de browser al vertrokken, maar crasht de server op een "headers already sent". De andere records worden daarna niet meer bijgewerkt, maar jij ziet de fout niet.
Dave Greebe op 25/07/2014 14:54:18:
Of ik krijg het helemaal niet werkend, of enkel bij het 1ste record, ookal vink ik de 9de record aan.
Dat is logisch: je voert een redirect uit in de for-loop die de database bijwerkt. Dat gaat waarschijnlijk hooguit één keer goed, want daarna is de browser al vertrokken, maar crasht de server op een "headers already sent". De andere records worden daarna niet meer bijgewerkt, maar jij ziet de fout niet.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
for($i=0;$i<$count;$i++){
$result1=mysqli_query($conn, "UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$checkboxHome[$i]' WHERE id='$id[$i]'");
// header("location:/admin/foto-admin.php");
}
}
?>
for($i=0;$i<$count;$i++){
$result1=mysqli_query($conn, "UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$checkboxHome[$i]' WHERE id='$id[$i]'");
// header("location:/admin/foto-admin.php");
}
}
?>
Hoe kan het dan wel dat buiten de checkbox om, ik alle andere velden wel kan updaten (meerdere gelijkertijd)? Zover ik weet heb ik enkel de checkbox optie erin gezet.
Wat moet ik dan precies aanpassen wat jij aangeeft? for-loop ziet er hetzelfde uit en de header is uitgecomment
Toevoeging op 25/07/2014 17:25:15:
Ger van Steenderen op 25/07/2014 17:03:55:
En niet te vergeten, alleen de aangevinkte checkboxen worden in de POST meegegeven.
Dus de arrays title en caption lopen niet synchroon daarmee
Dus de arrays title en caption lopen niet synchroon daarmee
Okay... helder maar heb je een tip/idee hoe ik dit kan fixen?
Code (php)
Code (php)
Gewijzigd op 25/07/2014 17:53:23 door Ger van Steenderen
Waarom niet gewoon je PHP code boven en je HTML onder?
Hoe leg ik dat uit?
alles wat je echo't wordt eerst nog in het geheugen geplaatst en nog niet verzonden..
pas aan het einde van je script wordt alles vanuit het geheugen alsnog verzonden.
Het hele punt is dat je hierdoor nog headers kunt verzenden terwijl je al output gebufferd hebt. Maar volgens vele is het een bad practice omdat je hierdoor geheugen verspilt maar ook omdat je (veel belangrijker) hierdoor uitgenodigd wordt je script in onlogische volgorde te schrijven.
Waar ik op doelde is dat jij MIDDEN in je html nog een enorm blok PHP code hebt staan en dat dit bovenin hoort omdat dat veel logischer is
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// hier heel je PHP logica shit ZONDER ook maar enige output
$message = '';
if(validate())
{
header('flauwekul.php');
exit;
}
?>
<!-- HIER PAS JE OUTPUT -->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<!-- IN DE OUTPUT MAG JE WEL KLEINE STUKJES PHP GEBRUIKEN OM DE VARIABELEN TE ECHON -->
<p><?php echo $message; ?></p>
</body>
</html>
// hier heel je PHP logica shit ZONDER ook maar enige output
$message = '';
if(validate())
{
header('flauwekul.php');
exit;
}
?>
<!-- HIER PAS JE OUTPUT -->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<!-- IN DE OUTPUT MAG JE WEL KLEINE STUKJES PHP GEBRUIKEN OM DE VARIABELEN TE ECHON -->
<p><?php echo $message; ?></p>
</body>
</html>
Gewijzigd op 26/07/2014 00:37:06 door Frank Nietbelangrijk
Dave Greebe op 25/07/2014 22:58:38:
ob_start() loste mijn problem met header already sent op...
Gaat het er alleen om dat het werkt?
Frank Nietbelangrijk op 26/07/2014 00:08:53:
Het buffert je output..
Hoe leg ik dat uit?
alles wat je echo't wordt eerst nog in het geheugen geplaatst en nog niet verzonden..
pas aan het einde van je script wordt alles vanuit het geheugen alsnog verzonden.
Het hele punt is dat je hierdoor nog headers kunt verzenden terwijl je al output gebufferd hebt. Maar volgens vele is het een bad practice omdat je hierdoor geheugen verspilt maar ook omdat je (veel belangrijker) hierdoor uitgenodigd wordt je script in onlogische volgorde te schrijven.
Waar ik op doelde is dat jij MIDDEN in je html nog een enorm blok PHP code hebt staan en dat dit bovenin hoort omdat dat veel logischer is
Hoe leg ik dat uit?
alles wat je echo't wordt eerst nog in het geheugen geplaatst en nog niet verzonden..
pas aan het einde van je script wordt alles vanuit het geheugen alsnog verzonden.
Het hele punt is dat je hierdoor nog headers kunt verzenden terwijl je al output gebufferd hebt. Maar volgens vele is het een bad practice omdat je hierdoor geheugen verspilt maar ook omdat je (veel belangrijker) hierdoor uitgenodigd wordt je script in onlogische volgorde te schrijven.
Waar ik op doelde is dat jij MIDDEN in je html nog een enorm blok PHP code hebt staan en dat dit bovenin hoort omdat dat veel logischer is
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// hier heel je PHP logica shit ZONDER ook maar enige output
$message = '';
if(validate())
{
header('flauwekul.php');
exit;
}
?>
<!-- HIER PAS JE OUTPUT -->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<!-- IN DE OUTPUT MAG JE WEL KLEINE STUKJES PHP GEBRUIKEN OM DE VARIABELEN TE ECHON -->
<p><?php echo $message; ?></p>
</body>
</html>
// hier heel je PHP logica shit ZONDER ook maar enige output
$message = '';
if(validate())
{
header('flauwekul.php');
exit;
}
?>
<!-- HIER PAS JE OUTPUT -->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<!-- IN DE OUTPUT MAG JE WEL KLEINE STUKJES PHP GEBRUIKEN OM DE VARIABELEN TE ECHON -->
<p><?php echo $message; ?></p>
</body>
</html>
Thanks voor de heldere uitleg.
Overigens kom ik er helaas nog niet uit met mijn code. ik heb nu
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if(isset($_POST['submit'])) {
foreach ($_POST['title'] as $id => $title) {
$_POST['caption'][$id];
$_POST['checkboxHome'][$id];
print_r ($checkboxHome)[$id];
// $home = (in_array($id, $_POST['checkboxHome'])) ? : false;
// $result1=mysqli_query($conn, "UPDATE gallery SET title='$title', caption='$caption', home='$checkboxHome' WHERE id='$id'");
}
}
?>
if(isset($_POST['submit'])) {
foreach ($_POST['title'] as $id => $title) {
$_POST['caption'][$id];
$_POST['checkboxHome'][$id];
print_r ($checkboxHome)[$id];
// $home = (in_array($id, $_POST['checkboxHome'])) ? : false;
// $result1=mysqli_query($conn, "UPDATE gallery SET title='$title', caption='$caption', home='$checkboxHome' WHERE id='$id'");
}
}
?>
De melding die ik nu krijg bij een submit;
Notice: Undefined variable: checkboxHome in /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php on line 18
Notice: Undefined offset: 75 in /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php on line 17
Notice: Undefined variable: checkboxHome in /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php on line 18
Notice: Undefined offset: 70 in /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php on line 17
Notice: Undefined variable: checkboxHome in /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php on line 18
Notice: Undefined offset: 69 in /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php on line 17
Dit is als ik een checkbox aanvink en submit...
Als ik dat niet doe, dan krijg ik melding;
Notice: Undefined index: checkboxHome in /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php on line 17
Notice: Undefined variable: checkboxHome in /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php on line 18
Je moet daarom controleren of een variabele bestaat en vervolgens of die variabele een bepaalde (geldige) waarde heeft. Aan het eerste schort het nog: je controleert onvoldoende of variabelen die je wilt gebruiken wel bestaan.
Dan moet wel duidelijk worden welke elementen deze array heeft.
En die meldingen zeggen dat die vars niet bestaan.
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
// laten we controleren of de aanvraag verstuurd is in de GET of in de POST methode.
// Als de aanvraag in de POST methode is...
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Handig tijdens het programmeren:
echo '<pre>';
print_r($_POST);
echo '</pre>';
// nu iets proberen te doen met die post vars
if(isset($_POST['title']) && is_array($_POST['title']))
{
foreach ($_POST['title'] as $id => $title)
{
echo $id . ': ' .$title . '<br>';
}
}
}
?>
// laten we controleren of de aanvraag verstuurd is in de GET of in de POST methode.
// Als de aanvraag in de POST methode is...
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Handig tijdens het programmeren:
echo '<pre>';
print_r($_POST);
echo '</pre>';
// nu iets proberen te doen met die post vars
if(isset($_POST['title']) && is_array($_POST['title']))
{
foreach ($_POST['title'] as $id => $title)
{
echo $id . ': ' .$title . '<br>';
}
}
}
?>
Toevoeging op 26/07/2014 14:59:23:
Hier een voorbeeld waarnaar je op zoek bent:
(gewoon opslaan onder een willekeurige naam met de extensie .php en het werkt)
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
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
<?php
// normaal haal je deze array uit je database
$fotos = array(
array(
'id' => 1,
'title' => 'test 1',
'homepage' => false,
),
array(
'id' => 3,
'title' => 'test 2',
'homepage' => false,
),
array(
'id' => 8,
'title' => 'test 3',
'homepage' => true,
),
);
// laten we controleren of de aanvraag verstuurd is in de GET of in de POST methode.
// Als de aanvraag in de POST methode is...
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Handig tijdens het programmeren:
echo '<pre>';
print_r($_POST);
echo '</pre>';
/*
eerst alle ['homepage'] elementen op false!
Dit is ook een loop door alle elementen van $fotos maar met een for() ipv een foreach().
Dit doen we omdat we de array $fotos moeten veranderen (en niet alleen uitlezen).
*/
for($i = 0 ; $i < count($fotos) ; $i++)
$fotos[$i]['homepage'] = false;
/*
checkboxen worden alleen maar gepost als ze aanstaan.
Als ze allemaal uitstaan dan is er ook geen variabele $_POST['homepage'] en we moeten
dit dus eerst controleren.
*/
if(isset($_POST['homepage']))
{
// loop door alle elementen van $fotos
for($i = 0 ; $i < count($fotos) ; $i++)
{
// indien het id van de foto in de array $_POST['homepage'] voorkomt
if(in_array($fotos[$i]['id'], $_POST['homepage']))
$fotos[$i]['homepage'] = true;
}
}
/*
text-inputs worden altijd gepost.
We hoeven dus niet nog eens te controleren of $_POST['title'] wel bestaat.
*/
$i = 0;
foreach($_POST['title'] as $title)
{
$fotos[$i++]['title'] = $title; // de ++ achter $i++ zorgt er voor dat $i met 1 verhoogd wordt.
}
}
?>
<form action="" method="post">
<?php
foreach($fotos as $foto)
{
echo '<input type="text" name="title[]" value="'.$foto['title'].'" />';
echo '<input type="checkbox" name="homepage[]" value="'.$foto['id'].'"';
echo $foto['homepage']?' checked="checked"':'';
echo ' /> plaats op de homepage<br>';
}
?>
<input type="submit" value="Verzenden" />
</form>
// normaal haal je deze array uit je database
$fotos = array(
array(
'id' => 1,
'title' => 'test 1',
'homepage' => false,
),
array(
'id' => 3,
'title' => 'test 2',
'homepage' => false,
),
array(
'id' => 8,
'title' => 'test 3',
'homepage' => true,
),
);
// laten we controleren of de aanvraag verstuurd is in de GET of in de POST methode.
// Als de aanvraag in de POST methode is...
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Handig tijdens het programmeren:
echo '<pre>';
print_r($_POST);
echo '</pre>';
/*
eerst alle ['homepage'] elementen op false!
Dit is ook een loop door alle elementen van $fotos maar met een for() ipv een foreach().
Dit doen we omdat we de array $fotos moeten veranderen (en niet alleen uitlezen).
*/
for($i = 0 ; $i < count($fotos) ; $i++)
$fotos[$i]['homepage'] = false;
/*
checkboxen worden alleen maar gepost als ze aanstaan.
Als ze allemaal uitstaan dan is er ook geen variabele $_POST['homepage'] en we moeten
dit dus eerst controleren.
*/
if(isset($_POST['homepage']))
{
// loop door alle elementen van $fotos
for($i = 0 ; $i < count($fotos) ; $i++)
{
// indien het id van de foto in de array $_POST['homepage'] voorkomt
if(in_array($fotos[$i]['id'], $_POST['homepage']))
$fotos[$i]['homepage'] = true;
}
}
/*
text-inputs worden altijd gepost.
We hoeven dus niet nog eens te controleren of $_POST['title'] wel bestaat.
*/
$i = 0;
foreach($_POST['title'] as $title)
{
$fotos[$i++]['title'] = $title; // de ++ achter $i++ zorgt er voor dat $i met 1 verhoogd wordt.
}
}
?>
<form action="" method="post">
<?php
foreach($fotos as $foto)
{
echo '<input type="text" name="title[]" value="'.$foto['title'].'" />';
echo '<input type="checkbox" name="homepage[]" value="'.$foto['id'].'"';
echo $foto['homepage']?' checked="checked"':'';
echo ' /> plaats op de homepage<br>';
}
?>
<input type="submit" value="Verzenden" />
</form>
Toevoeging op 26/07/2014 15:11:15:
Merk op dat de dat de checkboxen een value meekrijgen!
Gewijzigd op 26/07/2014 15:08:18 door Frank Nietbelangrijk
Mijn stukje aangepast code is alsvolgt;
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$query = 'SELECT * FROM gallery where image_deleted = "true" order by id desc';
$result=$conn->query($query);
$rows=$result->num_rows;
$fotos=$result->fetch_array(1);
echo '<pre>';
echo 'Inhoud van de $fotos-array';
print_r($fotos);
echo '</pre>';
OUTPUT:
Inhoud van de $fotos-arrayArray
(
[id] => 73
[filename] => image-123.jpg
[title] => image-123
[caption] => image-123
[home] => false
[fotoboek] => false
[image_deleted] => true
)
?>
$query = 'SELECT * FROM gallery where image_deleted = "true" order by id desc';
$result=$conn->query($query);
$rows=$result->num_rows;
$fotos=$result->fetch_array(1);
echo '<pre>';
echo 'Inhoud van de $fotos-array';
print_r($fotos);
echo '</pre>';
OUTPUT:
Inhoud van de $fotos-arrayArray
(
[id] => 73
[filename] => image-123.jpg
[title] => image-123
[caption] => image-123
[home] => false
[fotoboek] => false
[image_deleted] => true
)
?>
Dit lijkt mij opzich te kloppen, maar als ik verder ga....
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
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
<?php
foreach($fotos as $foto)
print_r($foto['title']);
{
echo '<input type="text" name="title[]" value="'.$foto['title'].'" />';
echo '<input type="checkbox" name="home[]" value="'.$foto['id'].'"';
echo $foto['home']?' checked="checked"':'';
echo ' /> plaats op de homepage<br>';
}
OUTPUT:
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
7
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
i
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
i
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
i
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
f
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
f
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
t
?>
foreach($fotos as $foto)
print_r($foto['title']);
{
echo '<input type="text" name="title[]" value="'.$foto['title'].'" />';
echo '<input type="checkbox" name="home[]" value="'.$foto['id'].'"';
echo $foto['home']?' checked="checked"':'';
echo ' /> plaats op de homepage<br>';
}
OUTPUT:
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
7
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
i
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
i
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
i
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
f
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
f
Warning: Illegal string offset 'title' in /Users/davegreebe/Development/ClassicNails-Studio/public_html/phphulp.php on line 81
t
?>
Het lijkt erop als of hij alleen het 1ste charakter van elke kolom pakt en niet alles.
Ben aan het puzzelen waarom hij dat doet maar ik kom er niet uit.
Jij of iemand anders een idee waarom??
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Array
(
[id] => 73
[filename] => image-123.jpg
[title] => image-123
[caption] => image-123
[home] => false
[fotoboek] => false
[image_deleted] => true
)
(
[id] => 73
[filename] => image-123.jpg
[title] => image-123
[caption] => image-123
[home] => false
[fotoboek] => false
[image_deleted] => true
)
Als je daar nu een foreach op los laat dan krijg je elk element apart. Dus in de eerste loop krijg je alleen de waarde 73 (van het id), in de tweede loop krijg je alleen image-123.jpg (van filename) etc. Dat zijn allemaal geen arrays meer en dus kan je ook niet meer $foto['title'] doen, dat werkt niet.
Wat je moet doen is de fetch binnen een while loop zetten en bij elk record gewoon direct het juiste element aanspreken, geen foreach loop daar gebruiken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$query = 'SELECT * FROM gallery where image_deleted = "true" order by id desc';
$result=$conn->query($query);
$rows=$result->num_rows;
while( $fotos = $result->fetch_array(1) ){
echo '<input type="text" name="title[]" value="'.$fotos['title'].'" />';
echo '<input type="checkbox" name="home[]" value="'.$fotos['id'].'"';
echo $fotos['home']?' checked="checked"':'';
echo ' /> plaats op de homepage<br>';
}
?>
$query = 'SELECT * FROM gallery where image_deleted = "true" order by id desc';
$result=$conn->query($query);
$rows=$result->num_rows;
while( $fotos = $result->fetch_array(1) ){
echo '<input type="text" name="title[]" value="'.$fotos['title'].'" />';
echo '<input type="checkbox" name="home[]" value="'.$fotos['id'].'"';
echo $fotos['home']?' checked="checked"':'';
echo ' /> plaats op de homepage<br>';
}
?>
Toevoeging op 29/07/2014 10:23:52:
hmmm ja je zou zo moeten fetchen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$query = 'SELECT * FROM gallery where image_deleted = "true" order by id desc';
$result=$conn->query($query);
while($row=$result->fetch_array(??)) // waar staat die 1 voor?
$fotos[]=$row; // voeg de row toe aan de array fotos
?>
$query = 'SELECT * FROM gallery where image_deleted = "true" order by id desc';
$result=$conn->query($query);
while($row=$result->fetch_array(??)) // waar staat die 1 voor?
$fotos[]=$row; // voeg de row toe aan de array fotos
?>
Ik hoop dat ik het goed zeg.. de bedoeling is dat $fotos ALLE records in zich krijgt.
Gewijzigd op 29/07/2014 10:24:28 door Frank Nietbelangrijk