Foreach
Bij het uitvoeren van onderstaande code komen bij de echo van $frontpage en $ID 2x een 'f' als waarde terug. Geen idee waarom. Kan iemand mij helpen? Alvast bedankt!
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
if (isset($_POST['frontpage'])){
print_r($_POST);
$queryError = false;
foreach($_POST AS $P) {
$frontpage=$P['frontpage'];
$ID=$P['ID'];
echo $frontpage;
echo $ID;
$queryfront = mysql_query("UPDATE `content` SET frontpage = '$frontpage' WHERE `ID`=". (int) $ID, $connection);
if(!$queryfront) {
$queryError = true;
echo 'error executing frontpage query' . mysql_errno() . ' : ' . mysql_error();
}
}
if (!$queryError) {
}
}
?>
if (isset($_POST['frontpage'])){
print_r($_POST);
$queryError = false;
foreach($_POST AS $P) {
$frontpage=$P['frontpage'];
$ID=$P['ID'];
echo $frontpage;
echo $ID;
$queryfront = mysql_query("UPDATE `content` SET frontpage = '$frontpage' WHERE `ID`=". (int) $ID, $connection);
if(!$queryfront) {
$queryError = true;
echo 'error executing frontpage query' . mysql_errno() . ' : ' . mysql_error();
}
}
if (!$queryError) {
}
}
?>
Gewijzigd op 03/05/2014 00:10:41 door Dennis B
Als je die foreach-loop eruit haalt, zal het wel werken.
(P.S. Denk ook aan het beveiligen van je script en controleren of er iets is gepost doe je dmv de request method.)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
print_r($_POST);
//WERKING FOREACH:
foreach($_POST AS $elem)
echo $elem.'<br>';
//WERKING FOREACH MET DE INDEX VAN DE ARRAY:
foreach($_POST AS $key => $elem)
echo $key.': '.$elem.'<br>';
$result = mysql_query("UPDATE content SET frontpage = '" . $POST['frontpage'] . "' WHERE ID=". (int) $POST['ID'], $connection);
if(!$result) {
echo 'error executing frontpage query' . mysql_errno() . ' : ' . mysql_error();
}
}
?>
if($_SERVER['REQUEST_METHOD'] == 'POST') {
print_r($_POST);
//WERKING FOREACH:
foreach($_POST AS $elem)
echo $elem.'<br>';
//WERKING FOREACH MET DE INDEX VAN DE ARRAY:
foreach($_POST AS $key => $elem)
echo $key.': '.$elem.'<br>';
$result = mysql_query("UPDATE content SET frontpage = '" . $POST['frontpage'] . "' WHERE ID=". (int) $POST['ID'], $connection);
if(!$result) {
echo 'error executing frontpage query' . mysql_errno() . ' : ' . mysql_error();
}
}
?>
kijk nog eens goed hoe een foreach werkt
laat de backticks in je queries maar achterwege
testen of de request method POST is doe je zoals boven weergegeven.
mysql_query() geeft een resultaat terug en geen query
schrijf php variabelen, mysql tabelnamen en kolomnamen liever met uitsluitend kleine letters
(het laatste is geen must maar ik vind het makkelijker omdat je dan nooit hoeft na te denken
Was het nou id, Id of ID?)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if($result) {
while ($row = mysql_fetch_assoc($result)) {
echo '<tr><td><a href="managearticle.php?edit=' . $row['ID'] . '">' . $row['title'] . '</a></td>';
echo '<td><input type="text" name="frontpage[]" value="' . $row['frontpage'] . '" /></td></tr>';
}
}
?>
if($result) {
while ($row = mysql_fetch_assoc($result)) {
echo '<tr><td><a href="managearticle.php?edit=' . $row['ID'] . '">' . $row['title'] . '</a></td>';
echo '<td><input type="text" name="frontpage[]" value="' . $row['frontpage'] . '" /></td></tr>';
}
}
?>
Nogmaal bedankt!
Gewijzigd op 03/05/2014 13:53:37 door Dennis B
Undefined index: ID
Er is een niet gedefinieerde index met de naam "ID". Kijken we in jouw code, dan zien we daar ergens $row['ID']. Blijkbaar klopt de naam ID niet. In de databse wordt vermoedelijk een andere naam gebruikt.
Bedankt! Wanneer ik op de link klik, wordt ik gewoon gelinkt naar /managearticle.php?edit=69. Dus de connectie naar de kolom ID is wel goed. Dat is het vreemde.
Als het goed is staat bij de foutmelding ook een regelnummer en een bestand aangegeven. Aan de hand daarvan kun je zien waar de fout zich voordoet. Wellicht staat de fout ergens anders.
Code (php)
1
2
3
2
3
<?php
$result = mysql_query("UPDATE content SET frontpage = '" . $_POST['frontpage'] . "' WHERE ID=". (int) $_POST['ID'], $connection);
?>
$result = mysql_query("UPDATE content SET frontpage = '" . $_POST['frontpage'] . "' WHERE ID=". (int) $_POST['ID'], $connection);
?>
Gewijzigd op 03/05/2014 18:21:40 door Dennis B
Kijk... deze ID komt dus uit je POST gegevens (en heeft niks met de database te maken). Deze ID komt dus uit je formulier. Blijkbaar staat daar geen ID in, of het heet anders, bijvoorbeeld id (met kleine letters).
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
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
<?php
if (isset($_POST['frontpage'])){
foreach($_POST AS $elem)
echo $elem.'<br>';
foreach($_POST AS $key => $elem)
echo $key.': '.$elem.'<br>';
$result = mysql_query("UPDATE content SET frontpage = '" . $_POST['frontpage'] . "' WHERE ID=". (int) $_POST['ID'], $connection);
if(!$result) {
echo 'error executing frontpage query' . mysql_errno() . ' : ' . mysql_error();
}
}
$result = mysql_query("SELECT * FROM content", $connection);
if (!$result) {
echo 'error executing select query' . mysql_errno() . ' : ' . mysql_error();
}
?>
<html>
<head>
<?php include 'head.php'; ?>
<title>Overzicht</title>
</head>
<body>
<?php include 'header.php'; ?>
<section id="container">
<div id="content">
<p class="titel">Overzicht</p>
<form action="" method="post">
<table border="1">
<tr>
<td>Titel</td>
<td>Volgorde op Homepage (>0)</td>
</tr>
<?php
if($result) {
while ($row = mysql_fetch_assoc($result)) {
echo '<tr><td><a href="managearticle.php?edit=' . $row['ID'] . '">' . $row['title'] . '</a></td>';
echo '<td><input type="text" name="frontpage[]" value="' . $row['frontpage'] . '" /></td></tr>';
}
}
?>
</table>
<input type="submit" name="frontpage" value="frontpage"/>
</form>
</div>
</section>
<?php include 'footer.php'; ?>
</body>
</html>
if (isset($_POST['frontpage'])){
foreach($_POST AS $elem)
echo $elem.'<br>';
foreach($_POST AS $key => $elem)
echo $key.': '.$elem.'<br>';
$result = mysql_query("UPDATE content SET frontpage = '" . $_POST['frontpage'] . "' WHERE ID=". (int) $_POST['ID'], $connection);
if(!$result) {
echo 'error executing frontpage query' . mysql_errno() . ' : ' . mysql_error();
}
}
$result = mysql_query("SELECT * FROM content", $connection);
if (!$result) {
echo 'error executing select query' . mysql_errno() . ' : ' . mysql_error();
}
?>
<html>
<head>
<?php include 'head.php'; ?>
<title>Overzicht</title>
</head>
<body>
<?php include 'header.php'; ?>
<section id="container">
<div id="content">
<p class="titel">Overzicht</p>
<form action="" method="post">
<table border="1">
<tr>
<td>Titel</td>
<td>Volgorde op Homepage (>0)</td>
</tr>
<?php
if($result) {
while ($row = mysql_fetch_assoc($result)) {
echo '<tr><td><a href="managearticle.php?edit=' . $row['ID'] . '">' . $row['title'] . '</a></td>';
echo '<td><input type="text" name="frontpage[]" value="' . $row['frontpage'] . '" /></td></tr>';
}
}
?>
</table>
<input type="submit" name="frontpage" value="frontpage"/>
</form>
</div>
</section>
<?php include 'footer.php'; ?>
</body>
</html>
Gewijzigd op 04/05/2014 20:01:37 door Dennis B
Dennis B op 04/05/2014 20:00:30:
?Ik kan helaas niks vinden.
Denk dat Ozzie de verklaring al gegeven heeft:
Ozzie PHP op 03/05/2014 18:48:34:
Kijk... deze ID komt dus uit je POST gegevens (en heeft niks met de database te maken). Deze ID komt dus uit je formulier. Blijkbaar staat daar geen ID in, of het heet anders, bijvoorbeeld id (met kleine letters).
Dus: waar komt $_POST['ID'] vandaan?
Code (php)
1
2
3
2
3
<?php
echo '<tr><td><a href="managearticle.php?edit=' . $row['ID'] . '">' . $row['title'] . '</a></td>';
?>
echo '<tr><td><a href="managearticle.php?edit=' . $row['ID'] . '">' . $row['title'] . '</a></td>';
?>
Gewijzigd op 05/05/2014 19:55:47 door Dennis B
Wat bedoel jij met "het is de bedoeling dat die gepost wordt". Kun je eens uitleggen wat je bedoelt?
De bedoeling is dat de foreach het ID meeneemt.
Hierbij een link naar de printscreen..
Wat ik wil bereiken is, is dat zodra ik een cijfer invul, deze door de knop 'frontpage' worden weggeschreven. Uiterraard bij het juiste ID.
Gewijzigd op 05/05/2014 20:19:24 door Dennis B
Oké, maar de foutmelding heeft het dus over een $_POST['ID']. En blijkbaar wordt er dus geen "ID" gepost vanuit je formulier. Dus daar zul je de fout moeten zoeken.
Alvast bedankt voor de hulp :)
Heeft iemand misschien een oplossing? Probleem speelt nog. Alvast bedankt!
Dennis geef eens een SQL dump van je tabel 'content' uit phpMyAdmin. (Klikken op 'content', dan op tabje Exporteren en dan op de button Start)
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
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
-- phpMyAdmin SQL Dump
-- version 3.5.8.2
-- http://www.phpmyadmin.net
--
-- Machine: localhost
-- Genereertijd: 13 mei 2014 om 17:21
-- Serverversie: 5.5.31
-- PHP-versie: 5.3.27
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Databank: `dennis_cms`
--
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `content`
--
CREATE TABLE IF NOT EXISTS `content` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`categoryID` int(10) DEFAULT NULL,
`title` varchar(255) NOT NULL,
`text` mediumtext NOT NULL,
`frontpage` int(11) DEFAULT NULL,
`block` int(10) DEFAULT NULL,
`created` varchar(20) NOT NULL,
`created_by` int(10) NOT NULL,
`changed` varchar(20) DEFAULT NULL,
`changed_by` int(10) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=80 ;
--
-- Gegevens worden uitgevoerd voor tabel `content`
--
INSERT INTO `content` (`ID`, `categoryID`, `title`, `text`, `frontpage`, `block`, `created`, `created_by`, `changed`, `changed_by`) VALUES
(59, 55, 'dit is categorie 2 artikel', '<p>dit is categorie 2 artikel</p>\r\n', 1, NULL, '18-02-2014', 3, '02-03-2014', 3),
(69, 55, 'dddd', '<p>ddddd</p>\r\n', NULL, NULL, '02-05-2014', 3, NULL, NULL),
(78, 54, 'thtsdthrstt', '<p>tshtts</p>\r\n', NULL, NULL, '02-05-2014', 3, NULL, NULL);
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-- version 3.5.8.2
-- http://www.phpmyadmin.net
--
-- Machine: localhost
-- Genereertijd: 13 mei 2014 om 17:21
-- Serverversie: 5.5.31
-- PHP-versie: 5.3.27
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Databank: `dennis_cms`
--
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `content`
--
CREATE TABLE IF NOT EXISTS `content` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`categoryID` int(10) DEFAULT NULL,
`title` varchar(255) NOT NULL,
`text` mediumtext NOT NULL,
`frontpage` int(11) DEFAULT NULL,
`block` int(10) DEFAULT NULL,
`created` varchar(20) NOT NULL,
`created_by` int(10) NOT NULL,
`changed` varchar(20) DEFAULT NULL,
`changed_by` int(10) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=80 ;
--
-- Gegevens worden uitgevoerd voor tabel `content`
--
INSERT INTO `content` (`ID`, `categoryID`, `title`, `text`, `frontpage`, `block`, `created`, `created_by`, `changed`, `changed_by`) VALUES
(59, 55, 'dit is categorie 2 artikel', '<p>dit is categorie 2 artikel</p>\r\n', 1, NULL, '18-02-2014', 3, '02-03-2014', 3),
(69, 55, 'dddd', '<p>ddddd</p>\r\n', NULL, NULL, '02-05-2014', 3, NULL, NULL),
(78, 54, 'thtsdthrstt', '<p>tshtts</p>\r\n', NULL, NULL, '02-05-2014', 3, NULL, NULL);
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Code (php)
1
2
3
2
3
<?php
echo '<td><input type="text" name="frontpage[]" value="' . $row['frontpage'] . '" /></td></tr>';
?>
echo '<td><input type="text" name="frontpage[]" value="' . $row['frontpage'] . '" /></td></tr>';
?>
regel 58:
Beiden regels maken een $_POST['frontpage'] aan. De eerste keer is dat een array maar bij de tweede keer wordt de array overschreven door de waarde 'frontpage' en ben je de array dus kwijt.
Je zult dus bij één van de twee een andere name attribuut moeten opgeven.
ik heb regel 58 zojuist veranderd in:
{code]
{/code}
uiteraard ook de if (isset($_POST['test'])) veranderd.
Echter krijg ik nog steeds dezelfde foutmelding wanneer ik op de button klik.
Undefined index: ID in /overviewarticle2.php on line 10
en daar staat:
Code (php)
1
2
3
2
3
<?php
$result = mysql_query("UPDATE content SET frontpage = '" . $_POST['frontpage'] . "' WHERE ID=". (int) $_POST['ID'], $connection);
?>
$result = mysql_query("UPDATE content SET frontpage = '" . $_POST['frontpage'] . "' WHERE ID=". (int) $_POST['ID'], $connection);
?>
Nogmaals bedankt!