PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zwei button auf der form mit unterschiedlichen zielen


Haraldo
07.09.2009, 07:25:13
Hallo, ich bin neu und zwar nicht nur hier sondern auch in php ich programmiere seit jahren warenwirtschaftssystem und hatt bisher wenig mt php zu tun. bevor ich gesteinigt werde ich lese seit 5 tagen mich durch alle foren und beiträge und konnte mein problem nicht lösen. hier nun mein problem:
ich habe schad1.php auf der eine Form ist die ich mit submit sende. ich habe allerding zwei button drauf einen 'zurück' und einen 'weiter' die gesamt eingaben bestehen aus 4 seiten (schad1.php,schad2.php usw) und der user soll in den seiten vor und zurück gehen können.
Die eingaben speichere ich unter session variable am ende der letzten seite gibt es den button senden erst dieser soll die eintragungen in die datenbank machen. was mir nicht gelingt ist das zurück und weiter er ruft mir nie die entsprechende seite auf sondern nur sich selbst. kann mir jemand helfen.
meine form action:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" name="Formular" target="_self"
onsubmit="return check(knopf);">

die function check knopf
function check(btn){
if(btn=="zuru"){
reload();
}
if(btn=="weit"){
eingaben_ueberpruefen();
}

die function eingabe überprüfen
function eingaben_ueberpruefen(){
var mail = document.Formular.aanspr.value;

if (document.Formular.sdatum.value.length < 2)
{
alert("Sie haben noch kein Unfalldatum eingegeben!")
document.Formular.sdatum.focus();
return false;
}

else
return true;
}

die eingabe buttons
<input type="submit" value="zurück" name="zuru" onMouseDown="knopf=this.name">
<input type="submit" value="weiter" name="weit" onMouseDown="knopf=this.name">

das submitt
if ($weit == "weiter") {
// hier die variablen zur session-variablen machen
// header('Location: http://'.$_SESSION['hostname'].($_SESSION['path'] == '/' ? '' : $_SESSION['path']).'/schad2.php');
header('Location: schad2.php');
// include("schad2.php");
// exit;
}

kann mir bitte jemand auf die sprünge helfen. ich bin schon am verzweifeln

Haraldo
08.09.2009, 11:57:58
Vielleicht war meine Frage zu blöd gestellt. Aber mittlerweile habe ich es auch gelöst. aber hier ein anderes Problem.
ich habe folgende Seiten.
login.php
schad1.php
schad2.php
schad3.php
schad4.php
in der login.php fülle ich die Session Variablen:

$_SESSION['username'] = $username;
$_SESSION['lastlogd'] = $row->lastlogd;

diese werden auch auf allen Seiten mit
if (isset($_SESSION["lastlogd"]))
echo "am " . $_SESSION["lastlogd"]." um ". $_SESSION["lastlogt"]." Uhr";
else
echo "Unbekannt";

richtig dargestellt.
Aber wenn ich auf schad1.php eine Variable hinzufügen will steht diese auf den anderen seiten nicht zur Verfügung.
hier das hinzufügen in der schad1 in die Sesssion
$pdienst = $_POST['pdienst'];
$_SESSION['pdienst'] = $pdienst;

die ausgabe auf schad3
<?php echo $_SESSION["pdienst"];?>
dies funktioniert nicht. Session ID ist gleich habe ich mir auf allen Seiten ausgeben lassen.
Kann mir jemand dabei helfen. Bitte

cortex
08.09.2009, 12:09:03
Vielleicht war meine Frage zu blöd gestellt.

nicht doch... das war schon ok. tip am rande: $_SERVER['PHP_SELF'] sollte wegen einer alten sicherheitslücke nicht verwendet werden. statt dessen: $_SERVER['$SCRIPT_NAME'].

wenn ich auf schad1.php eine Variable hinzufügen will steht diese auf den anderen seiten nicht zur Verfügung.

kann ich aufgrund deines dargestellten codes nicht nachvollziehen. möglicherweise wird

$pdienst = $_POST['pdienst'];
$_SESSION['pdienst'] = $pdienst;

in schad1.php gar nicht ausgeführt?

cx

Haraldo
08.09.2009, 13:51:54
Vielen Dank für deine schnelle Antwort:
hier noch mal näher:
die schad1.php
vor dem header
<?php
session_start();
include('auth.php');
error_reporting( E_ALL );
?>

vor dem formular
<?php
$weit = $_POST['weit'];
$zuru = $_POST['zuru'];
$pdienst = $_POST['pdienst'];
$_SESSION['pdienst'] = $pdienst;

if($_POST["sart"] == "Haftpflichtschaden")
$target="schad2.php";
else
$target="schad3.php";

if ($weit == "weiter") {
$msg = "<meta http-equiv=\"Refresh\" content=\"0;url=$target\">";
echo $msg;
}

if ($zuru == "zurück") {
$target="schadenmeld.php";
$msg = "<meta http-equiv=\"Refresh\" content=\"0;url=$target\">";
echo $msg;
exit;
}

else { ?>

<script type="text/javascript">
function eingaben_ueberpruefen(){
var mail = document.Formular.aanspr.value;

if (document.Formular.sdatum.value.length < 2)
{
alert("Sie haben noch kein Unfalldatum eingegeben!")
document.Formular.sdatum.focus();
return false;
}

else
return true;
}
</script>


hier die ausgabe ind schad2.php
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" name="Formular" target="_self"
onsubmit="eingaben_ueberpruefen();">
// input felder usw
<?php echo session_id();?>
<?php echo $_SESSION["pdienst"];?>
echo $_SESSION['username'];
</form>
<?php
}
?>


session_id(); wird ausgegeben
$_SESSION["pdienst"] nicht wird in schad1.php gesetzt
$_SESSION['username'] wird ausgegeben wird in login.php gesetzt
wenn ich die $_SESSION["pdienst"] in der login.php testweise fest vorbelege wird auch sie in schad2.php dargestellt dargestellt wenn ich sie allerdings in schad1.php belege wird sie in schad2.php nicht dargestellt.
Ich hoffe es ist verständlich was ich meine.

vt1816
08.09.2009, 14:28:50
Lass Dir mal das gesamte Array $_SESSION[] mit var_dump() an den verschieden Stellen ausgeben. Gerade auch nach der Initialiseirung bzw. dem Setzten von $_SESSION['pdienst'].

Was erhältst Du?

Haraldo
08.09.2009, 14:39:50
hallo danke,
ich habe es so glaube ich gefunden, ich habe das setzten verändert von
$pdienst = $_POST['pdienst'];
$_SESSION['pdienst'] = $pdienst;

auf

if ($_POST['pdienst']) $_SESSION['pdienst'] = $_POST['pdienst'];


jetzt wird alles richtig dargestellt. nur sehe ich den unterschied nicht ausser das bei der ersten version über eine lokale variable gegangen wird. weis jemand warum das so ist. Ich will ja nicht blöd sterben.

vt1816
08.09.2009, 14:51:36
[...]
if ($_POST['pdienst']) $_SESSION['pdienst'] = $_POST['pdienst'];



Besser:
if (isset($_POST['pdienst'])) $_SESSION['pdienst'] = $_POST['pdienst'];

Haraldo
09.09.2009, 10:31:03
if (isset($_POST['pdienst'])) $_SESSION['pdienst'] = $_POST['pdienst'];
vielen dank habe ich geändert.
habe schon wieder das nächste problem:
ich speichere in die tabelle wie folgt:
$verbindung = mysql_connect("localhost", "db222222" , "passwort");
if (!$verbindung){die('Kann keine Verbindung herstellen: ' . mysql_error());}
mysql_select_db("db222222") or die ("Datenbank konnte nicht ausgewählt werden");
$eintrag = "INSERT INTO abwickl (asart) values ('" . $_SESSION['sart'] . "')";
$eintragen = mysql_query($eintrag);
mysql_close($verbindung);

das klappt, aber leider zu gut jeder datensatz wird zweimal gespeichert. Ich sehe nicht warum.

vt1816
09.09.2009, 11:06:59
Besser:
$verbindung = mysql_connect("localhost", "db222222" , "passwort");
if (!$verbindung)
{
die('Kann keine Verbindung herstellen: ' . mysql_error());
}
else
{
mysql_select_db("db222222") or die ("Datenbank konnte nicht ausgewählt werden");
$eintrag = "INSERT INTO abwickl (asart) values ('" . $_SESSION['sart'] . "')";
$eintragen = mysql_query($eintrag);
mysql_close($verbindung);
}

Haraldo
10.09.2009, 07:47:09
vielen Dank vt1816 sieht wirklich besser aus, nur behebt das leider mein Problem noch nicht es wird nach wie vor jeder Datensatz doppelt gespeichert. Es gibt im ganzen Code nur diese eine Stelle mit einem Insert into ich verstehe das nicht.

Haraldo
10.09.2009, 08:26:52
es wird immer mysteriöser, wen ich mit firefox reingehe werden alle Einträge doppelt gespeichert (auch mit zwei unterschiedlichen ID's die auf auto_increment stehen).
Wenn ich jetzt mit Internetexplorter reingehe wird der Eintrag auch nur einmal gespeichert.
Also ruft der Firefox die Seite irgendwie noch mal auf.
Frage wie kann ich das verhindern?

vt1816
10.09.2009, 11:46:03
All das kann wenig aber auch viele Ursachen haben.

Da nach wie vor immer nur ein ganz kleiner Teil des Codes hier gepostet wird - aus welchem Grund auch immer, ist es auch schwer hier eine konkrete Aussage zu formulieren. Es ist nicht ersichtlich, welche Datei welche andere Datei aufruft, daher können auch hier keine entsprechenden Schlußfolgerungen gezogen werden.

Sorry...