Vreeeeemd --- Notice: Undefined variable
Ik zit met een vreemd probleempje, ik krijg de volgende meldingen terwijl die bij zowat identieke functies (aan het begin van de class) niet voorkomen:
Notice: Undefined variable: thumb in portfolio.class.php on line 77
Notice: Undefined variable: image in portfolio.class.php on line 96
Notice: Undefined variable: description in portfolio.class.php on line 115
Het gekke is dat als ik binnen de while loop de variabele echo dan bestaat ie, maar zodra ik het return bestaat ie ineens niet meer.....
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?php
class portfolio{
/* setup for the thumbs and images, depending on the var $dir, for example: playground/thumbs or playground/gallery */
public function index($dir){
/* read directory and put the files in an array */
$x=0;
$handle = opendir('public/content/' . $dir);
/* walk through directory and put the filenames in an array */
while (false != ($file = readdir($handle))) {
if($file!="."&&$file!=".."){
$arrimages[$x]=$dir.$file;
$x++;
}
}
$numimages=$x;
closedir($handle);
/* if the given directory is empty it's propably under construction, else the array has to be ordered by alfabet */
if($numimages==0){
echo'Currently under construction.';
}else{
/* sort by alphabet */
sort($arrimages);reset($arrimages);
}
return $arrimages;
}
/* get the descriptions from the database, each description owns a timestamp referring to the filenames */
public function descriptions($value){
$y=0;
$connection=new shared();
$connection->connect();
$descriptions=new mysql($value);
$query=$descriptions->select('','');
while($myDescriptions=$descriptions->FetchArray($query)){
extract($myDescriptions);
$arrdescr['id'][$y]=$id;
$arrdescr['descr'][$y]=$description;
$y++;
}
return $arrdescr;
}
// if a page is requested to edit a project- or playgrounditem the following functions are used
public function getthumb($source, $timestamp){
$handle = opendir('public/content/' . $source . '/thumbs/');
/* walk through directory till a file, depending on the timestamp, is found. */
while (false != ($file = readdir($handle))) {
if($file=="thumb_".$timestamp.".png" || $file=="thumb_".$timestamp.".jpeg" || $file=="thumb_".$timestamp.".jpg" || $file=="thumb_".$timestamp.".gif" || $file=="thumb_".$timestamp.".swf"){
$thumb['file']=$source.'/thumbs/'.$file;
$thumb['edit']=$file;
$thumb['source']=$source;
}
}
closedir($handle);
return $thumb;
}
public function getimage($source, $timestamp){
$handle = opendir('public/content/' . $source . '/gallery/');
/* walk through directory till a file, depending on the timestamp, is found. */
while (false != ($file = readdir($handle))) {
if($file==$timestamp.".png" || $file==$timestamp.".jpeg" || $file==$timestamp.".jpg" || $file==$timestamp.".gif" || $file==$timestamp.".swf"){
$image['edit']=$file;
$image['file']=$source.'/gallery/'.$file;
/* to determine which file has to be removed and replaced.... */
/* ... and in which directory */
$image['source']=$source;
}
}
closedir($handle);
return $image;
}
public function getdescription($source, $timestamp){
$connection=new shared();
$connection->connect();
$descr=new mysql($source);
$query=$descr->select($timestamp, 'id');
while($myDescription=$descr->FetchArray($query)){
extract($myDescription);
if(!empty($id)){
$description['timestamp']=$id;
$description['descr']=$description;
}
}
return $description;
}
public function deletefiles($source, $timestamp){
#########
//new
#########
/* walk through directory till a file, depending on the timestamp, is found. */
$directory='public/content/' . $source . '/thumbs/';
$handle = opendir($directory);
while (false != ($file = readdir($handle))) {
if($file=="thumb_".$timestamp.".png" || $file=="thumb_".$timestamp.".jpeg" || $file=="thumb_".$timestamp.".jpg" || $file=="thumb_".$timestamp.".gif" || $file=="thumb_".$timestamp.".swf"){
if(!unlink($directory.$file)){
echo"Error deleting thumb, it can't be found. You are being redirected about 3 seconds...<br />";
echo"<meta http-equiv=\"refresh\" content=\"3; URL=".__ROOT.$_SESSION['back']."\" \>";
}
}
}
closedir($handle);
$directory='public/content/' . $source . '/gallery/';
$handle = opendir($directory);
/* walk through directory till a file, depending on the timestamp, is found. */
while (false != ($file = readdir($handle))) {
if($file==$timestamp.".png" || $file==$timestamp.".jpeg" || $file==$timestamp.".jpg" || $file==$timestamp.".gif" || $file==$timestamp.".swf"){
if(!unlink($directory.$file)){
echo"Error deleting image, it can't be found. You are being redirected about 3 seconds...<br />";
echo"<meta http-equiv=\"refresh\" content=\"3; URL=".__ROOT.$_SESSION['back']."\" \>";
}
}
}
closedir($handle);
return $source;
echo"<meta http-equiv=\"refresh\" content=\"0; URL=".__ROOT.$_SESSION['back']."\" \>";
}
}
?>
class portfolio{
/* setup for the thumbs and images, depending on the var $dir, for example: playground/thumbs or playground/gallery */
public function index($dir){
/* read directory and put the files in an array */
$x=0;
$handle = opendir('public/content/' . $dir);
/* walk through directory and put the filenames in an array */
while (false != ($file = readdir($handle))) {
if($file!="."&&$file!=".."){
$arrimages[$x]=$dir.$file;
$x++;
}
}
$numimages=$x;
closedir($handle);
/* if the given directory is empty it's propably under construction, else the array has to be ordered by alfabet */
if($numimages==0){
echo'Currently under construction.';
}else{
/* sort by alphabet */
sort($arrimages);reset($arrimages);
}
return $arrimages;
}
/* get the descriptions from the database, each description owns a timestamp referring to the filenames */
public function descriptions($value){
$y=0;
$connection=new shared();
$connection->connect();
$descriptions=new mysql($value);
$query=$descriptions->select('','');
while($myDescriptions=$descriptions->FetchArray($query)){
extract($myDescriptions);
$arrdescr['id'][$y]=$id;
$arrdescr['descr'][$y]=$description;
$y++;
}
return $arrdescr;
}
// if a page is requested to edit a project- or playgrounditem the following functions are used
public function getthumb($source, $timestamp){
$handle = opendir('public/content/' . $source . '/thumbs/');
/* walk through directory till a file, depending on the timestamp, is found. */
while (false != ($file = readdir($handle))) {
if($file=="thumb_".$timestamp.".png" || $file=="thumb_".$timestamp.".jpeg" || $file=="thumb_".$timestamp.".jpg" || $file=="thumb_".$timestamp.".gif" || $file=="thumb_".$timestamp.".swf"){
$thumb['file']=$source.'/thumbs/'.$file;
$thumb['edit']=$file;
$thumb['source']=$source;
}
}
closedir($handle);
return $thumb;
}
public function getimage($source, $timestamp){
$handle = opendir('public/content/' . $source . '/gallery/');
/* walk through directory till a file, depending on the timestamp, is found. */
while (false != ($file = readdir($handle))) {
if($file==$timestamp.".png" || $file==$timestamp.".jpeg" || $file==$timestamp.".jpg" || $file==$timestamp.".gif" || $file==$timestamp.".swf"){
$image['edit']=$file;
$image['file']=$source.'/gallery/'.$file;
/* to determine which file has to be removed and replaced.... */
/* ... and in which directory */
$image['source']=$source;
}
}
closedir($handle);
return $image;
}
public function getdescription($source, $timestamp){
$connection=new shared();
$connection->connect();
$descr=new mysql($source);
$query=$descr->select($timestamp, 'id');
while($myDescription=$descr->FetchArray($query)){
extract($myDescription);
if(!empty($id)){
$description['timestamp']=$id;
$description['descr']=$description;
}
}
return $description;
}
public function deletefiles($source, $timestamp){
#########
//new
#########
/* walk through directory till a file, depending on the timestamp, is found. */
$directory='public/content/' . $source . '/thumbs/';
$handle = opendir($directory);
while (false != ($file = readdir($handle))) {
if($file=="thumb_".$timestamp.".png" || $file=="thumb_".$timestamp.".jpeg" || $file=="thumb_".$timestamp.".jpg" || $file=="thumb_".$timestamp.".gif" || $file=="thumb_".$timestamp.".swf"){
if(!unlink($directory.$file)){
echo"Error deleting thumb, it can't be found. You are being redirected about 3 seconds...<br />";
echo"<meta http-equiv=\"refresh\" content=\"3; URL=".__ROOT.$_SESSION['back']."\" \>";
}
}
}
closedir($handle);
$directory='public/content/' . $source . '/gallery/';
$handle = opendir($directory);
/* walk through directory till a file, depending on the timestamp, is found. */
while (false != ($file = readdir($handle))) {
if($file==$timestamp.".png" || $file==$timestamp.".jpeg" || $file==$timestamp.".jpg" || $file==$timestamp.".gif" || $file==$timestamp.".swf"){
if(!unlink($directory.$file)){
echo"Error deleting image, it can't be found. You are being redirected about 3 seconds...<br />";
echo"<meta http-equiv=\"refresh\" content=\"3; URL=".__ROOT.$_SESSION['back']."\" \>";
}
}
}
closedir($handle);
return $source;
echo"<meta http-equiv=\"refresh\" content=\"0; URL=".__ROOT.$_SESSION['back']."\" \>";
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Patrick
return $image;
return $description;
Deze variabelen worden allemaal in een while-lus aangemaakt zonder dat er enige garantie is dat je met de code ALTIJD in de while lus terecht komt. Het kan dus heel goed zijn dat de variabelen niet bestaan. Sterker nog, die situatie doet zich al voor, zie de foutmeldingen.
Nou de variabelen krijgen ook een waarde in de while lus als ik ze echo dus de while statement en de if statement zijn allebei waar....
pgFrank schreef op 15.01.2009 19:03:
return $thumb;
return $image;
return $description;
Deze variabelen worden allemaal in een while-lus aangemaakt zonder dat er enige garantie is dat je met de code ALTIJD in de while lus terecht komt. Het kan dus heel goed zijn dat de variabelen niet bestaan. Sterker nog, die situatie doet zich al voor, zie de foutmeldingen.
return $image;
return $description;
Deze variabelen worden allemaal in een while-lus aangemaakt zonder dat er enige garantie is dat je met de code ALTIJD in de while lus terecht komt. Het kan dus heel goed zijn dat de variabelen niet bestaan. Sterker nog, die situatie doet zich al voor, zie de foutmeldingen.
Nou de variabelen krijgen ook een waarde in de while lus als ik ze echo dus de while statement en de if statement zijn allebei waar.... snap wel wat je bedoelt... maar wat het nou veroorzaakt...
Als dat niet het geval is, zullen de betreffende variabelen niet bestaan en krijg je dus deze foutmelding...
Je komt pas in de lus wanneer de while true is. Wanneer deze false is, kom je nooit in de lus terecht en zullen de variabelen nooit worden aangemaakt. Zie de foutmelding.
Blanche schreef op 16.01.2009 13:16:
En wat geeft jou de zekerheid dat de loop minimaal 1x doorlopen wordt en dat er aan de voorwaarden in het if-statement voldaan wordt?
Als dat niet het geval is, zullen de betreffende variabelen niet bestaan en krijg je dus deze foutmelding...
Als dat niet het geval is, zullen de betreffende variabelen niet bestaan en krijg je dus deze foutmelding...
Dat weet ik omdat ik op regel 72 echo $thumb['file']; heb geprobeerd en dan geeft ie geeft ie wel degelijk de filenaam op het scherm weer
pgFrank schreef op 16.01.2009 13:17:
Je komt pas in de lus wanneer de while true is. Wanneer deze false is, kom je nooit in de lus terecht en zullen de variabelen nooit worden aangemaakt. Zie de foutmelding.
Op regel 72 heb ik echo $thumb['file']; geprobeerd en dan geeft ie geeft ie wel degelijk de filenaam op het scherm weer
ps. Sterker nog, het gebeurt blijkbaar niet. Zie de foutmelding...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Zoals men al zegt, zit je NIET ALTIJD IN die while lus, dus dan zijn die variabelen OOK NIET aangemaakt.
Blanche schreef op 16.01.2009 13:34:
Ja, alléén als dat if-statement uitgevoerd wordt zal die variabele inderdaad wel bestaan. Maar wat geeft jou de zekerheid dat dat gebeurd?
ps. Sterker nog, het gebeurt blijkbaar niet. Zie de foutmelding...
ps. Sterker nog, het gebeurt blijkbaar niet. Zie de foutmelding...
Oké sterker nog: zelfs buiten de while loop doe ik: echo echo $thumb['file']; de variabele is wel degelijk gevuld want ik zie een waarde op het scherm. Maar tegelijkertijd bestaat diezelfde variabele op diezelfde regel niet zegt de foutmelding er onder.
Dus hij bestaat niet maar tegelijkertijd bestaat ie wel?
En je roept die method toevallig niet op meerdere plaatsen in je script aan? Waarbij hij wellicht de ene keer wel bestaat en de andere keer niet?
Blanche schreef op 16.01.2009 13:45:
En je roept die method toevallig niet op meerdere plaatsen in je script aan? Waarbij hij wellicht de ene keer wel bestaat en de andere keer niet?
Hèhè je slaat de spijker op zijn kop... ik moet ergens een exit in gooien want hij gaat door tot het einde en leegt de variabele weer schijnbaar :-D
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Verder wat extra controles en een return false wanneer de dingen fout gaan, en je problemen verdwijnen als sneeuw voor de zon.
Blanche schreef op 16.01.2009 13:53:
Een exit is wel erg drastisch, maar ergens een logische controle (if/else) invoegen kan waarschijnlijk geen kwaad ;-)
hehe ja dat is wel wat netter ;-)
En bedankt natuurlijk
Gewijzigd op 01/01/1970 01:00:00 door Patrick
pgFrank schreef op 16.01.2009 13:56:
Tip: Sloop die vele echo's uit je classe, echoen doe je niet binnen een classe, dat maakt hem vrijwel onbruikbaar.
Verder wat extra controles en een return false wanneer de dingen fout gaan, en je problemen verdwijnen als sneeuw voor de zon.
Verder wat extra controles en een return false wanneer de dingen fout gaan, en je problemen verdwijnen als sneeuw voor de zon.
Hey bedankt voor je hulp en tips :-)
en volgende keer gewoon je berichten bewerken, dit valt onder bumpen (binnen 24 uur een onnodig bericht plaatsen als je ook gewoon de laatste post kan bewerken)