Naar volgende item in array (WHILE)
Ik loop tegen een probleem aan. Ik ben overnieuw begonnen het met scripten van een upload systeem. Nu check ik alles eerst client side met javascript(het form kan ook niet gesubmit worden zonder javascript) en daarna nog een keer server side met PHP.
Hier een stukje van de 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
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
while(list($key,$value) = each($_FILES['images']['name']))
{
// check if at least 1 file is selected
if (!empty($_FILES['images']['name'][$key]))
{ // At least 1 file is selected, so we can do some more stuff:
$continue = 'TRUE'; // Let it continue
// We have to save the file extension, so we can add this back to the encrypted name later
$fileextension = pathinfo($value, PATHINFO_EXTENSION);
// Lets generate a random unique number, to prevent duplicate filenames;
$random_number = rand(1001,999999);
// Add the random to the filename
$random_number_file_name = $random_number.$value;
// Now we change the name to an MD5 hash, and add back the filextension. (DONT FORGET THE DOT)
$filename = md5($random_number_file_name).".".$fileextension;
// check if the files posted have the right extension.
if (in_array($_FILES['images']['type'][$key], $allowed_files) && $continue == 'TRUE')
{
$continue = 'TRUE';
}
else {
$continue = 'FALSE';
echo $value." - Invalid File Type";
}
// Check if the files are not more than 1mb (1048576 is the exact value of 1mb)
if ($_FILES['images']['size'][$key] < $max_size && $continue == 'TRUE')
{
$continue = 'TRUE';
}
else {
$continue = 'FALSE';
echo $value." - Size exceeds 1MB";
}
}
else { // No file is selected.
echo "No image selected.";
}
if ($continue == 'TRUE') // If everything is checked and passed the test
{
// Time to move the uploaded files to their directory
move_uploaded_file($_FILES['images']['tmp_name'][$key], $map . $filename);
echo $value." - Upload Succes<br />";
echo $public_map.$filename;
echo "<br /><br />";
}
}
{
// check if at least 1 file is selected
if (!empty($_FILES['images']['name'][$key]))
{ // At least 1 file is selected, so we can do some more stuff:
$continue = 'TRUE'; // Let it continue
// We have to save the file extension, so we can add this back to the encrypted name later
$fileextension = pathinfo($value, PATHINFO_EXTENSION);
// Lets generate a random unique number, to prevent duplicate filenames;
$random_number = rand(1001,999999);
// Add the random to the filename
$random_number_file_name = $random_number.$value;
// Now we change the name to an MD5 hash, and add back the filextension. (DONT FORGET THE DOT)
$filename = md5($random_number_file_name).".".$fileextension;
// check if the files posted have the right extension.
if (in_array($_FILES['images']['type'][$key], $allowed_files) && $continue == 'TRUE')
{
$continue = 'TRUE';
}
else {
$continue = 'FALSE';
echo $value." - Invalid File Type";
}
// Check if the files are not more than 1mb (1048576 is the exact value of 1mb)
if ($_FILES['images']['size'][$key] < $max_size && $continue == 'TRUE')
{
$continue = 'TRUE';
}
else {
$continue = 'FALSE';
echo $value." - Size exceeds 1MB";
}
}
else { // No file is selected.
echo "No image selected.";
}
if ($continue == 'TRUE') // If everything is checked and passed the test
{
// Time to move the uploaded files to their directory
move_uploaded_file($_FILES['images']['tmp_name'][$key], $map . $filename);
echo $value." - Upload Succes<br />";
echo $public_map.$filename;
echo "<br /><br />";
}
}
Nu heb ik, als een een fout word geconstateerd de variable $continue op FALSE staan, dat werkt opzich wel, maar als hij bijvoorbeeld een verkeerde extensie vind, gaat hij hem daarna ook nog checken op size , en dit moet hij dan overslaan en gewoon naar het volgende item in de array gaan.
Ik heb het geprobeerd met break; , maar zodra hij dan een fout vind voert hij het hele script niet meer uit.
Iemand een idee hoe ik dit aan moet pakken? Alvast bedankt!
Een stukje basiskennis kan je hier op doen:
http://www.pfz.nl/wiki/uploaden/
En het zal al helemaal geen kwaad kunnen als je wat php beginners / basis tutorials doorneemt.
Als er een lampje had gaan branden en ik al niet uren had zitten stoeien had ik het het hier ook niet gepost..
Je hebt nu elke keer een afzonderlijke if/else.
Kun je toch ook genest doen?
Of controleer of $continu op FALSE staat --> dan hoeft die de if-lus niet in.
?
Dat ga ik zo gelijk even proberen!
Of
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(voorwaarde)
{
// voorwaarde voldaan
if(voorwaarde2)
{
// aan voorwaarde 2 voldaan
}
else
{
// niet aan voorwaarde 2 voldaan
}
}
else
{
// niet aan voorwaarde 1 voldaan
}
{
// voorwaarde voldaan
if(voorwaarde2)
{
// aan voorwaarde 2 voldaan
}
else
{
// niet aan voorwaarde 2 voldaan
}
}
else
{
// niet aan voorwaarde 1 voldaan
}
en zo kun je eventueel nog wat verder 'nesten'.
Oke bedankt! Ik ga weer ff stoeien!
Javascript controles zijn handig, maar je kunt met javascript helemaal niets afdwingen. Het is een kleine moeite om het javascript aan te passen en zo alles te laten doen wat een hacker wil.
Verder; je bouwt nu een soort state-machine door in $continue aan te geven wat de status is, maar daarmee maak je het jezelf eigenlijk alleen maar lastig.
Gebruik de eerdergenoemde IF/ELSE structuur en zorg dan dat je bij elke controle eerst het stukje "wat als het niet werkt" afhandelt en daarna wat er gedaan moet worden als de controle lukt:
Code (php)
Dat houdt de situatie overzichtelijk en je krijgt onderaan niet een hele rits onsamenhangende foutafhandelingen.
Gewijzigd op 03/05/2012 19:28:38 door Pg Vincent
Is hondslelijk...
Gebruik:
Pim wat is er beter aan foreach ten opzichte van while? Het doet hetzelfde toch?
continue;
Dit keyword lijkt op break, maar gaat verder met het volgende item van de loop, ipv dat het loopen stopt.
Toevoeging op 03/05/2012 19:35:54:
Foreach is beter, omdat het exact hiervoor gemaakt is. Het is onzinnig om dat zo lelijk na te bootsen met while.
Ook is het waarschijnlijk sneller, omdat er meer in de C laag gebeurt, wat meestal/altijd sneller is, al is dat niet echt significant.
Thanks all!