CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos

|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP 
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |

01.06.2010, 14:20:37
|
Anfänger
|
|
Registriert seit: Jan 2009
Alter: 46
Beiträge: 57
|
|
Funktioniert list() nicht mit Session Arrays?
Über ein Formular werden via $_POST Werte in ein Session-Array geschrieben.
Wenn ich dieses Array einer Variabel zuweise und diese mit var_dump ausgebe, sieht die Ausgabe so aus:
Zitat:
array(2)
{
[0]=> array(8)
{
["position"]=> int(1)
["typ"]=> string(5) "Typ15"
["system"]=> string(12) "Ideal 4000RL"
["glasart"]=> string(7) "doppelt"
["rfarbe"]=> string(4) "weiß"
["x"]=> string(3) "150"
["y"]=> string(3) "160"
["menge"]=> string(1) "8"
}
[1]=> array(8)
{
["position"]=> int(2)
["typ"]=> string(4) "Typ1"
["system"]=> string(12) "Ideal 2000RL"
["glasart"]=> string(5) "3fach"
["rfarbe"]=> string(4) "weiß"
["x"]=> string(2) "45"
["y"]=> string(2) "60"
["menge"]=> string(2) "10"
}
}
|
Nun wollt ich den Inhalt des Arrays via list() in einer while-Schleife ausgeben und hab diese Variante ausprobiert, die aber nicht das gewünschte Ergebnis brachte!
PHP-Code:
$anfragen = $_SESSION['anfrage']; while (list($pos, $typ, $system, $glasart, $rfarbe, $x, $y, $menge) = each($anfragen)) { echo $pos.' '.$typ.' '.$system.' '.$glasart.' '.$rfarbe.' '.$x.' '.$y.' '.$menge.'<br>'; }
Die echo-Anweisung innerhalb der Schleife führte zu diesen Fehlermeldungen:
Zitat:
Notice: Undefined offset: 7 in /anfragen_send.php on line 80
Notice: Undefined offset: 6 in /anfragen_send.php on line 80
Notice: Undefined offset: 5 in /anfragen_send.php on line 80
Notice: Undefined offset: 4 in /anfragen_send.php on line 80
Notice: Undefined offset: 3 in /anfragen_send.php on line 80
Notice: Undefined offset: 2 in /anfragen_send.php on line 80
0 Array
Notice: Undefined offset: 7 in /anfragen_send.php on line 80
Notice: Undefined offset: 6 in /anfragen_send.php on line 80
Notice: Undefined offset: 5 in /anfragen_send.php on line 80
Notice: Undefined offset: 4 in /anfragen_send.php on line 80
Notice: Undefined offset: 3 in /anfragen_send.php on line 80
Notice: Undefined offset: 2 in /anfragen_send.php on line 80
1 Array
|
Was mir an dieser Stelle wohl die meisten Schwierigkeiten macht ist, dass ich noch keine Literatur im Web(Tutorial/Dokumentation) gefunden hab, die nicht mit einem fest definierten Array arbeitet.
In meinem PHP5-Handbuch wird list z.B. so erläutert:
PHP-Code:
$produkte = array("Gurke", "Lauch", "Brokoli", "Kohl");
list($produkt1, $produkt2, $produkt3, $produkt4) = $produkte; echo produkt1;
In meinem Fall ist eine solche fixe Arraydeklartion jedoch nicht möglich, da es abhängig von der Formularübergabe ist und nicht nur 1 Zeile(Subarray), sondern mehrere Zeilen enthalten kann.
Wäre nett, wenn mir mal einer nen Ansatz aufzeigen könnte, um zunächst mal nur die Position Zeilenweise auszugeben.
Thx vorab!
Geändert von cortex (01.06.2010 um 15:36:09 Uhr)
|

01.06.2010, 14:33:00
|
Anfänger
|
|
Registriert seit: Jan 2009
Alter: 46
Beiträge: 57
|
|
AW: Funktioniert list() nicht mit Session Arrays?
OK, grade nen Geistesblitz gehabt und doch noch auf die Lösung gekommen.
So sieht es jetzt aus und funktioniert auch:
PHP-Code:
$gesamt=count($_SESSION['anfrage']); $index=0; $anfragen = $_SESSION['anfrage']; while ($gesamt > 0) { list($pos, $typ, $system, $glasart, $rfarbe, $x, $y, $menge) = each($anfragen); $pos=$_SESSION['anfrage'][$index]['position']; $typ=$_SESSION['anfrage'][$index]['typ']; $system=$_SESSION['anfrage'][$index]['system']; $glasart=$_SESSION['anfrage'][$index]['glasart']; $rfarbe=$_SESSION['anfrage'][$index]['rfarbe']; $x=$_SESSION['anfrage'][$index]['x']; $y=$_SESSION['anfrage'][$index]['y']; $menge=$_SESSION['anfrage'][$index]['menge']; echo $pos.'<br>'; $index++; $gesamt--; }
Als nächstes werde ich daran arbeiten, dass auf der Seite immer nur jeweils eine Zeile des Array angezeigt wird und man durchblättern kann.
Nichts desto trotz, falls jemand noch ne elegantere/kürzer Lösung vom Coding her kann, bitte posten.
|

01.06.2010, 14:34:57
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Funktioniert list() nicht mit Session Arrays?
Du möchtest nicht list() verwenden, sondern extract().
(oder sogar ganz auf dem import in den Namensraum verzichten)
Auch möchtest du sicherlich viel lieber mit foreach, statt mit while/each arbeiten.
|

01.06.2010, 16:59:48
|
Anfänger
|
|
Registriert seit: Jan 2009
Alter: 46
Beiträge: 57
|
|
AW: Funktioniert list() nicht mit Session Arrays?
Zitat:
Zitat von DokuLeseHemmung
(oder sogar ganz auf dem import in den Namensraum verzichten)
|
Was meinst du an dieser Stelle mit Namensraum?
|

01.06.2010, 18:12:15
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Funktioniert list() nicht mit Session Arrays?
Mit dem Namensraum meine ich den Bereich, wo die Variablen angelegt werden.
Tipp:
Die Qualität des Codes steigt nicht mit der Anzahl der Variablen.
|

02.06.2010, 10:57:16
|
Anfänger
|
|
Registriert seit: Jan 2009
Alter: 46
Beiträge: 57
|
|
AW: Funktioniert list() nicht mit Session Arrays?
Also hab mir nochmals die Dokumentation zur extract und foreach durchgelesen und zu dieser Codeänderung gelangt, welche auch funktioniert.
PHP-Code:
//$gesamt=count($_SESSION['anfrage']);
$index=0;
$anfragen = $_SESSION['anfrage'];
foreach ( $anfragen as $value )
{
extract($anfragen[$index], EXTR_PREFIX_ALL, 'tmp');
echo 'Pos.:$nbsp;' . $tmp_position. '<br>' . "\n";
echo 'Typ.:$nbsp;' . $tmp_typ. '<br>' . "\n";
echo 'System.:$nbsp;' . $tmp_system . '<br>' . "\n";
echo 'Verglasung:$nbsp;' . $tmp_glasart . '<br>' . "\n";
echo 'Rahhmenfarbe:$nbsp;' . $tmp_rfarbe. '<br>' . "\n";
echo 'X:$nbsp;' . $tmp_x. '<br>' . "\n";
echo 'Y:$nbsp;' . $tmp_y . '<br>' . "\n";
echo 'Menge:$nbsp;' . $tmp_menge . '<br>' . "\n";
$index++;
}
Somit kann ich nun den nächsten Schritt angehen und versuchen eine Blätterfunktion zu integrieren, so dass immer nur 1 Position aktuelle angezeigt wird.
|

02.06.2010, 11:14:53
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Funktioniert list() nicht mit Session Arrays?
Den Index bauchst du nicht selber zu zählen!
Auch könnte er später mal lückenhaft oder unsortiert sein.
PHP-Code:
//$gesamt=count($_SESSION['anfrage']);
foreach ($_SESSION['anfrage'] as $index => $value ) // hier gibts den Index ohne rechnen geschenkt
{
extract($value, EXTR_PREFIX_ALL, 'tmp');
echo 'Pos.: ' . $tmp_position . '<br>' . "\n";
echo 'Typ.: ' . $tmp_typ . '<br>' . "\n";
echo 'System.: ' . $tmp_system . '<br>' . "\n";
echo 'Verglasung: ' . $tmp_glasart . '<br>' . "\n";
echo 'Rahhmenfarbe: ' . $tmp_rfarbe . '<br>' . "\n";
echo 'X: ' . $tmp_x . '<br>' . "\n";
echo 'Y: ' . $tmp_y . '<br>' . "\n";
echo 'Menge: ' . $tmp_menge . '<br>' . "\n";
}
Und für die Blätterfunktion lässt sich folgendes nutzen:
http://de.php.net/manual/en/class.arrayiterator.php
http://de.php.net/manual/en/class.limititerator.php
Und?
Warum nicht so...
PHP-Code:
//$gesamt=count($_SESSION['anfrage']);
foreach ($_SESSION['anfrage'] as $index => $value ) // hier gibts den Index ohne rechnen geschenkt
{
echo 'Pos.: ' . $value['position'] . '<br>' . "\n";
echo 'Typ.: ' . $value['typ'] . '<br>' . "\n";
echo 'System.: ' . $value['system'] . '<br>' . "\n";
echo 'Verglasung: ' . $value['glasart '] . '<br>' . "\n";
echo 'Rahhmenfarbe: ' . $value['rfarbe'] . '<br>' . "\n";
echo 'X: ' . $value['x'] . '<br>' . "\n";
echo 'Y: ' . $value['y'] . '<br>' . "\n";
echo 'Menge: ' . $value['menge'] . '<br>' . "\n";
}
Geändert von DokuLeseHemmung (02.06.2010 um 11:27:46 Uhr)
|

02.06.2010, 13:11:04
|
Anfänger
|
|
Registriert seit: Jan 2009
Alter: 46
Beiträge: 57
|
|
AW: Funktioniert list() nicht mit Session Arrays?
Zitat:
Zitat von DokuLeseHemmung
Und?
Warum nicht so...
|
Naja, dass muss ich noch austesten, was für die spätere Weiterverarbeitung besser geignet ist. Sobald das mit dem Blättern läuft soll noch eine Möglichkeit geschaffen werden eine Position im Array komplett zu löschen bzw. die einzelnen Werte zu verändern.
Zitat:
Zitat von DokuLeseHemmung
|
Bringt mich momentan noch nicht weiter.
Sehe da leider keinen Ansatz wie es sich so umsetzen lässt, dass es durch das Anklicken von Links funktioniert.
PHP-Code:
echo '<a href="anfragen_senden.php?index='.($index-1).'" target="_self"><<</a> <b>Position</b> <a href="anfragen_senden.php?index='.($index+1).'" target="_self">>></a>';
|

02.06.2010, 13:30:43
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
|
|
AW: Funktioniert list() nicht mit Session Arrays?
Zitat:
Sobald das mit dem Blättern läuft soll noch eine Möglichkeit geschaffen werden eine Position im Array komplett zu löschen bzw. die einzelnen Werte zu verändern.
|
Ein Grund mehr mit dem konkreten Array zu arbeiten. Und nicht mit Kopien.
Zitat:
Bringt mich momentan noch nicht weiter.
Sehe da leider keinen Ansatz wie es sich so umsetzen lässt, dass es durch das Anklicken von Links funktioniert.
|
Das soll ich dir jetzt auch vorkauen?
Jagut, hier mal ein Beispiel für den Einsatz des LimitIterators:
PHP-Code:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', TRUE);
// ------------------
// Einstellungen
$such_in = '.'; // Verzeichnis, welches durchsucht werden soll
$pro_seite = 10; // Anzahl Einträge pro Seite
// Pager , Blätterfunktion
$seite = max(0,empty($_GET['S'])?0:(int)$_GET['S']);
$offset = $seite*$pro_seite;
// Rekursivgedöns
$dir = new LimitIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($such_in)),$offset,$pro_seite);
// Ausgabe
?>
<h1>Seite: <?php echo $seite ?> </h1>
<a href="?S=<?php echo ($seite-1)?>">Prev</a> ||
<a href="?S=<?php echo ($seite+1)?>">Next</a>
<hr>
<?php
$dir->rewind();
if($dir->valid())
foreach($dir as $datei)
echo $datei->getPathname()."<br>";
else echo 'Hier ist Ende!<br>';
|

02.06.2010, 15:47:09
|
Anfänger
|
|
Registriert seit: Jan 2009
Alter: 46
Beiträge: 57
|
|
AW: Funktioniert list() nicht mit Session Arrays?
Zitat:
Zitat von DokuLeseHemmung
Das soll ich dir jetzt auch vorkauen?
|
Sry, aber das die PHP-Dokumentation(php.net) nicht gerade mit verständlichen Beispielcodes glänzt, liegt nicht an mir.
Es fehlen halt Erklärungen anhand von praxisnahen Beispielen.
Aber so läuft es jetzt:
PHP-Code:
$gesamt=count($_SESSION['anfrage']); $dir=new LimitIterator(new RecursiveArrayIterator($anfragen), $offset, $pps); $dir->rewind(); if($dir->valid()) { foreach ( $dir as $index => $value ) { // Ausgabe
// Blättern if ($gesamt > '1') { if (($index > '0') AND ($index < ($gesamt-1))) { echo '<a href="anfragen_send.php?step='.($index-1).'" target="_self"><<</a> <b>Position</b> <a href="anfragen_send.php?step='.($index+1).'" target="_self">>></a>'; } elseif ($index == '0') { echo '<< <b>Position</b> <a href="anfragen_send.php?step='.($index+1).'" target="_self">>></a>'; } elseif ($index == ($gesamt-1)) { echo '<a href="anfragen_send.php?step='.($index-1).'" target="_self"><<</a> <b>Position</b> >>'; } } }
Geändert von KeinenPlan (02.06.2010 um 16:16:25 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 03:42:00 Uhr.
|