PDA

Shop Support News Archive - Shopbetreiber News -> Forum : ECB: Probleme mit einem mehrstufigen Array


Lohsi
23.07.2009, 15:52
Hallo Leute,

ich habe hier ein Problem, an welchem ich fast verzweifle. Ich habe ein Script gebastelt, womit ich dem kunden Leasingpreis und leasingdauer zur verfügung stellen möchte. Dieses funktioniert auch einwandfrei bei der Produktanzeige. Nun zum Problem.

Ich möchte dieses Script auch bei den neuen Artikel auf der Startseite ausführen lassen, nur klappt es nicht. Ich habe darin drei Funktionen, wo einmal der Barpreis formatiert wird, wo einmal der gerätetyp ausgelesen wird und wo einmal eine CSV-Datei ausgelesen mit den ganzen Informationen der leasingfirma.

Das auslesen der CSV-Datei klappt und diese wird dann in ein Array Names HashMap gelesen. wenn ich nun in der Funktion mir diese ausgeben lasse klappt es. nun möchte ich dem array aber noch einen wert übergeben mit dem Barpreis. was dann so aussieht HashMap[funktionsname(parameter)]. Wenn ich jetzt aber mir dieses anzeigen lasse bekomme ich nichts.

Wenn ich das gleiche beim Artikel anzeigen lasse bekomme ich den Wert: "Array" ausgegeben

Warum nicht bei den neuenArtikel auf der Startseite.

Bitte helft mir.


Danke Christian

Xantiva
23.07.2009, 16:01
Dann schau Dir doch mal mit var_dump den Inhalt des Array an. Vielleicht kommst Du dann drauf. Wenn Du nur "Array" siehst, dann versuchst Du ein ganzes Array auszugeben und nicht nur ein Feld davon.

Lohsi
23.07.2009, 16:19
Hallo Ex-Entwickler,

ich habe das bei beiden ausprobiert bei der normalen Artikel-Anzeige bekomme ich folgende Ausgabe:

"array(8) { [24]=> string(6) "115.70" [30]=> string(5) "95.75" [36]=> string(5) "81.80" [42]=> string(5) "71.25" [48]=> string(5) "63.35" [54]=> string(5) "57.20" [60]=> string(5) "52.30" [""]=> string(0) "" } "

und bei den Neuen-Artikel auf der Startseite bekomme ich:

"NULL"


das heißt für mich jetzt, dass das Array leer ist. aber wie kann es bei dem einen funktionieren und bei dem anderen nicht???


Christian

Lohsi
23.07.2009, 17:25
Vielleicht hilft das weiter:

Ich habe jetzt in der Funktion die variable hashMap mit var_dump anzeigen lassen und siehe da es funktioniert. jetzt möchte ich aber die variable ausserhalb von der funktion nutzen können und habe diese somit als global deklariert. aber ausserhalb der funktion klappt es nicht!!!!!!!!!!! Da ist die variable wieder NULL

was kann ich jetzt machen????


Danke

Christian

Xantiva
23.07.2009, 17:34
Gültigkeit von Variablen in PHP:

http://de3.php.net/manual/de/language.variables.scope.php (http://anonym.to/?http://de3.php.net/manual/de/language.variables.scope.php)

Schau Dir das erst mal an ...

Lohsi
23.07.2009, 22:16
Also ich habe mir das angeschaut, habe aber nichts gefunden.
Hier mal die Funktion: Vielleicht hilft es ja wenn man das sieht.

function new($realPath) {
****global $Mappe, $lauf;
********
****$fp = fopen($realPath."datei.csv","r");
****$line = fgets($fp);
****

while ($line > "") {
************
if (substr($line,0,1) != "#" && trim($line) != "") { // Kommentare und Leerzeilen ignorieren
****************
****if (substr($line,0,3) == "XXX") { // Kopfzeile
****$lauf = split(";",$line);
****} else { //Preiszeile
****$lineArray = split(";",$line);
****for ($i=1;$i<sizeof($lineArray);$i++) {
****$Mappe[trim($lineArray[0])][trim($lauf[$i])] = trim($lineArray[$i]);
********************
********}
********************
************
****}
****************
****}
****$line = fgets($fp);
************
************
****************
****}
************fclose($fp);
****}

Das globale Array $Mappe soll ausserhalb der Funktion zur Verfügung stehen.

Bitte Code in Code-Tags einbetten -> http://www.ecombase.de/forum/style_images/1/folder_rte_images/code.gif

hein-tobi
23.07.2009, 22:43
Ich glaube es wird dir niemand bei so einem kleinen Codeschnipsel helfen können.
Wo rufst du was auf ?

Lohsi
24.07.2009, 08:51
Wieso denn nicht???? Dann Versuche ich es mal anders.
Ich habe eine Script welches ich per include einbinde in folgende Datei:

admin\includes\classes\categories.php

das Skript so aus:
<?
$laufzeiten = array();************// Simples Laufzeiten-Array
$Mappe = array();************// Zuweisungs-Array

function new($realPath) {
global $Mappe, $lauf;

$fp = fopen($realPath."datei.csv","r");
$line = fgets($fp);


while ($line > "") {

if (substr($line,0,1) != "#" && trim($line) != "") { // Kommentare und Leerzeilen ignorieren

if (substr($line,0,3) == "XXX") { // Kopfzeile
$lauf = split(";",$line);
} else { //Preiszeile
$lineArray = split(";",$line);
for ($i=1;$i<sizeof($lineArray);$i++) {
$Mappe[trim($lineArray[0])][trim($lauf[$i])] = trim($lineArray[$i]);

}


}

}
$line = fgets($fp);



}
fclose($fp);
}


function Barpreis($barPreis) {
********
********$barPreis = ($barPreis != NULL) ? trim($barPreis) : 0;
********
********$barNum = $barPreis+24.99;
********$faktor = floor($barNum/25);
********$result = $faktor 25;
********
********if (LO_BP > $result || HI_BP < $result) {
************
************$result = NULL;
********}
********
********return $result;
********
****}

$values = $Mappe[Barpreis($barPreis)];** //hier soll der Inhalt aus der Funktion new, welcher in der globalen Variable Mappe gespeichert wurde, übergeben werden.

Wenn ich jetzt ein echo oder var_daump davor setze bekomme ich nicht bzw. nur array(0) { }

Das sollte doch bestimmt jetzt reichen oder????

Bitte um konstruktive Ideen bzw. Lösungsvorschläge.

Danke

Christian

hein-tobi
24.07.2009, 09:03
/admin/includes/classes/categories.php ist eine Klasse und die Methoden der Klasse werden von aussen aufgerufen. Willst du beim Speichern eines Artikels deinen Code aufrufen ?

Lohsi
24.07.2009, 09:08
beim speichern eines artikels soll der code aufgerufen werden und mit in die datenbank gespeichert werden. Wenn ich mir die Variable in meiner Funktion mit echo anzeigen lasse funktioniert das auch. nur nicht ausserhalb der funktion.

hein-tobi
24.07.2009, 09:17
vielleicht die Mappe nicht global machen und am Ende der Funktion übergeben

function new($realPath) {
$Mappe = array();
...
return $Mappe;
}





$Mappe = $this->new();
$preis = $this->BarPreis($barPreis);
$values = $Mappe[$preis];

Lohsi
24.07.2009, 09:43
jetzt bekomme ich folgende Fehlermeldung:

Fatal error: Call to undefined method categories::new() in /mnt/web8/23/20/51712120/htdocs/admin/includes/classes/leasing:modul.php on line 82

in Zeile 82 steht das

$Mappe = $this->new();

yogi70
24.07.2009, 09:48
und der Fehler besagt daß du das innerhalb der Klasse "categories" aufrufst und es dort keine Methode "new" gibt.

ein "var_dump($this)" sagt wahrscheinlich sowas wie "object cateogries"

useeme2ce
24.07.2009, 10:26
Bitte, liebe Thread-Ersteller - schreibt rein, zu welchem System eure Fragen sind.

Das kann doch nicht so schwer sein... grummel .

ECB im Titel ergänzt. Beim nächsten Mal "fehlen", ist das Ding dicht... :smiley_emoticons_aufsmaul:

Lohsi
24.07.2009, 10:37
Hallo yogi,

du hast recht. Könntest du mir bitte erklären wie ich das ändern kann.

die Meldung mit var_dump($this) sieht so aus

object(categories)#5 (0) { }


Ich habe wirklich keinen Plan was ich jetzt machen muß.

yogi70
24.07.2009, 11:19
Hi,

1. Lerne PHP
2. Lerne was Objekte sind
3. Begreife was Methoden sind
4. Behebe das o.g. Problem

oder
1. Beauftrage jemand der sich damit auskennt.

tipp: Du hast entweder die Funktion new oder eine Methode new in einem anderen Objekt definiert!