Array übergeben PHP zu PHP

wal

Erfahrenes Mitglied
Hallo,

momentan fällt mir nicht ein wie ich Array von einer PHP Seite zur nächsten PHP Seite weiterreichen kann um mit den Inhalten arbeiten zu können.

Schön wäre das ganze auch, wenn es nicht über get gehen müsste.

Hintergedanke dabei ist, dass ich einen Haufen IDs im Array habe und so eine Möglichkeit besitze von einem bestimmten Datensatz aus der DB vor und zurückzublättern.

Ein kurzen Denkanstoss sollte wohl ausreichen ... hoffe ich :rolleyes: :p

Vielen Dank schon mal vorab.
 
Entweder legst du das Array in der Session des Nutzers ab, oder du serialisierst die Daten, übergibst sie, und unserialisierst sie im Empfängerscript wieder.

--> [phpf]serialize[/phpf]
--> [phpf]unserialize[/phpf]

Und für die sichere Übertragung:
--> [phpf]base64_encode[/phpf]
--> [phpf]base64_decode[/phpf]

Sven
 
Hi Sven,

danke für deinen Tipp. Also das serialize klappt ganz gut und auch sehr einfach, aber die Datenübertragung haut nicht hin.

Vielleicht kannst du mir ja nochmals einen Tipp geben?! Wäre sehr nett!

Also Ausgangslage ist folgende:

HTML Seite (Code wird aus PHP heraus erzeugt):
HTML:
...
<tr><input type=\"hidden\" name=\"alleID\" value=\"".serialize($alleID)."\"></tr>
...

Nach einem Überprüfen gibt es wirklich das Hiddenfeld mit allen Einträgen.
Value:
value="a:37:{i:0;s:2:"48";i:1;s:3:"141";i:2;s:3:"241";i:3;s:3:"328";i:4;s:3:"520";i:5... etc.


Nun versuche ich in der nächsten PHP Seite den value abzugreifen:

PHP Seite:
PHP:
...
 $alleID = array();
 $alleID = unserialize(isset($_POST["alleID"]));
...

Nun erhalte ich folgende Fehlermeldung:
Notice: unserialize(): Argument is not an string in ...

Hst du noch eine Idee was ich falsch mache dabei?

Vielen Dank schon mal vorab.
 
Die Funktion [phpf]isset[/phpf] ist dort fehl am Platz. Des weiteren sollten die Daten vor der Übergabekodiert werden und anschließend wieder dekodiert:
PHP:
echo "<tr><input type=\"hidden\" name=\"alleID\" value=\"".base64_encode(serialize($alleID))."\"></tr>"

.....

$alleID = array();
$alleID = unserialize(base64_decode($_POST["alleID"]));
 
Es geht auch ohne Serialize:
PHP:
foreach($arr as $a) {
    echo "<input type=\"hidden\" name=\"arr[]\" value=\"".htmlspecialchars($a)."\">";
}
 
Hi Sven,

ich hatte das wie du vorgeschlagen hatten mit en- und decode bereits gemacht. Aber leider bleibt auch bei beiden Varianten (mit und ohne base64_de-/encode) die Variable in der zweiten PHP Seite leer?

Ich habe auch schon mal die Reihenfolge mit serialize/base64_encode vertauscht - hat aber auch nichts gebracht.

Hast du noch eine Idee ... eventuell geht es das Array in einen String zu wandeln, dann ebenfalls als String in den Value zu schreiben und dann ganz normal über $_POST abzugreifen. Ist denn das hidden-Feld Zeichen limitiert?
 
Wird das Formular auch per POST versendet?
Und hast Du auch beachtet, dass die Reihenfolge von (un)serialize und base64_(de/en)code beim Eintragen und Abrufen vertauscht ist?
 
Hi Sven,

yep, ich habe darauf geachtet das erst serialize und dann encodiert wird. Im entgegengenommen PHP Script wird dann erst decodiert und anschliessend unserializiert.

Aber auf was du mich aufmerksam gemacht hast war, das ich auf die PHP Seite per href komme.

Kurz zum Hintergrund:
Ich bastel hier an einer Art kleiner Büchereiverwaltung an unseren Intranet. Hierzu gebe ich eine Suche (PHP Script) ein z.B. nach Titel. Daraufhin erfolgt eine Suche in der DB und das Ergebnis baut ein PHP Script zusammen udn gibt diese dann als Liste in einer HTML Seite zurück. Soblad ich dann auf einen Titel klicke rufe ich über href incl. einer ID eine PHP Seite auf, die dann die Details aus der DB liest und anzeigt. In dieser PHP Seite bräuchte ich nun die Daten aus dem Array, um ein vorwärts und rückwärts blättern zu ermöglichen.

Hmmm, lieggt es denn am href?
 
Dann solltest du die serialisierten und codierten Daten des Arrays mit an die URL im href-Parameter anhängen. Im Zielscript greifst du dann über $_GET (statt $_POST) auf die Daten zu.

Sven
 
Hi Sven,

dankr für deine Hilfe und deine Geduld, ich werde es nnochmals probieren. Ich habe momentan das Problem, wie ich den zweiten Wert per href und get weiterleiten soll. Da muss ich mir nochmals Gedanken machen.

Momentan wird die Seite wie folgt zusammengebaut:
PHP:
...
  	$result = @mysql_query("$strSql");
		 if (!$result){ 
		 	$ausgabe = "<tr align=\"center\"><td colspan=\"4\" class=\"blue_bold\">Fehler bei der Ausführung der Abfrage ".mysql_error()."!</td></tr>";
		 } else {
			 $ausgabe = "<tr align=\"left\" valign=\"center\">";
			 $flag = 0;
			 while ($row = mysql_fetch_array($result)){
				 $flag = 1;
				 $ausgabe = $ausgabe."<td class=\"t_content\"><a href=\"mediendetailseite.php?swert=".$row["ID"]."\">".$row["Titel"]."</td>";
				 $ausgabe = $ausgabe."<td class=\"t_content\">".$row["Verfasser1"]."</td>";
				 $ausgabe = $ausgabe."<td class=\"t_content\">".$row["Status"]."</td>";
				 $ausgabe = $ausgabe."<td class=\"t_content\">".$row["Jahr"]."</td>";
				 $ausgabe = $ausgabe."<td class=\"t_content\">".$row["Medienart"]."</td>";
				 $ausgabe = $ausgabe."<td class=\"t_content\">".$row["Signatur_Standort"]."</td>";
				 $ausgabe = $ausgabe."<td class=\"t_content\"><a href=\"medienaenderung.php?swert=".$row["ID"]."\"><img src=bilder/icon_bearbeiten.gif alt=\"Eintrag Bearbeiten\" border=\"0\"></td>";
				 $ausgabe = $ausgabe."<tr bgcolor=\"#FFEFD8\"><td colspan=\"7\"><hr></td></tr>";
				 $alleID[] = $row["ID"];
         }
       if ($flag == 0){
          $ausgabe = "<tr align=\"center\"><td colspan=\"7\" class=\"t_content\">Mit diesen Suchkriterien gibt es leider keinen Eintrag!</td></tr>";
            
       }
...

Erstes Problem ist, das ich wahrscheinlich zuerst noch eine weitere foreach oder while-Schleife benötige um das Array $alleID sauber zu füllen.

Aber das schwierigere ist, wie bekomme ich den zweiten get-Wert in den href zu Übergabe. Hatte es bereits mit $wert2 probiert aber bisher keinen Erfolg.
 
Zurück