FCKeditor: Invalid argument supplied for foreach()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rob

Rob

23/06/2006 15:25:00
Quote Anchor link
Ik ben bezig met FCKeditor en op mn localhost (PHP Version 5.1.2) werkt het prima.
Maar upload ik m naar een server met PHP Version 4.4.2 dan krijg ik de foutmelding:
Warning: Invalid argument supplied for foreach() in .... /fckeditor.php on line 110

De code is erg lang van fckeditor.php maar ik zal m posten, hopelijk kan iemand me helpen
want ik snap niet waarom het niet werkt.
De argumenten lijken wel degelijk te kloppen (en werkt dus ook in PHP 5.1.2)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<? class RCMS
{
    var
$InstanceName ;
    var
$BasePath ;
    var
$Width ;
    var
$Height ;
    var
$ToolbarSet ;
    var
$Value ;
    var
$Config ;

    // PHP 5 Constructor
    function __construct( $instanceName )
     {

        $this->InstanceName    = $instanceName ;
        $this->BasePath        = '/FCKeditor/' ;
        $this->Width        = '100%' ;
        $this->Height        = '500' ;
        $this->ToolbarSet    = 'Default' ;
        $this->Value        = '' ;

        $this->Config        = array() ;
    }

    
    // PHP 4 Contructor
    function FCKeditor( $instanceName )
    {

        $this->__construct( $instanceName ) ;
    }

    function
Create()
    {

        echo $this->CreateHtml() ;
    }
    
    function
CreateHtml()
    {

        $HtmlValue = htmlspecialchars( $this->Value ) ;

        $Html = '<div>' ;
        
        if ( $this->IsCompatible() )
        {

            if ( isset( $_GET['fcksource'] ) && $_GET['fcksource'] == "true" )
                $File = 'fckeditor.original.html' ;
            else
                $File = 'fckeditor.html' ;

            $Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ;
            
            if ( $this->ToolbarSet != '' )
                $Link .= "&amp;Toolbar={$this->ToolbarSet}" ;

            // Render the linked hidden field.
            $Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />" ;

            // Render the configurations hidden field.
            $Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" style=\"display:none\" />" ;

            // Render the editor IFRAME.
            $Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"no\" scrolling=\"no\"></iframe>" ;
        }

        else
        {
            if ( strpos( $this->Width, '%' ) === false )
                $WidthCSS = $this->Width . 'px' ;
            else
                $WidthCSS = $this->Width ;

            if ( strpos( $this->Height, '%' ) === false )
                $HeightCSS = $this->Height . 'px' ;
            else
                $HeightCSS = $this->Height ;

            $Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\">{$HtmlValue}</textarea>" ;
        }


        $Html .= '</div>' ;
        
        return $Html ;
    }

    function
IsCompatible()
    {

        global $HTTP_USER_AGENT ;

        if ( isset( $HTTP_USER_AGENT ) )
            $sAgent = $HTTP_USER_AGENT ;
        else
            $sAgent = $_SERVER['HTTP_USER_AGENT'] ;

        if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false )
        {

            $iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ;
            return ($iVersion >= 5.5) ;
        }

        else if ( strpos($sAgent, 'Gecko/') !== false )
        {

            $iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ;
            return ($iVersion >= 20030210) ;
        }

        else
            return false ;
    }

    function
GetConfigFieldString()
    {

        $sParams = '';
        $bFirst = true;
//-- HIER GAAT HET MIS -----------------------------------------------------------------
        foreach($this->Config as $sKey => $sValue)
        {

            if ( $bFirst == false )
                $sParams .= '&amp;' ;
            else
                $bFirst = false ;
            
            if ( $sValue === true )
                $sParams .= $this->EncodeConfig( $sKey ) . '=true' ;
            else if ( $sValue === false )
                $sParams .= $this->EncodeConfig( $sKey ) . '=false' ;
            else
                $sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ;
        }

        
        return $sParams ;
    }

    function
EncodeConfig( $valueToEncode )
    {

        $chars = array(
            '&' => '%26',
            '=' => '%3D',
            '"' => '%22' ) ;

        return strtr( $valueToEncode,  $chars ) ;
    }
}


?>
 
PHP hulp

PHP hulp

17/11/2024 06:49:56
 
Jan Koehoorn

Jan Koehoorn

23/06/2006 15:29:00
Quote Anchor link
En $this->Config is zeker weten een array?

edit: laat maar, in de contructor wordt hij als array geinitialiseerd zie ik.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Rob

Rob

23/06/2006 15:32:00
Quote Anchor link
Ja prcs dat vond ik ook het vreemde eraan.
Ik ben al vanaf 12:00 bezig hiermee maar ik kom er echt niet meer uit :s
 
Aoi

Aoi

23/06/2006 15:34:00
Quote Anchor link
ik weet niet waar de fout zit.
maar heb wel een vraagje.
ik weet wat != betekent en == etc..
maar wat betekent === ?
 
Jan Koehoorn

Jan Koehoorn

23/06/2006 15:35:00
Quote Anchor link
Upload het volgende voorbeeld eens om te testen of foreach werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
    $array
= array ();
    $array['een'] = 1;
    $array['twee'] = 2;
    $array['drie'] = 3;

    foreach ($array as $key => $value) {
        echo '<p>Key: '.$key.', Value: '.$value.'</p>';
    }

?>
 
Rob

Rob

23/06/2006 15:39:00
Quote Anchor link
@Jan
Key: een, Value: 1

Key: twee, Value: 2

Key: drie, Value: 3

Werkt dus prima.
ps. dit moest gewoon in een aparte file geupload worden toch, en niet in het scritpt?

@Aoi
=== Betekend: Identiek aan. Dus ook een check of ze van hetzelfde type zijn.
 
Jan Koehoorn

Jan Koehoorn

23/06/2006 15:56:00
Quote Anchor link
@Rob: ja, als test in een aparte file. Ik had ook wel verwacht dat hij zou werken want foreach bestaat al sinds PHP4

Ik denk dat je probleem ontstaat omdat hij voor PHP4 die andere (tweede) constructorfunctie pakt waarin je array niet geinitialiseerd wordt.
 
Rob

Rob

23/06/2006 15:58:00
Quote Anchor link
Oke thnx! dat is duidelijk.
Heb je misschien een idee hoe ik dit zou kunnen oplossen?
 
Jan Koehoorn

Jan Koehoorn

23/06/2006 16:02:00
Quote Anchor link
Ik zie dat die PHP4 constructor gewoon de constructorfunctie voor PHP5 aanroept eigenlijk. Vaag. Doe eens de volgende test:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
    // PHP 5 Constructor
    function __construct( $instanceName )
     {

        $this->InstanceName    = $instanceName ;
        $this->BasePath        = '/FCKeditor/' ;
        $this->Width        = '100%' ;
        $this->Height        = '500' ;
        $this->ToolbarSet    = 'Default' ;
        $this->Value        = '' ;

        $this->Config        = array() ;
    }

    
    // PHP 4 Contructor
    function FCKeditor( $instanceName )
    {

        $this->InstanceName    = $instanceName ;
        $this->BasePath        = '/FCKeditor/' ;
        $this->Width        = '100%' ;
        $this->Height        = '500' ;
        $this->ToolbarSet    = 'Default' ;
        $this->Value        = '' ;

        $this->Config        = array() ;
    }

?>

dus hard de code van de PHP5 constructor in de PHP4 constructor plakken.
 
Jan Koehoorn

Jan Koehoorn

23/06/2006 16:05:00
Quote Anchor link
Ik moet even een half uurtje weg, maar kom zo nog even kijken of het gelukt is :-)
 
Rob

Rob

23/06/2006 16:43:00
Quote Anchor link
ik heb geprobeerd wat je vroeg. maar nog steeds het zelfde effect.
ik snap het echt niet meer... :(
 
Jan Koehoorn

Jan Koehoorn

23/06/2006 17:28:00
Quote Anchor link
Ja dan wordt het zoeken. Ik neem aan dat de broncode op zich wel goed zou moeten werken, ook op PHP4. Ik zou dan eerder in de richting van de installatieprocedure van FCK gaan denken. Ik kan me voorstellen dat die array niet alleen geinitialiseerd moet worden, maar ook gevuld. Zijn de bestanden waarin dat gebeurt geinclude, dat soort dingen.
 
Rob

Rob

23/06/2006 17:46:00
Quote Anchor link
thnx voor de hulp in ieder geval...
Ik kijk wel even wat ik doe, want ik wordt echt gek.
Weet je misschien alternatieven voor FCK?
 
Jan Koehoorn

Jan Koehoorn

23/06/2006 18:12:00
Quote Anchor link
Ik heb zelf goede ervaringen met TinyMCE

Het enige nadeel van TinyMCE ten opzichte van FCK is dat je zelf iets moet verzinnen voor het uploaden van images en dergelijke. Die module zit niet standaard in TinyMCE.
 
Rob

Rob

23/06/2006 22:01:00
Quote Anchor link
ik heb er even naar gekeken en dat is super!
Ik hoef in principe toch alleen maar de tekst kunnen bewerken.
Thnx voor al je hulp Jan! Super!
 
Jason de Ridder

Jason de Ridder

23/06/2006 22:31:00
Quote Anchor link
Als je alleen text moet bewerken zie ik het nut niet in van een WYSIWYG-editor, vaak grote files, dus veel ruimte gebruik (ook al is het local), je zou dan beter een rich-text editor kunnen gebruiken. Zo snel even geen voorbeeld bij de hand. Of zelf maken, met UBB bijvoorbeeld.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.