Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Java + Formular + Weiterleitung





Frage

Ich schreibe gerade einen JS um die daten die im Forumlar leiste und dem feld change angegeben werden auszuwerten und je nach eingabe eine seite zu laden. aba irgendwie kriege ich das nicht hin und ich habe auch noch ein fehler im script. [code]<script language=javascript> function check() { if (document.leiste.change == "") { parent.haupt.location.href="main.php?style=<?php echo"$style"; ?>"; } else { var drin = document.leiste.change; var check = drin.split(""); if (check[1] == "w" AND check[2] == "w" AND check[3] == "w") { parent.haupt.location.href="main.php?goto="+ drin +"&style=<?php echo"$style"; ?>"; } } </script>[/code] Soweit der JS script und jetzt das formular [code]<form name=leiste action="" onsubmit="check();"><input type=text name=change size=15 style="position:absolute;top:88px;left:79px;font-size:14px;width:350px;height:22px;padding-top:3px;border:0;" value=Arbeitsplatz><input type=image src=../style/images<?php echo"$style"; ?>/wechsel.jpg style="position:absolute;top:86px;left:491px;"></form> [/code] Wäre nett wenn mir einer helfen könnte mfg Fabi15

Antwort 1 von rabies

Hi,


		<script language=javascript>
		function check() {
		   if (document.leiste.change.value == "")
		      {
		      parent.haupt.location.href="main.php?style=<?php echo"$style"; ?>";
		      }
		   else
		      {
		      var drin = document.leiste.change.value;
		      var check = drin.split("");
		      if (check[0] == "w" && check[1] == "w" && check[2] == "w")
		         {
		         parent.haupt.location.href="main.php?goto="+ drin +"&style=<?php echo"$style"; ?>";
		         }
		      }
	     }
		</script>


Das soweit zum Script-Teil.
- Es fehlte die schließende Klammer der Function.
- Der logische Operator 'AND' ist - soweit ich weiß - in JavaScript nicht vorhanden. && bedeutet in diesem Falle aber 'AND'.
- Wenn Du die Werte eines Input-Feldes abfragen möchtest, musst Du noch
.value
dranhängen. (Beispiel: Nicht
document.leiste.change
sondern
document.leiste.change.value
)
- Bei der if-Abfrage mit
check[1]
usw. war ich mir nicht sicher. Aber Du willst hier sicher überprüfen, ob die ersten drei Buchstaben von
document.leiste.change.value
w, w und w sind, richtig? Arrays, solche wie sie split zurückgibt, fangen bei 0 an. Dementsprechend hab ich die if-Abfrage auch abgeändert.

Zum Formular:
	  	<form name="leiste" action="HIER_DATEI_ANGEBEN_DIE_DAS_FORM_VERARBEITET" onsubmit="check()" method="post">
	  		<input type="text" name="change" size="15" value="Arbeitsplatz">
	  		<input type="image" src="../style/images<?php echo "$style"; ?>/wechsel.jpg">
	  	</form>


Du solltest prinzipiell immer die Attribute method (ich habe das jetzt hier einmal auf "post" gesetzt) und action korrekt angeben.

Wie mir scheint, versuchst Du $style dann direkt aus der URL zu holen. Du solltest an dieser Stelle
$_GET['style']
oder, wenn die Variable per POST-Methode übergeben wird,
$_POST['style']
verwenden.


--rabies.

Antwort 2 von rfb

 <script language=javascript>
ist nicht valide, ersetze dies durch
 <script type="text/javascript">


Du solltest generell Anführungszeichen um Attribute in HTML-Tags setzen, da das Weglassen leicht zu Codefehlern führt.

 if (check[0] == "w" && check[1] == "w" && check[2] == "w")
das Script bricht an dieser Stelle ab, wenn weniger als 3 Zeichen eingegeben wurden.
Sinnvoller ist die Abfrage mit indexOf()
Außerdem wäre eine Umwandlung der Eingabe in entweder nur Groß- oder nur Kleinbuchstaben sinnvoll.

Wie immer stellt sich bei der Verwendung von JavaScript die Frage aller Fragen: Was wenn JavaScript deaktiviert ist?

Antwort 3 von Fabi15

danke danke habe alles mal probiert funktioniert aba trotzdem nicht.

ich poste jetzt mal den ganzen script der mit dem formular zu tun hat :

<?php
$style = $_GET[style];
print ("<html><head><title>B-Side</title><link rel=stylesheet type=text/css href=../style/images$style/main.css><script language=javascript src=../data/popup.js></script><script language=javascript src=../data/bild.js></script>");
print ("</head><body>");
?>
<script language=javascript>
function check() {
	if (document.leiste.change.value == "")
		{
		parent.haupt.location.href="main.php?style=<?php echo"$style"; ?>";
		}
	else
		{
		var drin = document.leiste.change.value;
		var check = drin.split("");
		if (check[0] == "w" && check[1] == "w" && check[2] == "w")
			{
			parent.haupt.location.href="main.php?goto="+ drin +"&style=<?php echo"$style"; ?>";
			}
		}
	}
</script>
<body>
<img src=../style/images<?php echo"$style"; ?>/iconarbeitsplatz.jpg style="position:absolute;top:87px;left:59px;"><form name="leiste" action="main.php" method="post" onsubmit="check();"><input type=text name=change size=15 style="position:absolute;top:88px;left:79px;font-size:14px;width:350px;height:22px;padding-top:3px;border:0;" value=Arbeitsplatz><input type=image src=../style/images<?php echo"$style"; ?>/wechsel.jpg style="position:absolute;top:86px;left:491px;"></form>
</body></html>


ich hoffe ihr könnt mir helfen

schon mal thx

mfg
Fabi15

Antwort 4 von rabies

Es wäre nett, wenn Du erst einmal noch dazu sagen würdest, was nicht geht. So kommt man nicht zum Ziel, da man nur vermuten kann, was Du eigentlich vorhast.

Nähere Angaben, wie, auf was eigentlich genau geprüft werden soll? Nur, ob da www eingegeben wird?

Und wie von rfb schon angeregt, solltest Du noch
language=javascript
mit
type="text/javascript"
ersetzen.

Kommen sonst irgendwelche Fehlermeldungen? Wenn ja, welche?

Antwort 5 von Fabi15

es kommen keine fehlermeldungen. Es soll geprüft werden, was der User in das eingabefeld eingegeben hat und je nach dem die main.php mit dem get style und dem goto von js ausgestattet aufgeruften werden. Es soll geprüft werden ob www davor steht damit js in der weiterleitung schreiben kann das es sich sehr wahrscheinlich um eine internetseite handelt die der user da eingegeben hat. Diese Weiterleitung funktioniert nicht oda ich weiss nicht ob die if entscheidung funktioniert (ich habe vorher noch nie mit js gearbeitet).

wenn du nochmehr infos brauchst bitte melden

mfg
Fabi15

Antwort 6 von rfb

nur um mich zu wiederholen:
die Eingabe "WWW.EXAMPLE.ORG" führt bei dir nicht weiter, die eingabe "bä" führt zu einem Programmfehler (da check[2] dann gar nicht existiert).

Sinnvoller ist bei Abfragen ob ein bestimmtes Wort enthalten ist immer indexOf()

Also:

if (drin.toUpperCase().indexOf("WWW") >-1) {
         parent.haupt.location.href= ...
}


statt dem Unsinn mit check.

Um sinnvolle Fehlermeldungen zu bekommen schaust du bitte bei der Scriptausführung in die Fehlerkonsole des Firefox (Menü Extras). Noch besser ist es wenn du zuvor in der Adresszeile einmal
about:config
eingibst und dann die Zeile mit
javascript.options.strict 
suchst ändere dort den Wert von
false
auf
true
.
Und diese Fehlermeldungen interessieren hier.

Antwort 7 von rabies

Dann wäre die Verwendung von indexOf(), wie von rfb schon gesagt, hier besser.

Ersetze diesen Teil:

      {
      var drin = document.leiste.change.value;
      var check = drin.split("");
      if (check[0] == "w" && check[1] == "w" && check[2] == "w")
         {
         parent.haupt.location.href="main.php?goto="+ drin +"&style=<?php echo"$style"; ?>";
         }
      }


mit diesem:

{ 
   var drin = document.leiste.change.value;  
   if (drin.indexOf('www') == 0)
     {
     parent.haupt.location.href="main.php?goto="+ drin +"&style=<?php echo"$style"; ?>";
     }
}


--rabies.

Antwort 8 von rfb

@rabies:
unsere Varianten unterscheiden sich in 2 Details:
1. toUpperCase()
2. >-1

zu 1: wandelt alles in Großbuchstaben um
zu 2: fängt Eingaben mit Protokoll ab ("http://www.example.org")

Antwort 9 von rabies

Aeh, Frage (an rfb): indexOf() ist case-sensitive? Oder warum sollte man hier das toUpperCase() benutzen?

Danke für Aufklärung im Vorraus.

Antwort 10 von rabies

Ok, an das http:// hab ich nicht gedacht. Aber hier hätte ich das ganze eher mit match() gelöst, als mit indexOf().

Antwort 11 von rfb

indexOf() ist natürlich casesensitiv (wie fast alles in JavaScript)
match() ? Wenn dann doch search(), oder? Du willst eventuelle Treffer ja nicht verwerten (zumindest sieht das Script das nicht vor).
Aber ich glaub die Anwendung regulärer Ausdrück ist hier eh übertrieben.

Antwort 12 von Fabi15

thx aba geht imma noch nicht.

nochnichmal der style kommt an !

Ich weiss nicht mehr weiter

Antwort 13 von Fabi15

das change kommt an aba der style nich

Antwort 14 von rfb

Zitat:
Ich weiss nicht mehr weiter
so gehts mir auch!

Gibts nicht langsam mal irgendeine Fehlermeldung (JavaScript oder PHP) ?

Oder gibt es einen Link zu der verkorksten Seite=

So ist weitere Hilfe jedenfalls nicht möglich!

Antwort 15 von rabies

Huch, search() kannte ich nicht. Man kann halt doch immer dazulernen. :)

Fabi: Die Seite, auf der sich oben beschriebenes abspielt ist -- so sieht es zumindest aus -- Bestandteil eines Framesets, richtig? GET-Variablen werden allerdings nur an die 'Hauptseite' übergeben. Was in Deinem Fall sicher eine Datei ist, in der nur das Frameset definiert ist. Du müsstest also den Unterseiten im Frameset jeweils noch die GET-Variablen mitgeben.

Folgendes PHP-Snippet müsstest Du in die Datei einbauen, die das Frameset 'beschreibt':

		<?php 
			$querystring='';
			$querystring_num=count($_GET);
			$querystring_i=0;
			if($querystring_num != 0) { 
				foreach($_GET as $key => $value) {
					$querystring.=($querystring_i!=0) ? '&'.$key.'='.$value : '?'.$key.'='.$value; 
					$querystring_i++;
				}
			}
		?>


Den Frame, der alles obige beinhaltet, müsstest Du nun so im Frameset schreiben:

<frame src="name_der_datei.php<?php echo $querystring; ?>">


--rabies.

Antwort 16 von Fabi15

die seite die den GET kriegt ist die gleiche die den JS enthällt ! Dieser ist zwar in einem Frame eingebunden aber wird sofort ohne den Frame neuzuladen aufgerufrn !

mfg
Fabi15

Antwort 17 von rfb

Zitat:
GET-Variablen werden allerdings nur an die 'Hauptseite' übergeben.
Sicher? Dem PHP-Interpreter ist es doch eigentlich völlig wurscht, was der Client später aus dem Kram macht. Genau genommen hat er keine Ahnung von Frames und anderen Fensterchen.

Antwort 18 von rabies

Zitat:
die seite die den GET kriegt ist die gleiche die den JS enthällt ! Dieser ist zwar in einem Frame eingebunden aber wird sofort ohne den Frame neuzuladen aufgerufrn !


Damit hat sich die Vermutung aufgelöst.

rfb: Ja, sicher.

Zitat:
Genau genommen hat er keine Ahnung von Frames und anderen Fensterchen.

Richtig, hat er auch nicht. Der Client aber genau so wenig. Deswegen reicht er die per GET übergebenen Daten auch nicht willkürlich an die Unterseiten eines Framesets weiter.

Wäre auch nicht sonderlich nett. Gehen wir davon aus, dass ich ein ganz ein böser Mensch bin, als Deckmantel aber soetwas wie AdSense anbiete (was als iframe ausgeworfen wird). Ich bräuchte nur noch auf meiner Seite (in dem iframe) alle per GET übergebenen Variablen rauszuziehen und hätte mit Sicherheit Informationen, die absolut nicht zu mir als Drittanbieter gehören würden und dort auch nicht ankommen sollten.

Antwort 19 von rfb

*grübel*
aber die GET-Variablen sind doch sowieso nur die, die per URL übergeben werden?
Warum solltest du allen möglichen Kram per URL in dein IFrame schmeißen?

Antwort 20 von rabies

Ich ging bei Fabi's Beispiel davon aus, dass die Seite, auf der der Spaß stattfindet, innerhalb eines Framesets sitzt und die Formularauswertung einer anderen (übergeordneten Seite) überlassen wird.
War wohl nicht der Fall. Wäre aber meine logische Erklärung dafür gewesen, dass die Variable $style nichts zurücklieferte.

Antwort 21 von rabies

Zitat:
Warum solltest du allen möglichen Kram per URL in dein IFrame schmeißen?
Noch ein Fallbeispiel dazu:
Gehen wir davon aus, dass wir eine in drei Frames unterteilte Webseite haben. Einen Header, eine Navigation und den Content. Im Contentbereich wird ein Login-Formular angezeigt. Im Header habe ich aber eine kleine Anzeige, die mir sagt, ob ich eingeloggt bin, oder nicht. In der Navigation möchte ich, wenn ein User eingeloggt ist, noch weitere Menüpunkte anzeigen. Wie kriege ich aber nun die Information, ob ein User eingeloggt ist, in den Headerframe und in den Navigationsframe, wo doch der Contentbereich und das dortige Formular den Login verarbeitet?! Gar nicht. Also muss ich die Daten an ein übergeordnetes Script schicken, dass die Daten (dass sich jemand eingeloggt hat), auch an die beiden anderen Frames weitergibt.

Dass alles weitergegeben wird, war in dem Beispiel oben die einfachste Lösung. Ich weiß ja nicht, was der Threadersteller noch alles vorhat. ;o)

Antwort 22 von Fabi15

ich möchte eine XP homepage createn und möchte die Eingabefelder vom IE (oda vom Arbeitsplatz) überprüfen und dann das dazu benötigte Programm laden.

Link XP - Homepage

mfg
Fabi15

Antwort 23 von Fabi15

aba mal was anderes:

Kann man das nicht per PHP lösen ?

mfg
Fabi15

Antwort 24 von rfb

Zitat:
Kann man das nicht per PHP lösen ?
wenn du mal das Problem beschreibst erhältst du sicherlich darauf eine Antwort.

Zitat:
Sie entsprechen den Mindestanforderungen !
(von deinem Link) ist so ziemlich der größte Stuss den ich bislang zum Thema Browserabfragen gesehen habe.
Dazu die peinliche Verwechslung von Java und JavaScript und die Abfrage nach screen.width >= 1024.
(angenommen ich würde einen virtuellen Bildschirm nutzen, der weitaus größer als mein Gerät ist, was dann?)
Wozu der ganze Zauber da gemacht wird erhellt sich mir nicht.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: