Hallo!
Ich habe leider erheblich Probleme mit einer Session. Ich möchte diese nutzen, um eine Bestellliste zu erstellen.
Ich habe also das session_start(); direkt am anfang des Skriptes, die SessionId wird als Cookie gespeichert und meine PHP Version ist die 5.2.9 .
Das Problem ist folgendes: Es soll die Möglichkeit geben, mehrere Artikel über die Sessionvariablen zu speichern. Ich habe mich dazu entschlossen, drei Arrays zu erstellen. Ein Array für die Artikel ID, ein Array für die Anzahl und ein weiteres für die Bestellnummer.
Nun hänge ich bei jeden neuen Artikel den ich hinzufüge, die Daten am Array an und lese sie später über einen Index wieder aus. Das funktioniert auch alles ganz gut. Allerdings läuft es auf den Testserver beinahe ohne Probleme und auf dem Webserver sind die Arrays nach 4 - 5 Artikel schon zerschossen. Des Weiteren bekomme ich, wenn ich das Array mit Hilfe der implode Funktion in einen String speichern will folgende Fehlermeldung.
Warning: implode() [function.implode]: Invalid arguments passed in /home/.../on line 42
Dazu hier ein bisschen Code, um verschiedene Sachen zu realisieren. Ich hoffe mir schreibt jemand, das ich einen furchtbaren Denkfehler habe und alles gut wird
Ich habe leider erheblich Probleme mit einer Session. Ich möchte diese nutzen, um eine Bestellliste zu erstellen.
Ich habe also das session_start(); direkt am anfang des Skriptes, die SessionId wird als Cookie gespeichert und meine PHP Version ist die 5.2.9 .
Das Problem ist folgendes: Es soll die Möglichkeit geben, mehrere Artikel über die Sessionvariablen zu speichern. Ich habe mich dazu entschlossen, drei Arrays zu erstellen. Ein Array für die Artikel ID, ein Array für die Anzahl und ein weiteres für die Bestellnummer.
Nun hänge ich bei jeden neuen Artikel den ich hinzufüge, die Daten am Array an und lese sie später über einen Index wieder aus. Das funktioniert auch alles ganz gut. Allerdings läuft es auf den Testserver beinahe ohne Probleme und auf dem Webserver sind die Arrays nach 4 - 5 Artikel schon zerschossen. Des Weiteren bekomme ich, wenn ich das Array mit Hilfe der implode Funktion in einen String speichern will folgende Fehlermeldung.
Warning: implode() [function.implode]: Invalid arguments passed in /home/.../on line 42
Dazu hier ein bisschen Code, um verschiedene Sachen zu realisieren. Ich hoffe mir schreibt jemand, das ich einen furchtbaren Denkfehler habe und alles gut wird

PHP-Code:
<?php
//Titel zur Session hinzufügen
//Wenn keiner der Übergebenen Werte leer ist
if($_POST['id'] != '' && $_POST['quantity'] != ''){
$i = sizeof($_SESSION[books]);
$_SESSION[books][$i] = $_POST[id];
$_SESSION[quantity][$i] = $_POST[quantity];
$_SESSION[orderNr][$i] = 0;
}else if($_POST['id'] != '' && $_POST['quantity'] == ''){ //Wenn keine Menge angegeben wurde
$status = '<p style="color: red;">Es wurde keine Menge angegeben!</p>';
}
//Best-Nr. hinzufügen
if($_REQUEST['method'] == 'addOrderNr') {
$_SESSION[orderNr][$_REQUEST[entry]] = $_POST[orderNr];
$status = '<p style="color: green;">Die Bestellnummer wurde aktualisiert!</p>';
}
//Titel aus der Session entfernen
if($_REQUEST['del'] != ''){
array_splice($_SESSION[books], $_REQUEST['del'], 1);
array_splice($_SESSION[quantity], $_REQUEST['del'], 1);
array_splice($_SESSION[orderNr], $_REQUEST['del'], 1);
$deletedEntry = $_REQUEST['del'] + 1;
$status = '<p style="color: green;">Der ' . $deletedEntry . '. Eintrag wurde entfernt!</p>';
}
//Komplette Titelliste löschen
if($_REQUEST['destroy'] == 1){
unset($_SESSION['books']);
unset($_SESSION['quantity']);
unset($_SESSION['orderNr']);
$status = '<p style="color: green;">Die Liste wurde gelöscht!</p>';
}
if($_REQUEST['method'] == 'addToOrder'){
If(isset($_SESSION['books'])){
$books = implode(' ', $_SESSION['books']);
$quantity = implode(' ', $_SESSION['quantity']);
$orderNr = implode(' ', $_SESSION['orderNr']);
$status = $books;
}else{
$status = 'Die Variable ist nicht gesetzt!';
}
//Datenbankabfrage formulieren
$query = 'UPDATE bestellungen SET books ="' . $books . '", quantity ="' . $quantity . '", orderNr="' . $orderNr . '" WHERE id ="' . $_POST['orders'] . '"';
include ('db_data.php');
mysql_query($query);
//$status = '<p style="color: green;">Die Liste wurde der Bestellung hinzugefügt!</p>';
}
//Workflow aus Bestellung öffnen
if($_REQUEST['method'] == 'reOpen') {
//1. Alten Workflow löschen
unset($_SESSION['books']);
unset($_SESSION['quantity']);
unset($_SESSION['orderNr']);
//2. Bestellung aus der Datenbank laden
$query = 'SELECT * FROM bestellungen WHERE id = 59';
include ('db_data.php');
$result = mysql_query($query);
$row = mysql_fetch_array($result);
//3. Daten in die Arrays laden
$_SESSION['books'] = explode(' ', $row['books']);
$_SESSION['quantity'] = explode(' ', $row['quantity']);
$_SESSION['orderNr'] = explode(' ', $row['orderNr']);
$status = '<p style="color: green;">Die Bestellung wurde geladen!</p>';
}
//Verabreitung der Eingaben
//Erstellen neuer Bestellungen
if($_REQUEST['method'] == 'new'){
$timestamp = time();
$orderNr = date(ymdHi, $timestamp);
$orderDate = date('d.m.Y', $timestamp);
//Datenbankabfrage formulieren
$query = 'INSERT INTO bestellungen (rechnungsNr, Rechnungsdatum, customerId, shipping) VALUES ("' . $orderNr . '", "' . $orderDate . '", "' . $_POST['customer'] . '", "' . $_POST['shipping'] . '")';
//Datenbankverbindung aufbauen
include ('db_data.php');
//Verbindung ausführen
mysql_query($query);
$status = '<p style="color: green;">Neue Bestellung erstellt!</p>';
}
//Löschen von Bestellungen
if($_REQUEST['method'] == 'delOrder'){
//Datenbankabfrage formulieren
$query = 'DELETE FROM bestellungen WHERE id =' . $_REQUEST['id'];
//Datenbankverbindung aufbauen
include ('db_data.php');
//Verbindung ausführen
mysql_query($query);
$status = '<p style="color: green;">Bestellung gelöscht!</p>';
}
?>
<h2>Rechnungsverwaltung</h2>
<fieldset>
<legend>Rechnung erstellen</legend>
<table width="750" cellspacing="10" style="font-size: 10pt;">
<tr>
<td>Empfänger: </td><td><form action="index.php?link=order&method=new" method="POST"><select size="1" name="customer" id="customer">
<?php
//Datenbankabfrage formulieren
$query = ('SELECT id, name FROM customer ORDER BY name DESC');
//Datenbankverbindung aufbauen
include ('db_data.php');
//Verbindung ausführen
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
echo '<option value="' . $row['id'] . '">' . $row['name'] .'</option>';
}
?>
</select></td><td><select size="1" name="shipping" id="shipping"><option>BSV_Libri</option><option>BSV_Umbreit</option><option>BSV_KNV_K</option><option>BSV_KNV_ST</option><option>Parcel</option><option>ParcelExpress</option><option>BookPost</option><option>BookPost_Int</option><option>BookPost_Int_Air</option></select></td><td><input type="submit" name="submit" value="Neue Bestellung anlegen" /></form></td><td><a href="index.php?link=customer">Zur Kundenverwaltung</a></td>
</tr>
</table>
</fieldset>
<br />
<fieldset>
<legend>Titel hinzufügen</legend>
<table width="790" cellspacing="10">
<tr class="center">
<td>Nr.</td><td>id</td><td>ISBN/EAN</td><td>Preis</td><td>Menge</td><td>Best.-Nr.</td><td>Titel entfernen</td>
</tr>
<?php
if($_SESSION['books'] != '') {
for($a = 0 ; $a < sizeof($_SESSION[books]); $a++){
$a++;
echo '<tr class="center"><td width="40">' . $a . '</td>';
$a--;
echo '<td width="40">' . $_SESSION[books][$a] . '</td>';
$query = 'SELECT isbnean, price FROM books WHERE id ="' . $_SESSION[books][$a] . '"';
$row = mysql_fetch_array($result);
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo '<td width="130">' . $row['isbnean'] . '</td>';
echo '<td width="60">' . $row['price'] . '</td>';
echo '<td>' . $_SESSION[quantity][$a] . '</td>';
echo '<td><form action="index.php?link=order&method=addOrderNr&entry=' . $a . '" method="post"><input type="text" name="orderNr" size="15" value="' . $_SESSION[orderNr][$a] . '" /><input type="submit" value="hinzufügen" /></form></td>';
echo '<td width="50"><form action="index.php?link=order&del=' . $a++ . '" method="post"><input type="submit" value="entfernen" /></form></td></tr>';
$a--;
}
}
?>
</table>
<table width="790" cellspacing="10">
<tr>
<td>Liste zur Bestellung: </td>
<td><form action="index.php?link=order&method=addToOrder" method="POST">
<select size="1" name="orders" id="orders">
<?php
//Datenbankabfrage formulieren
$query = ('SELECT * FROM bestellungen ORDER BY rechnungsNr DESC');
//Datenbankverbindung aufbauen
include ('db_data.php');
//Verbindung ausführen
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
echo '<option value="' . $row['id'] . '">' . $row['rechnungsNr'] .'</option>';
}
?>
</select></td>
<td><input type="submit" name="submit" value="hinzufügen" /></form></td><td>oder</td><td><form action="index.php?link=order" method="post"><input type="hidden" name="destroy" value="1" /><input type="submit" value="Liste löschen" /></form></td>
</tr>
</table>
</fieldset>
<br />
<fieldset>
<legend>Aktive Bestellungen</legend>
<table width="790" cellspacing="10" class="center" style="font-size: 10pt;">
<tr>
<td>Rechnung Nr./<br />Rechnungsdatum</td><td>Artikel</td><td>Menge</td><td>Empfänger / <br /> Versandart</td><td colspan="4">Aktionen</td>
<tr>
<?php
//Datenbankabfrage formulieren
$query = ('SELECT * FROM bestellungen ORDER BY rechnungsNr DESC ');
//Datenbankverbindung aufbauen
include ('db_data.php');
//Verbindung ausführen
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
echo '<tr><td colspan="8"><hr /></td></tr>';
$books = str_replace(' ','<br />', $row['books']);
$quantity = str_replace(' ','<br />', $row['quantity']);
echo '<tr><td style="font-weight: bold; font-size: 12pt;">' . $row['rechnungsNr'] . '</td><td rowspan="2">' . $books . '</td><td rowspan="2">' . $quantity . '</td><td>';
$query2 = 'SELECT name FROM customer WHERE id=' . $row['customerId'];
$result2 = mysql_query($query2);
$row2 = mysql_fetch_array($result2);
echo $row2['name'] . '</td><td rowspan="2" width="35"><a href="code/do_order.php?id=' . $row['id'] . '" title="PDF erzeugen"><img src="system_image/pdf_icon.png" alt="Logo des PDF-Formats" width="32" /></a></td><td rowspan="2" width="35"><a href="code/drop_ship_order.php?id=' . $row['id'] . '" title="XML erzeugen"><img src="system_image/xml_icon.png" alt="Logo des PDF-Formats" width="32" /></a></td><td rowspan="2" width="35"><a href="index.php?link=order&method=reOpen&id=' . $row['id'] . '" title="Bestellung bearbeiten"><img src="system_image/edit_icon.png" alt="Logo zum bearbeiten einer Bestellung" width="32" /></a></td><td rowspan="2" width="35"><a href="index.php?link=order&method=delOrder&id=' . $row['id'] . '" title="Bestellung löschen"><img src="system_image/trash_icon.png" alt="Logo zum löschen einer Bestellung" width="32" /></a></td></tr>';
echo '<tr><td>' . $row['rechnungsDatum'] . '</td><td>' . $row['shipping'] . '</td></tr>';
}
?>
</table>
</fieldset>
Kommentar