[PHP/JS/HTML] selectbox + andere selectbox abhängig von auswahl mit inhalt füllen

Timmey92

Commodore
Registriert
Okt. 2008
Beiträge
4.567
Moin!

Habe hier ein kleines Problem.
Ich möchte ein bestehndes Script (wurde vor Jahren erstellt ...) verändern.
Es dient als eine Art Einkaufsscript mit Paypal.
Normalerweise gibt es mehrere Select/Textboxen:
Select Server:
Select Reward:
Character Name:
Currency:
Costs:

Je nach auswahl von "Select Server" wird dann die Select Reward box mit inhalt gefüllt (SQL Query).
Ich möchte nun eine weitere Box hinzufügen: Reward Category um das ganze ein wenig übersichtlicher zu gestalten.
Leider gibt $_GET['category'] anscheinend garnix zurück, da mein SQL query immer ein leeres Ergebnis zeigt.
Wäre nett wenn mir da jemand helfen könnte.


Code:
<?php 

	include_once("resources/config.php");
	include_once("../ugc_config.php");	
	switch($_GET['do'])
	{
	case "rewards":
		$Con = mysql_connect(SQL_WWWHOST,SQL_WWWUSER,SQL_WWWPASS);
		mysql_select_db(SQL_SESSIONDB,$Con);
		$Id = mysql_real_escape_string($_GET['id']);
        

		$cat = mysql_real_escape_string($_GET['category']); 
		$res = mysql_query("SELECT * FROM ".TABLE_REWARDS." WHERE server='{$Id}' AND active=1 AND price > 0 AND cat_id='{$cat}' ORDER BY `order`, `name`");
		
		$first = true;
		while($row = mysql_fetch_array($res))
		{
			if(!$first) { $Rewards.="\n\n"; }
			$first=false;
			$row['price'] = $row['price'] * DISCOUNT_MULTIPLIER;
			$Rewards.="{$row['id']}\n{$row['name']}\n{$row['price']}\n{$row['description']}";
		}
		mysql_close($Con);
		echo $Rewards;
		die;
		break;
	case "checkcharacter":
		$Con = mysql_connect(SQL_WWWHOST,SQL_WWWUSER,SQL_WWWPASS);
		mysql_select_db(SQL_SESSIONDB,$Con);
		$Character = mysql_real_escape_string($_GET['name']);
		$Server = mysql_real_escape_string($_GET['id']);
		$res = mysql_query("SELECT * FROM ".TABLE_SERVERS." WHERE id='$Server' AND active=1");
		$res = mysql_fetch_array($res);
		$Con2 = mysql_connect($res['host'],$res['username'],$res['password']);
		mysql_select_db($res['database'],$Con2);
		$res = mysql_query("SELECT * FROM ".TABLE_CHARACTERS." WHERE name='$Character'",$Con2);
		$res = mysql_fetch_array($res);
		if($res==NULL) { echo "0"; mysql_close($Con); mysql_close($Con2); die; }
		echo $res['guid'];
		mysql_close($Con);
		mysql_close($Con2);
		die;
	case "getconversion":
		echo getRate($_GET['code']);
		die;
		break;
	}
	
	function getRate($code)
	{
		$page = file_get_contents("http://www.xe.com/ucc/convert.cgi?Amount=1&From=EUR&To=$code");
		$pos = strpos($page, "1 EUR = ");
		$rate = substr($page , $pos+8,7);
		if ($pos==False)
			return "string not found";
		else
			return $rate;
	}
	
	//Generate server list.
	$Con = mysql_connect(SQL_WWWHOST,SQL_WWWUSER,SQL_WWWPASS);
	mysql_select_db(SQL_SESSIONDB,$Con);
	$res = mysql_query("SELECT * FROM ".TABLE_SERVERS." WHERE active = '1' ORDER BY id ASC");
	while($row = mysql_fetch_array($res))
	{
		$Servers.="<option value='{$row['id']}'>{$row['name']}</option>";
	}
	
	//Generate currency conversion list
	$query = "SELECT * FROM currency";
	$result = mysql_query($query,$Con);
	while ($row = mysql_fetch_array($result))
	{
		$Currencies.="<option value='{$row['code']}'>{$row['name']}</option>";
	}
	mysql_close($Con);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script src="resources/xpath.js" type="text/javascript"></script>
<script src="resources/SpryUtils.js" type="text/javascript"></script>
<script src="resources/SpryData.js" type="text/javascript"></script>
<script language="javascript">
	var Server;
	var Reward;
	var Rewards = new Array();
	var Character;
	var Rate = 1; //default is euros
	var Price;
	var Description;
	var Submit = false;
	
	function GetRewards()
	{
		//document.getElementById("submit").disabled="true";
		Submit = false;
		R.options.length=0;
		Rewards.length=0;
		document.getElementById("rewardinfo").style.visibility="visible";
		Spry.Utils.loadURL("GET","form.php?do=rewards&id="+S.value,false,function(Req)
		{
			var r = Req.xhRequest.responseText.split("\n\n");
			for(x in r)
			{
				var rr = r[x].split("\n");
				Rewards[rr[0]]=new Object();
				Rewards[rr[0]].Name = rr[1];
				Rewards[rr[0]].Price = rr[2];
				Rewards[rr[0]].Description = rr[3];
				R.options[x] = new Option(rr[1],rr[0]);
			}
		});
		document.getElementById("rewardinfo").style.visibility="hidden";
		Submit=true;
		GetPrice();
		CheckCharacter();
	}
	
	function GetPrice()
	{
		Submit=false;
		// get selected code from currency drop down menu
		var code =  document.getElementById("currency").value;
		LoadConversionRate(code); // sets the value of the variable: Rate
		var price = (Rewards[R.value].Price * Rate);
		P.value =  price.toFixed(2) + " " + code;
		D.value = Rewards[R.value].Description;
		Submit=true;
	}
	
	function CheckCharacter()
	{
		Submit=false;
		document.getElementById("charloading").style.display="block";
		document.getElementById("charfound").style.display="none";
		document.getElementById("charnotfound").style.display="none";
		Spry.Utils.loadURL("GET","form.php?do=checkcharacter&name="+C.value+"&id="+S.value,false,function(Req)
		{
			var r = Req.xhRequest.responseText;
			if(r!="0")
			{
				document.getElementById("charloading").style.display="none";
				document.getElementById("charfound").style.display="block";
				Character = r;
				Submit = true;
			}
			else
			{
				document.getElementById("charloading").style.display="none";
				document.getElementById("charnotfound").style.display="block";
			}
		});
	}
	
	function SubmitCheck()
	{
		if(Submit)
		{
			document.getElementById('item_name').value=Rewards[R.value].Name;
			document.getElementById('item_number').value=S.value+'-'+R.value+'-'+Character;
			/* Stuff to convert currency in paypal
			var price = (Rewards[R.value].Price * Rate);
			document.getElementById('amount').value=price.toFixed(2);*/
			document.getElementById('amount').value= Rewards[R.value].Price; // comment out if you want paypal in selected currency
			//uncomment line below for paypal in selected currency
			//document.getElementById('currency_code').value = document.getElementById("currency").value;
			return true;
		}
		else
		{
			return false;
		}
	}
	
	function LoadConversionRate(code)
	{
		document.getElementById("currencyrates").style.visibility="visible";
		Spry.Utils.loadURL("GET","form.php?do=getconversion&code="+code,false,function(Req)
		{
			var r = Req.xhRequest.responseText;
			Rate = r;
		});
		document.getElementById("currencyrates").style.visibility="hidden";
	}
</script>
<LINK REL=StyleSheet HREF="../style.css" TYPE="text/css" MEDIA=screen>
	<!-- Instant rewards are temporarily disabled while we update our software. -->
  <table width = "60">
    <tr>
      <td>
      	<table width="300" border="0" cellspacing="5px">
      		<tr>
      			<td width="121">Select Server:</td>
      			<td width="150"><select name="server" id="server" size="1" style="width:230px;" onchange="GetRewards();"><?php echo $Servers; ?></select></td>
      			<td width="75" id="serverinfo"></td>
      		</tr>
		<tr>
      			<td>Reward Category:</td>
      			<td><select name="category" id="category" size="1" style="width:230px;" onchange="GetRewards();">
			<option value='1'>UGC General</option></select></select></td>    
			<td id="rewcategory" style="visibility:hidden;"><img src="resources/loading.gif" /></td>  			
      		</tr>

      		<tr>
      			<td>Select Reward:</td>
      			<td><select name="reward" id="reward" size="1" style="width:230px;" onchange="GetPrice();">
			</td>
      			<td id="rewardinfo" style="visibility:hidden;"><img src="resources/loading.gif" /></td>
      		</tr>
      		<tr>
      			<td>Character Name:</td>
      			<td><input name="character" id="character" type="text" maxlength="12" style="width:230px;" onblur="CheckCharacter();"/></td>
      			<td id="characterinfo"><img id="charloading" src="resources/loading.gif" /><img src="resources/ok.png" id="charfound" /><img src="resources/notok.png" id="charnotfound" /></td>
      		</tr>
            <tr>
      			<td>Currency:</td>
      			<td><select name="currency" id="currency" size="1" style="width:230px;" onchange="GetPrice();"><?php echo $Currencies; ?></select></td>
      			<td id="currencyrates" style="visibility:hidden;"><img src="resources/loading.gif"/></td>
      		</tr>
      		<tr>
      			<td>Minimum Cost:</td>
      			<td><input type="text" size="8" name="price" id="price" readonly="readonly" /></td>
      			<td></td>
      		</tr>
      		<tr>
      			<td><form target="paypal" action="https://<?php echo PAYPAL_ADDRESS; ?>/cgi-bin/webscr" method="post" onsubmit="return SubmitCheck();">
      				<input id="submit" type="image" src="https://www.paypal.com/en_US/i/btn/btn_cart_SM.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
      				<input type="hidden" name="notify_url" value="<?php echo FORM_LOCATION; ?>">
      				<input type="hidden" name="add" value="1">
      				<input type="hidden" name="cmd" value="_cart">
      				<input type="hidden" name="business" value="<?php echo RECEIVER_EMAIL; ?>">
      				<input type="hidden" id="item_name" name="item_name" value="">
      				<input type="hidden" id="item_number" name="item_number" value="">
      				<!-- ATTENTION HACKERS: Don't try changing anything here, it won't work, you won't receive a reward, and we'll keep your money. -->
      				<input type="hidden" id="amount" name="amount" value="">
      				<input type="hidden" name="no_shipping" value="0">
      				<input type="hidden" name="no_note" value="1">
      				<input type="hidden" id="currency_code" name="currency_code" value="<?php echo CURRENCY_CODE; ?>">
      				<input type="hidden" name="lc" value="US">
      				<input type="hidden" name="bn" value="PP-ShopCartBF">
      				</form></td>
      			<td></td>
      			<td></td>
      		</tr>
      	</table>
      </td>
      <td>
        <table>
          <tr>
          	<td>Reward Description</td>
          </tr>
          <tr>
      			<td><textarea name="description" id="description" cols="20" rows="5" readonly="readonly"></textarea></td>
      		</tr>
      	</table?
      </td>
    </tr>
  </table>
Note:  All rewards are mailed to your character. If you didn't receive your reward after 10 minutes, please contact an administrator.
<script language="javascript">
	var S = document.getElementById("server");
	var CAT = document.getElementById("category");
	var R = document.getElementById("reward");
	var C = document.getElementById("character");
	var P = document.getElementById("price");
	var D = document.getElementById("description");
	GetRewards();
</script>
 
Ich habe (auf die schnelle) in dem Codeausschnitt nicht erkennen können, wo dort per GET überhaupt eine Variable 'category' übergeben wird.

Dort gibt es ein
Code:
<select name="category" id="category" size="1" style="width:230px;" onchange="GetRewards();">

Die JS-Funktion "GetRewards()" scheint eine URL mit GET-Variablen zu laden, generiert aber kein 'category=...' in der URL.
Code:
Spry.Utils.loadURL("GET","form.php?do=rewards&id="+S.value,false,function(Req)
     {    
     [..]

Ich glaube das dort angesetzt werden muss. Wobei dir ein wenig überlassen ist wie...

Mein undurchdachter Vorschlag:
Code:
function GetRewards(choosen_cat){
   [..]
   Spry.Utils.loadURL("GET","form.php?do=rewards&id="+S.value+"&category="+choosen_cat,false,function(Req)
   [..]
   }

Code:
<select name="category" id="category" size="1" style="width:230px;" onchange="GetRewards(this.value);">

Bin mit aber nicht sicher, ob das "this.value" funktioniert, da ja eigentlich das Element "<option>" den Wert beinhaltet. Ist aber ein Ansatz.

Ich hoffe ich bin nicht zu verwirrend... :D
 
Okay danke, ich probier das mal so aus und berichte ;)
Ergänzung ()

hab deinen ansatz ein wenig abgewandelt (statt this.value CAT.value)
jetzt funktioniert es TEILWEISE. Bei seitenaufruf gehts nicht, in der 2. selectbox kommt "undefined".
Ändere ich aber die erste "Select server", dann funktioniert es einwandfrei.

Code:
<?php 

	include_once("resources/config.php");
	include_once("../ugc_config.php");	
	switch($_GET['do'])
	{
	case "rewards":
		$Con = mysql_connect(SQL_WWWHOST,SQL_WWWUSER,SQL_WWWPASS);
		mysql_select_db(SQL_SESSIONDB,$Con);
		$Id = mysql_real_escape_string($_GET['id']);
        

		$cat = mysql_real_escape_string($_GET['category']); 
		$res = mysql_query("SELECT * FROM ".TABLE_REWARDS." WHERE server='{$Id}' AND active=1 AND price > 0 AND cat_id='{$cat}' ORDER BY `order`, `name`");
	

$first = true;
		while($row = mysql_fetch_array($res))
		{
			if(!$first) { $Rewards.="\n\n"; }
			$first=false;
			$row['price'] = $row['price'] * DISCOUNT_MULTIPLIER;
			$Rewards.="{$row['id']}\n{$row['name']}\n{$row['price']}\n{$row['description']}";
		}
		mysql_close($Con);
		echo $Rewards;
		die;
		break;
	case "checkcharacter":
		$Con = mysql_connect(SQL_WWWHOST,SQL_WWWUSER,SQL_WWWPASS);
		mysql_select_db(SQL_SESSIONDB,$Con);
		$Character = mysql_real_escape_string($_GET['name']);
		$Server = mysql_real_escape_string($_GET['id']);
		$res = mysql_query("SELECT * FROM ".TABLE_SERVERS." WHERE id='$Server' AND active=1");
		$res = mysql_fetch_array($res);
		$Con2 = mysql_connect($res['host'],$res['username'],$res['password']);
		mysql_select_db($res['database'],$Con2);
		$res = mysql_query("SELECT * FROM ".TABLE_CHARACTERS." WHERE name='$Character'",$Con2);
		$res = mysql_fetch_array($res);
		if($res==NULL) { echo "0"; mysql_close($Con); mysql_close($Con2); die; }
		echo $res['guid'];
		mysql_close($Con);
		mysql_close($Con2);
		die;
	case "getconversion":
		echo getRate($_GET['code']);
		die;
		break;
	}
	
	function getRate($code)
	{
		$page = file_get_contents("http://www.xe.com/ucc/convert.cgi?Amount=1&From=EUR&To=$code");
		$pos = strpos($page, "1 EUR = ");
		$rate = substr($page , $pos+8,7);
		if ($pos==False)
			return "string not found";
		else
			return $rate;
	}
	
	//Generate server list.
	$Con = mysql_connect(SQL_WWWHOST,SQL_WWWUSER,SQL_WWWPASS);
	mysql_select_db(SQL_SESSIONDB,$Con);
	$res = mysql_query("SELECT * FROM ".TABLE_SERVERS." WHERE active = '1' ORDER BY id ASC");
	while($row = mysql_fetch_array($res))
	{
		$Servers.="<option value='{$row['id']}'>{$row['name']}</option>";
	}
	
	//Generate currency conversion list
	$query = "SELECT * FROM currency";
	$result = mysql_query($query,$Con);
	while ($row = mysql_fetch_array($result))
	{
		$Currencies.="<option value='{$row['code']}'>{$row['name']}</option>";
	}
	mysql_close($Con);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script src="resources/xpath.js" type="text/javascript"></script>
<script src="resources/SpryUtils.js" type="text/javascript"></script>
<script src="resources/SpryData.js" type="text/javascript"></script>
<script language="javascript">
	var Server;
	var Reward;
	var Rewards = new Array();
	var Character;
	var Rate = 1; //default is euros
	var Price;
	var Description;
	var Submit = false;
	
	function GetRewards(choosen_cat)
	{
		//document.getElementById("submit").disabled="true";
		Submit = false;
		R.options.length=0;
		Rewards.length=0;
		document.getElementById("rewardinfo").style.visibility="visible";
		Spry.Utils.loadURL("GET","form.php?do=rewards&id="+S.value+"&category="+choosen_cat,false,function(Req)
		{
			var r = Req.xhRequest.responseText.split("\n\n");
			for(x in r)
			{
				var rr = r[x].split("\n");
				Rewards[rr[0]]=new Object();
				Rewards[rr[0]].Name = rr[1];
				Rewards[rr[0]].Price = rr[2];
				Rewards[rr[0]].Description = rr[3];
				R.options[x] = new Option(rr[1],rr[0]);
			}
		});
		document.getElementById("rewardinfo").style.visibility="hidden";
		Submit=true;
		GetPrice();
		CheckCharacter();
	}
	
	function GetPrice()
	{
		Submit=false;
		// get selected code from currency drop down menu
		var code =  document.getElementById("currency").value;
		LoadConversionRate(code); // sets the value of the variable: Rate
		var price = (Rewards[R.value].Price * Rate);
		P.value =  price.toFixed(2) + " " + code;
		D.value = Rewards[R.value].Description;
		Submit=true;
	}
	
	function CheckCharacter()
	{
		Submit=false;
		document.getElementById("charloading").style.display="block";
		document.getElementById("charfound").style.display="none";
		document.getElementById("charnotfound").style.display="none";
		Spry.Utils.loadURL("GET","form.php?do=checkcharacter&name="+C.value+"&id="+S.value,false,function(Req)
		{
			var r = Req.xhRequest.responseText;
			if(r!="0")
			{
				document.getElementById("charloading").style.display="none";
				document.getElementById("charfound").style.display="block";
				Character = r;
				Submit = true;
			}
			else
			{
				document.getElementById("charloading").style.display="none";
				document.getElementById("charnotfound").style.display="block";
			}
		});
	}
	
	function SubmitCheck()
	{
		if(Submit)
		{
			document.getElementById('item_name').value=Rewards[R.value].Name;
			document.getElementById('item_number').value=S.value+'-'+R.value+'-'+Character;
			/* Stuff to convert currency in paypal
			var price = (Rewards[R.value].Price * Rate);
			document.getElementById('amount').value=price.toFixed(2);*/
			document.getElementById('amount').value= Rewards[R.value].Price; // comment out if you want paypal in selected currency
			//uncomment line below for paypal in selected currency
			//document.getElementById('currency_code').value = document.getElementById("currency").value;
			return true;
		}
		else
		{
			return false;
		}
	}
	
	function LoadConversionRate(code)
	{
		document.getElementById("currencyrates").style.visibility="visible";
		Spry.Utils.loadURL("GET","form.php?do=getconversion&code="+code,false,function(Req)
		{
			var r = Req.xhRequest.responseText;
			Rate = r;
		});
		document.getElementById("currencyrates").style.visibility="hidden";
	}
</script>
<LINK REL=StyleSheet HREF="../style.css" TYPE="text/css" MEDIA=screen>
	<!-- Instant donation rewards are temporarily disabled while we update our software. -->
  <table width = "60">
    <tr>
      <td>
      	<table width="300" border="0" cellspacing="5px">
      		<tr>
      			<td width="121">Select Server:</td>
      			<td width="150"><select name="server" id="server" size="1" style="width:230px;" onchange="GetRewards(CAT.value);"><?php echo $Servers; ?></select></td>
      			<td width="75" id="serverinfo"></td>
      		</tr>
		<tr>
      			<td>Reward Category:</td>
      			<td><select name="category" id="category" size="1" style="width:230px;" onchange="GetRewards(CAT.value);">
			<option value='1'>UGC General</option></select></select></td>    
			<td id="rewcategory" style="visibility:hidden;"><img src="resources/loading.gif" /></td>  			
      		</tr> 
      		<tr>
      			<td>Select Reward:</td>
      			<td><select name="reward" id="reward" size="1" style="width:230px;" onchange="GetPrice();">
			</td>
      			<td id="rewardinfo" style="visibility:hidden;"><img src="resources/loading.gif" /></td>
      		</tr>
      		<tr>
      			<td>Character Name:</td>
      			<td><input name="character" id="character" type="text" maxlength="12" style="width:230px;" onblur="CheckCharacter();"/></td>
      			<td id="characterinfo"><img id="charloading" src="resources/loading.gif" /><img src="resources/ok.png" id="charfound" /><img src="resources/notok.png" id="charnotfound" /></td>
      		</tr>
            <tr>
      			<td>Currency:</td>
      			<td><select name="currency" id="currency" size="1" style="width:230px;" onchange="GetPrice();"><?php echo $Currencies; ?></select></td>
      			<td id="currencyrates" style="visibility:hidden;"><img src="resources/loading.gif"/></td>
      		</tr>
      		<tr>
      			<td>Minimum Donation:</td>
      			<td><input type="text" size="8" name="price" id="price" readonly="readonly" /></td>
      			<td></td>
      		</tr>
      		<tr>
      			<td><form target="paypal" action="https://<?php echo PAYPAL_ADDRESS; ?>/cgi-bin/webscr" method="post" onsubmit="return SubmitCheck();">
      				<input id="submit" type="image" src="https://www.paypal.com/en_US/i/btn/btn_cart_SM.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
      				<input type="hidden" name="notify_url" value="<?php echo FORM_LOCATION; ?>">
      				<input type="hidden" name="add" value="1">
      				<input type="hidden" name="cmd" value="_cart">
      				<input type="hidden" name="business" value="<?php echo RECEIVER_EMAIL; ?>">
      				<input type="hidden" id="item_name" name="item_name" value="">
      				<input type="hidden" id="item_number" name="item_number" value="">
      				<!-- ATTENTION HACKERS: Don't try changing anything here, it won't work, you won't receive a reward, and we'll keep your money. -->
      				<input type="hidden" id="amount" name="amount" value="">
      				<input type="hidden" name="no_shipping" value="0">
      				<input type="hidden" name="no_note" value="1">
      				<input type="hidden" id="currency_code" name="currency_code" value="<?php echo CURRENCY_CODE; ?>">
      				<input type="hidden" name="lc" value="US">
      				<input type="hidden" name="bn" value="PP-ShopCartBF">
      				</form></td>
      			<td></td>
      			<td></td>
      		</tr>
      	</table>
      </td>
      <td>
        <table>
          <tr>
          	<td>Reward Description</td>
          </tr>
          <tr>
      			<td><textarea name="description" id="description" cols="20" rows="5" readonly="readonly"></textarea></td>
      		</tr>
      	</table?
      </td>
    </tr>
  </table>
Note:  All rewards are mailed to your character. If you didn't receive your reward after 10 minutes, please contact an administrator.
<script language="javascript">
	var S = document.getElementById("server");
	var CAT = document.getElementById("category");
	var R = document.getElementById("reward");
	var C = document.getElementById("character");
	var P = document.getElementById("price");
	var D = document.getElementById("description");
	GetRewards();
</script>
Ergänzung ()

ok es funktioniert jetzt doch. danke :)
 
Zu dem "this.value" habe ich die wohl richtige Angabe gefunden:
Code:
this.options[this.selectedIndex].value
bzw.:
Code:
CAT.options[CAT.selectedIndex].value

Vielleicht verändert das was an dem Problem, ansonsten kann ich mir die Situation nicht genug vorstellen.

@EDIT: Okay, dann ja gut. :D
 
Zurück
Oben