foreach(), hoe werkt dat?
ik kwam vandaag een script tegen van foto's die uit de map worden gehaalt en worden laten zien. Mooi systeem en precies wat ik nodig heb ( om wat van te leren uiteraard ).
Nu wil ik daar graag pagina's bij maken, want 300 foto's tegelijk laden vind ik niet echt een goed idee.
Nu staat er waar de foto's worden geladen een foreach loop met:
Code (php)
Wat doet het precies en hoe kan ik het gebruiken zodat ik er een nummering in kan zetten? ( trouwens, kan iemand mij daarbij helpen )
Dit was het hele 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
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
<?php include('header.php'); ?>
<table width="100%" cellspacing="0" cellpadding="0">
<form action="" enctype="multipart/form-data" method="post">
<input type="hidden" name="upload">
<tr>
<td style="border-bottom:1px solid #CCCCCC; padding:20px;" align="center" bgcolor="#FFFFFF">
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['upload'])) {
if (empty($_FILES['foto']['name']) || !eregi('\.(gif|jpg|png|psd|bmp|jpeg)$', $_FILES['foto']['name']) || file_exists($_FILES['foto']['name'])) {
$msg = '<font color="#FF0000">De foto kan niet geüpload worden.</font><br><br>';
} else {
if (move_uploaded_file($_FILES['foto']['tmp_name'], $_FILES['foto']['name'])) {
$msg = 'De foto is geüpload.<br><br>';
} else {
$msg = '<font color="#FF0000">De foto kan niet geüpload worden.</font><br><br>';
}
}
echo $msg;
}
?>
Foto uploaden:
<input type="file" name="foto" size="30">
<input type="submit" value="Upload">
</td>
</tr>
</form>
<tr>
<td style="padding:20px;" align="center">
<?
$fotos = array();
$handle = opendir('.');
while (false !== ($foto = readdir($handle))) {
if (eregi('\.(gif|jpg|png|psd|bmp)$', $foto)) {
$fotos[] = $foto;
}
}
closedir($handle);
sort($fotos);
reset($fotos);
if (isset($_GET['foto']) && file_exists($_GET['foto'])) {
if (isset($_GET['id']) && $_GET['id'] != 0) { $newid = $_GET['id'] - 1; echo '<a href="index.php?foto='.$fotos[$newid].'&id='.$newid.'">vorige</a> | '; }
echo '<a href="index.php">overzicht</a>';
$fotocount = count($fotos) - 1;
if (isset($_GET['id']) && $_GET['id'] != $fotocount) { $newid = $_GET['id'] + 1; echo ' | <a href="index.php?foto='.$fotos[$newid].'&id='.$newid.'">volgende</a>'; }
echo '<br><br>';
echo '<img src="'.$_GET['foto'].'" alt="'.$_GET['foto'].'" border="0" width="500" height="400">';
} else {
$count = 1;
foreach ($fotos as $id => $value) {
if ($count == 6) { $br = '<br>'; } else { $br = ' '; }
echo '<a href="index.php?foto='.$value.'&id='.$id.'"><img src="'.$value.'" alt="'.$value.'" border="0" width="100"></a>'.$br;
if ($count == 6) { $count = 1; } else { $count ++; }
}
}
?>
</td>
</tr>
</table>
<?php include('footer.php'); ?>
<table width="100%" cellspacing="0" cellpadding="0">
<form action="" enctype="multipart/form-data" method="post">
<input type="hidden" name="upload">
<tr>
<td style="border-bottom:1px solid #CCCCCC; padding:20px;" align="center" bgcolor="#FFFFFF">
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['upload'])) {
if (empty($_FILES['foto']['name']) || !eregi('\.(gif|jpg|png|psd|bmp|jpeg)$', $_FILES['foto']['name']) || file_exists($_FILES['foto']['name'])) {
$msg = '<font color="#FF0000">De foto kan niet geüpload worden.</font><br><br>';
} else {
if (move_uploaded_file($_FILES['foto']['tmp_name'], $_FILES['foto']['name'])) {
$msg = 'De foto is geüpload.<br><br>';
} else {
$msg = '<font color="#FF0000">De foto kan niet geüpload worden.</font><br><br>';
}
}
echo $msg;
}
?>
Foto uploaden:
<input type="file" name="foto" size="30">
<input type="submit" value="Upload">
</td>
</tr>
</form>
<tr>
<td style="padding:20px;" align="center">
<?
$fotos = array();
$handle = opendir('.');
while (false !== ($foto = readdir($handle))) {
if (eregi('\.(gif|jpg|png|psd|bmp)$', $foto)) {
$fotos[] = $foto;
}
}
closedir($handle);
sort($fotos);
reset($fotos);
if (isset($_GET['foto']) && file_exists($_GET['foto'])) {
if (isset($_GET['id']) && $_GET['id'] != 0) { $newid = $_GET['id'] - 1; echo '<a href="index.php?foto='.$fotos[$newid].'&id='.$newid.'">vorige</a> | '; }
echo '<a href="index.php">overzicht</a>';
$fotocount = count($fotos) - 1;
if (isset($_GET['id']) && $_GET['id'] != $fotocount) { $newid = $_GET['id'] + 1; echo ' | <a href="index.php?foto='.$fotos[$newid].'&id='.$newid.'">volgende</a>'; }
echo '<br><br>';
echo '<img src="'.$_GET['foto'].'" alt="'.$_GET['foto'].'" border="0" width="500" height="400">';
} else {
$count = 1;
foreach ($fotos as $id => $value) {
if ($count == 6) { $br = '<br>'; } else { $br = ' '; }
echo '<a href="index.php?foto='.$value.'&id='.$id.'"><img src="'.$value.'" alt="'.$value.'" border="0" width="100"></a>'.$br;
if ($count == 6) { $count = 1; } else { $count ++; }
}
}
?>
</td>
</tr>
</table>
<?php include('footer.php'); ?>
Ik weet al aardig wat van php ( nouja, genoeg om mooie systemen mee te maken ), maar dit is nieuw voor mij.
Dus, kan iemand vertellen hoe ik precies de foreach loop in een for loop kan omzetten, zodat ik er een pagina nummering bij kan maken?
is gelijk aan
$i en $id komen waarschijnlijk overeen (niet zeker of de key '$id' ook oplopend is vanaf nul, lijkt mij van wel.
Dus bij deze code:
Foreach ($fotos as $id => $value) {
Voor elke foto gebruik je id=> met de value.
(als ik het goed heb.)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$array = array (1 => 'een', 2 => 'twee');
?>
Je hebt nu een array gemaakt welke bestaat uit
1 = een
2 = twee
waarbij 1 + 2 keys zijn
en een + twee value's
met een foreach loop ga je elke key af in je array
hieronder zie je een voorbeeld van hoe je deze kan splitten
<?php foreach($array as $key => $value): ?>
de key: <?php echo $key;?> heeft een value: <?php echo $value;?><br />
<?php endforeach; ?>
resultaat:
de key: 1 heeft een value: een
de key: 2 heeft een value: twee
$array = array (1 => 'een', 2 => 'twee');
?>
Je hebt nu een array gemaakt welke bestaat uit
1 = een
2 = twee
waarbij 1 + 2 keys zijn
en een + twee value's
met een foreach loop ga je elke key af in je array
hieronder zie je een voorbeeld van hoe je deze kan splitten
<?php foreach($array as $key => $value): ?>
de key: <?php echo $key;?> heeft een value: <?php echo $value;?><br />
<?php endforeach; ?>
resultaat:
de key: 1 heeft een value: een
de key: 2 heeft een value: twee
ik hoop dat je hier beetje wijzer van word
De plaatjes laat hij niet zien, oftewel hij weet niet meer wat value is denk ik. ( id kan natuurlijk ook )
Weet iemand hoe dat komt?
$id wordt gelijk gesteld aan de plaats van de foto in de map ( omdat hij zo is opgehaalt ) en $id wordt die value.
Verbeter mij als het niet klopt ;) Hoe kan ik dat in een for loop kwijt?
Quote:
Gewijzigd op 01/01/1970 01:00:00 door Miniejjj
Code (php)
Anders kijk maar eens wat print_r($array) doet. Daar zie je ook de keys, ookal heb je ze er niet instaan (iedere value heeft z'n eigen key in de array, heb je deze niet gedefinieerd is dit een cijfer beginnend bij 0 en oplopend. Heb je hem wel gedefinieerd is het die key).