Variablenübergabe vom prompt() Fenster und php Seite

darthkue

Grünschnabel
Hallo liebe Community,

ich steh mal wieder vor einem Problem bei dem ich keine Lösung finde. Ich bin leider noch nicht so ganz mit dem Thema PHP und JS bewandert, deshalb seit bitte gnädig! ;-)

Und zwar geht es um folgendes. Ich habe folgenden Button in der index.php

Button Code:
HTML:
<form action="./termin_canceled.php">
	<input type=hidden id="termin_id" name="termin_id" value="' .htmlspecialchars( $datensatz['c_id'] ). '">
	<input type=hidden id="spieler_id" name="spieler_id" value="' .$_SESSION["user_id"]. '">
	<input onclick="Absagegrund(); return false" class="Button4" type="submit" id="abgesagt" name="abgesagt" value="Absagen">
</form>

beim daraufklicken öffnet sich folgendes prompt Fenster

JS prompt Code:
Code:
<script type="text/javascript">
   function Absagegrund () 
	{
		Check = prompt("Gib bitte den Grund fuer deine Absage ein", "");
		if (!!Check)
		{
		if (Check != "") 
		{
			self.location.href="./termin_canceled.php";
		} 
		}
		if (Check == "")
		{
			alert("Du musst ein Grund fuer deine Absage eingeben");
		}
      }
</script>

Bei dem der User eine Eingabe machen muss. Wenn er diese gemacht hat, dann kommt er auf die termin_canceled.php seite in der die mySQL Datenbank upgedated werden soll.

termin_canceled.php:
PHP:
// Maskierende Slashes aus GET entfernen
    $_GET = get_magic_quotes_gpc() ? array_map( 'stripslashes', $_GET ) : $_GET;

//Variablen füllen
	$termin_id = (int) $_GET['termin_id'];
	$spieler_id = (int) $_GET['spieler_id'];
	$absagegrund = ?;

//Angaben zum mySQL Server
	$db_host = "localhost";
	$db_user = "***";
	$db_pass = "***";
	$db_name = "***";
	
// Verbindung oeffnen und Datenbank ausweahlen
    $conID = mysql_connect( $db_host, $db_user, $db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" );
    if ($conID)
    {
        mysql_select_db( $db_name, $conID );
    }
    
//Update der Daten in der DB
	mysql_query("UPDATE v2_kalender_teilnehmer SET abgesagt = '1', absagegrund = '".$absagegrund."' WHERE spieler_id = '".$spieler_id."' AND termin_id = '".$termin_id."'");

    mysql_close($con);

Nun ist es mir ein Rätsel wie ich die drei Variablen

$spieler_id
$termin_id
$absagegrund

korrekt an die termin_canceled.php übergeben soll, damit es klappt. Ich hoffe ihr könnt mir helfen.
 
Hallöle,

mich würde in diesem Zusammenhang erstmal interessieren, wie denn die Weiterleitung vom Prompt aus zu der termin_canceled.php aussieht (muss nicht nur der Ausschnitt sein - du kannst auch den ganzen Code posten).

Da können wir dann erstmal schauen, wie du das Problem bisher angegangen bist und noch etwas zurecht basteln ;)
 
Hallo Alex_T,

danke für die schnelle Anwort..!

also die Weiterleitung vom Prompt, wenn die Eingabe korrekt war passiert mit folgendem Code im Javascript Bereich

Code:
self.location.href="./termin_canceled.php";

nein lieber nicht sonst bekomm ich bestimmt den DAU Preis des Monats! :-D
 
Grüße nochmal,

verkauf dich doch nicht unter Wert (irgendwie muss man ja mal anfangen ;)).

Also, um einen URL-Parameter mit GET über php auszulesen, muss es natürlich erstmal welche geben...aber wie sieht das Ganze aus? Folgendermaßen (mal an einer Adresse erläutert):

http://www.meineSeite.de/termin_canceled.php?para1=test&para2=nocheintest

wir schlüsseln das Ganze mal noch ein wenig auf.....
? -> ab hier folgen an die eigentliche Adresse angehängte Parameter
& -> das ist ein "Trennzeichen", welches die Parameter voneinander trennt - logisch :p
para1
para2 -> das sind die "Namen" der Parameter, über welche man dann auf deren Inhalt zugreifen kann (in deinem Fall müssten die termin_id und spieler_id etc. heißen)
test
nocheintest -> das sind die eigentlichen Werte die dem jeweiligen Parameter über "=" zugewiesen wurden (also der Inhalt der Parameter)

Tja soweit so gut - nun müsste das ganze nur noch auf deine Wünsche zurecht geschnitten werden.
Das Problem dürfte darin bestehen, dass du die Weiterleitung nachdem das Formular ausgefüllt wurde über JS abwickelst -> das Formular würde dies aber auch tun:

Code:
<form action="./termin_canceled.php">
Dabei sollte allerdings noch die Übertragungsmethode angegeben werden.
Es empfiehlt sich hierbei POST zu benutzen, da die URL dabei nicht direkt maipuliert werden kann:

Code:
<form action="./termin_canceled.php" method="POST">

Aber egal das war nur mal ein kleiner Abschweifer (sollte auch mit der JS-Lösung funktionieren).
Du müsstest deinen JS-Code mal folgendermaßen abändern:

Code:
<script type="text/javascript">
   function Absagegrund () 
    {
        var Check = prompt("Gib bitte den Grund fuer deine Absage ein", "");
        if (Check)
        {
        if (Check != "") 
        {
            self.location.href="./termin_canceled.php?absagegrund=" + Check;
        } 
        }
        if (Check == "")
        {
            alert("Du musst ein Grund fuer deine Absage eingeben");
        }
      }
</script>

und dann könntest du den Parameter einfach per GET innerhalb der termin_canceled.php holen:

PHP:
$absagegrund = $_GET['absagegrund'];

Noch ein Hinweis zur Logiknutzung: !!Check -> du würdest Check hier 2 Mal negieren, weshalb sich die Negationen aufheben und du einfach nur Check schreiben kannst.

Ich hoffe das ließt überhaupt noch jemand, so lang wie das geworden ist :D.
Hoffe trotzdem, dass ich dir helfen konnte. Falls es noch Probleme gibt, einfach nochmal melden.

Ansonsten noch einen schönen Abend.
 
Hey super vielen Dank für die tolle Erklärung!!

Ich hab es nun so angepasst wie du es oben geschrieben hast. Die Übergaben von $absagegrund mit dem JS klappt auch wunderbar, nur werden die Werte der beiden anderen Variablen $termin_id und $spieler_id leider nicht mit übergeben und dadruch wird die db auch nicht geupdated. Muss ich die beiden Variablen zuerst irgendwie zu dem prompt Fenster übergeben und von da aus weiter zu der termin_canceled.php schicken, wenn das überhaupt möglich ist...oder wie kann man das Problem am besten lösen?
 
Hallo nochmal,

das war genau der springende Punkt, den ich kurz angerissen hatte (das Skript an sich leitet ja schon weiter, das Formular würde dies aber auch tun. Das Skript wird nun aber "eher" abgearbeitet, weshalb die Weiterleitung über das Formular nicht mehr stattfindet, sondern nur noch über das Skript abgewickelt wird.

In dem Fall musst du den JS-Code einfach ein wenig anpassen, indem du 2 Funktionsparameter mit einbaust und die Adresse veränderst:

Code:
<script type="text/javascript">
   function Absagegrund (termin_para, spieler_para) 
    {
        var Check = prompt("Gib bitte den Grund fuer deine Absage ein", "");
        if (Check)
        {
        if (Check != "") 
        {
            self.location.href="./termin_canceled.php?absagegrund=" + Check + "&termin_id=" + termin_para + "&spieler_id=" + spieler_para;
        } 
        }
        if (Check == "")
        {
            alert("Du musst ein Grund fuer deine Absage eingeben");
        }
      }
</script>

So dürfte das jetzt funktionieren, jedoch muss die Funktion nun beim Aufruf auch mit den entsprechend erwarteten Parametern gefüttert werden:

PHP:
<input onclick="Absagegrund('<?php echo"htmlspecialchars($datensatz['c_id'])"; ?>', '<?php echo"$_SESSION['user_id']";?>'); return false" class="Button4" type="submit" id="abgesagt" name="abgesagt" value="Absagen">

Das sieht jetzt nicht unbedingt schön aus und geht bestimmt auch eleganter, aber es funktioniert ;).
 
Zurück