Ansicht:   

#371595

uteS

02.10.2014, 13:51:03

Frage zu PHP array_push() (pc.coding)

Ich bastle an einer Vormerkliste.
Dafür wende ich auf einer Katalogseite die Funktion array_push() an, um z.B. eine Bild-URL in das Session-Array neu einzutragen, was nachher auf einer Merkzettel-Seite erscheinen soll.Das funktioniert auch im Prinzip.

Damit der Eintrag aber erst vollzogen wird, wenn man etwas ausdrücklich vormerken will, habe ich den push_array-Befehl jeweils in ein verstecktes Formularfeld geschrieben und einen submit-Button vorgesehen.

Das Problem:
Der Server führt sofort beim Aufruf der Seite alle push_array-Befehle aus, die auf der Seite findet, und schreibt sie in das Session-Array, ohne drauf zu warten, dass man auf den Button klickt.

Wo ist da mein Denkfehler / Informationsmangel?
Code der Katalogseite:

<?php 
session_start();
$_SESSION['logo']=array();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="de" xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
		<title>Katalogseite</title>
	</head>
	<body>
		<table>
			<td><img src="1188.gif" alt="" height="150" width="210" border="0" />
				<p>#1188</p>
				<form id="" action="merkliste.php" method="get" name="">
					<input type="hidden" name="vormerken" value='<?php array_push($_SESSION['logo'], "<img src="1188.gif">"); ?>'  />
					<input type="submit" name="submitButtonName" value="Vormerken" />
				</form>
			</td>
			<td><img src="1417.gif" alt="" height="150" width="210" border="0" />
				<p>#1417</p>
				<form id="" action="merkliste.php" method="get" name="">
					<input type="hidden" name="vormerken" value="<?php array_push($_SESSION['logo'], "<img src="1417.gif">"); ?>" />
					<input type="submit" name="submitButtonName" value="Vormerken" />
				</form>
			</td>
		</table>
		
		<p><a href="merkliste.php">Zur Merkliste</a></p>
	</body>
</html>



Code der Merkzettelseite:

<?php
session_start ();
$_SESSION['logo'];

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html lang="de" xmlns="http://www.w3.org/1999/xhtml">

	<head>
		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
		<title>Merkliste</title>
		
		
	</head>

	<body>
		<?php
	foreach($_SESSION['logo'] AS $nummer)
   {
   echo "<p>" .$nummer."</p>";
   }
	?>
		
	</body>

</html>

#371601

Johann [Gast]

02.10.2014, 16:58:13

@ uteS

Frage zu PHP array_push()

Das ist klar, die Seite wird aufgerufen und innerhalb der Seite wird zweimal etwas in das session array gepusht. Immer. Auch ohne absenden des Formulars.
Der Denkfehler: Die PHP Anweisung im umfassenden HTML value='...'. HTML und PHP wissen nichts voneinander.
Es werden schlicht und ergreifend bei jedem Seitenaufruf beide pushes ausgeführt.
Willst Du auf ein abgesendetes Formular reagieren, musst Du das anders machen. Vorzugsweise über ein hidden input, welches dann bei erneutem anstossen der Seite per Formular dann darüber in die PHP Bedingung fällt.
Beispiel Datei "example.php":

<?php

if(isset($_GET['action'])) {
  if($_GET['action']=="save") {
    ... hier deinen push, etc...
  }
}
?>

<form method="GET" action="example.php">
<input type="hidden" name="action" value="save"/>

... hier der Rest des Formulars...
</form>



Wenn Du POST verwendest entsprechend auch die if-Bedingungen anpassen.

#371603

uteS

02.10.2014, 18:55:26

@ Johann

Frage zu PHP array_push()

Vielen Dank, Johann.
Damit kann ich mich dann morgen mal auseinandersetzen - für heute reicht's mir.

Mit If-Konstruktionen habe ich in der Zwischenzeit herumexperimentiert, leider erfolglos, weil ich "action" natürlich nicht einbezogen habe.
In normalen Tutorials werden solche Beispiele eher nicht behandelt - oder ich habe sie nicht als relevant erkannt.

MfG
Ute

#371605

Johann [Gast]

02.10.2014, 19:38:17
(editiert von Johann, 02.10.2014, 19:40:10)

@ uteS

Frage zu PHP array_push() (ed)

Benennen kannst Du das hidden field ja wie Du möchtest, ich wähle da meist "action". Relevant ist, das irgendeine Variable nur gesetzt wird, wenn das Formular abgesendet wird, das ist dann der Trigger um in die Formulardatenbearbeitung zu springen.
Und session_start(); sollte idealerweise noch als erstes vor der if-Bedingung laufen.

#372243

uteS

19.10.2014, 21:59:16

@ Johann

Frage zu PHP array_push()

Wollte nur mal sagen, dass mir dein Tipp sehr weitergeholfen hat.
Es klappt jetzt alles so, wie ich mir es vorgestellt habe.
 :-D
MfG
Ute

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz