Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Fatal error: [] operator not supported for strings

Hallo,

ich habe hier ein ernsthaftes Problem mit einer SESSION - Verwaltung!!
Der auftretende Fehler raubt mir seit Nächten den schlaf.
Auftreten tut das Problem erst im tritten aufruf der Session, aber ohne erkennbaren Grund.
Hier erst mal der Code und dann eine detailirtere Feherlanalyse:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Auf der gleichen Seite befindet sich eine Artikelverwaltung, die jeweils den ausgewählten Artikel als Nummer mit einem Aufruf auf sich selbst, übergibt. Versucht man seiner Session zum tritten male einen Artikel zu übergeben, kommt es zu der folgenden Fehlermeldung:

Fatal error: [] operator not supported for strings in /srv/www/htdocs/.../test.php on line 29

In der zeile 29 befindet sich folgende Codeanweisung: $_SESSION['ArtikelNr'][] = (int)$_POST['addArtikel'];

Da, bei den ersten beiden aufrufen kein Fehler entsteht und auch mit nur zwei Artikel alles funktioniert bin ich völlig ratlos, wo der Fehler stecken könnte. Zur weiteren Kontrolle habe ich folgenden Code eingebaut:

Code:                   In Zwischenablage kopieren (nur IE)
2">

Bei dem tritten durchlauf wird genau diese Bedingung erfüllt und das Array gelöscht. Soweit so gut, ich weiß nun, das im tritten Aufruf die Variable $_SESSION["ArtikelNr"] nicht mehr vom Typ Array ist! Aber wieso??? Wieso und vor allen Dingen wo durch verändert sich der Variablentyp???

Bin am Ende meiner Ideen und stecke so zu sagen in einer Sackgasse fest.
Wer kann mir einen Weg hier heraus aufzeigen?

Gruß
Uriens
Hier gehts zum Orginal Eintrag "Fatal error: [] operator not supported for strings" im Forum

Antworten

Seit wann erlaubt PHP explizite Casts mittels (int)? Ist das nicht Java-Code? :)


2.

http://de2.php.net/manual/de/language.types.type-juggling.php#language.types.typecasting


3.

das Skript geht hier ohne Probleme.
Machst Du mit den Feldern noch irgendwo was?

Zitat:
// for testing
if( !is_array($_SESSION["ArtikelNr"]) )
{
echo "Delete array";
unset( $_SESSION["ArtikelNr"]);
}
warum nicht gleich wieder als leeres Feld erstellen lassen?
Code:                   In Zwischenablage kopieren (nur IE)
3">

Das erspart eine Warnung.

Insgesamt ist es recht gefährlich, sich auf die konsistente Nummerierung in zwei Feldern zu verlassen. Sobald Dein !is_array greift, ist die Konsistenz weg und der Kunde bestellt irgendwelche Mengen von irgendwas.
Besser zusammenhalten, was zusammen gehört
Code:                   In Zwischenablage kopieren (nur IE)
4">




4.

Hi,

to oimel => ein Cast an dieser Stelle ist normalerweise kein Problem. Ich kann zwar nicht mit Sicherheit sagen, ob es php - Konform ist. Aber es funktioniert und in meinem speziellen Fall auch nicht die Ursache des Problems gewesen. Aber Danke für Dein posting!

to VolkerK => absolut genial, ich danke Dir. Habe Deinen Codevorschlag noch ein bisschen auf meine Bedürfnisse zugeschnitten und jetzt funktioniert alles ohne Fehler. Ist natürlich wesentlich schicker, Anzahl und Artikel in ein eigenes Array zu stecken. Nochmals vielen Dank.
Hoffe ich werd Dir irgendwann auch mal weiterhelfen können!

Gruß
Stefan


5.

Ha, hab ich auch wieder was gelernt: PHP kennt explizite Casts im Java-Stil! Wer hätts gedacht :)


Hier gehts zum Orginal Eintrag "Fatal error: [] operator not supported for strings" im Forum
 
phpforum.de | Impressum | Handy Bundles