Objekt erwartet wo keins hingehört ?

Scopeeye

Mitglied
Hi Leutz,
Das folgende Javascript soll aus der IP und der Subnetmask, die vom User eingegeben wird die korekte Netzadresse und Broadcastadresse errechenen.
Wenn man jedoch auf Rechnen clickt meckert der Debugger nur das er ein Objekt erwartet ich weiss jedoch micht warum ...
Naja vieleicht könnt ihr mir ja helfen und evtl. noch andere Fehler finden :D
Code:
<html>
<head>
<title>IP-Adressen-Rechner</title>
<script language="JavaScript" type="text/javascript">
function net_broad()
 {
  var ip = new Array(4)
  var ip[0] = document.data.ip0.value;
  var ip[1] = document.data.ip1.value;
  var ip[2] = document.data.ip2.value;
  var ip[3] = document.data.ip3.value;
  
  var subnet = new Array(4);
  var subnet[0] = document.data.subnet0.vlaue;
  var subnet[1] = document.data.subnet1.vlaue;
  var subnet[2] = document.data.subnet2.vlaue;
  var subnet[3] = document.data.subnet3.vlaue;
  
  var subinv = new Array(4);
  var net = new Array(4);
  var broad = new Array(4);
  var tester = true;
  
  for(i=0; i<=3; i++)
   {
    if(!Number(ip[i]) || !Number(subnet[i]))
	 {
	  tester = false;
	 }
   }
  if(!tester)
   {
    alert("Bitte korrigieren Sie Ihre Eingabe");
   }
  else
   {
    
	for(i=0; i<=3; i++)
	 {
	  ip[i] = ip[i].toString(2);
	  alert(ip[i]);
	 }
	for(i=0; i<=3; i++)
	 {
	  subnet[i] = subnet[i].toString(2);
	  alert(subnet[i]);
	 }
	
	for(i=0; i<=3; i++)
	 {
	  for(j=0; j<=7; j++)
	   {
	    if(subnet[i].substring(j, j+1) == 1)
		 {
		  subinv[i].substring(j, j+1) = 0;
		 }
		else
		 {
		  subinv[i].substring(j, j+1) = 1;
		 }
	   }
	 }
	
	for(i=0; i<=3; i++)
	 {
	  for(j=0; j<=7; j++)
	   {
	    if(ip[i].substring(j, j+1) && subnet[i].substring(j, j+1) == 1)
		 {
		  net[i].substring(j, j+1) = 1;
		 }
		else
		 {
		  net[i].substring(j, j+1) = 0;
		 }
	   }
	 }
	for(i=0; i<=3; i++)
	 {
	  for(j=0; j<=7; j++)
	   {
	    if(ip[i].substring(j, j+1) || subinv[i].substring(j, j+1) == 1)
		 {
		  broad[i].substring(j, j+1) = 1;
		 }
		else
		 {
		  broad[i].substring(j, j+1) = 0;
		 }
	   }
	 }
	 
	for(i=0; i<=3; i++)
	 {
	 document.data.net+i+.value = parseInt(net[i]);
	 document.data.broad+i+.value = parseInt(broad[i]);
	 }
   }
 }
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
Geben Sie die IP-Adresse und die Subnetmask ein um die Netadress und die Broadcastadress errechnen zu lassen:
<form name="data" action="" method="post">
  <table width="275" border="0" cellpadding="2" cellspacing="0">
    <tr>
      <td>
	   IP:
	  </td>
      <td>
	    <input name="ip0" type="text" size="3" maxlength="3">
        . 
        <input name="ip1" type="text" size="3" maxlength="3">
        . 
        <input name="ip2" type="text" size="3" maxlength="3">
        . 
        <input name="ip3" type="text" size="3" maxlength="3">
	  </td>
    </tr>
    <tr>
      <td style="border-bottom: 1px solid white">
	   Subnetmask:
	  </td>
      <td style="border-bottom: 1px solid white">
	    <input name="subnet0" type="text" size="3" maxlength="3">
        . 
        <input name="subnet1" type="text" size="3" maxlength="3">
        . 
        <input name="subnet2" type="text" size="3" maxlength="3">
        . 
        <input name="subnet3" type="text" size="3" maxlength="3">
	  </td>
    </tr>
    <tr>
      <td>
	   Netadress:
	  </td>
      <td>
	    <input name="net0" type="text" size="3" maxlength="3">
        . 
        <input name="net1" type="text" size="3" maxlength="3">
        . 
        <input name="net2" type="text" size="3" maxlength="3">
        . 
        <input name="net3" type="text" size="3" maxlength="3">
	 </td>
    </tr>
    <tr>
     <td>
	  Bradcastadress:
	 </td>
      <td>
	    <input name="broad0" type="text" size="3" maxlength="3">
        . 
        <input name="broad1" type="text" size="3" maxlength="3">
        . 
        <input name="broad2" type="text" size="3" maxlength="3">
        . 
        <input name="broad3" type="text" size="3" maxlength="3"> 
      </td>
    </tr>
    <tr>
      <td>&nbsp;
	   
	  </td>
      <td>
	   <input type="button" value=".:Rechnen:." onClick="javascript:net_broad()">
	  </td>
    </tr>
  </table>
</form>
</body>
</html>

Greetz Scope
 
Hi,

Spontan würd ich sagen, das hier:
Code:
var ip = new Array(4)
der ";" Fehlt...
dann sollte
Code:
var subnet[0] = document.data.subnet0.vlaue;
  var subnet[1] = document.data.subnet1.vlaue;
  var subnet[2] = document.data.subnet2.vlaue;
  var subnet[3] = document.data.subnet3.vlaue;
bestimmt nicht "vlaue" sondern "value" heißen ;) Schlussendlich noch follgende Zeile
Code:
onClick="java script:net_broad()">
in follgende ändern
PHP:
onClick="net_broad()">

mehr sehe ich auf den ersten Blick auch nicht... Mach mal Pause, das sind nur Flüchtigkeitsfehler - kenn ich auch wenn ich zu lange davor sitze :)


ciao
 
Zuletzt bearbeitet:
Hui, da warn ne Menge Fehler drin!
Hättest du den Fehlermeldungen gefolgt, wüsstest du wo sie waren ;)

@crono: Das ";" ist nicht zwingend.
Und das "javascript:" im Event-Hanler ist zulässig, aber schlecht Stil.

Im Anhang die korrekte Version.
Allerings meckert der bei mir immer "Korrigieren Sie ihre Eingabe".
(Vielleicht weil ich nicht weis, wie die Broadcastadresse aussehen muss :) )


Und nochwas: Bitte das nächste mal so viel Code als Datei mit Anhängen, nicht Posten!
 

Anhänge

  • objekt.zip
    1,1 KB · Aufrufe: 11
hmk :)
ups ja das sind schreib fehler ... arghs das ich die nit gesehen habe .... nee nee nee sry wegen so viel code ... danke für die reparaturen :)

hm... irgendwie funzt des immernochnicht ganz...
hab nun alles so weit wie möglich erstmal berichtigt und acuh erstmal die Fehlerkorrektur rausgenommen.
Nun meint er undefined is Null oder kein Objekt in zeile 60 zeichen 5 aber ich kann damit nix anfangen da ich die variable soviel ich sehen kann alle richtig deklariert habe ... vielleicht is mir auch nur wieder en Fehler durchgerutscht...ich finds einfach nicht... vielleicht könnt ihr ja nochmal gucken.

Greetz Scope

P.S.: Die Netadress und die Broadcastadress werden s.B. für LANs gebraucht und diese werden durch die IP und die Sunetmask errechnet :)
Dazu muss die IP und die Subnetmask aber erstmal in Dualzahlen umgewandelt werden.
Die Subnetmask muss dann zur Errechnung der Broadcastadress invertiert werden um diese errechnen zu können.. vielleicht hilft euch das ja auch noch weiter.Die Zip Datei... naja weiss nit wie ich nen Anhang machen kann :(
 
Zuletzt bearbeitet:
Hi,

die Fehlermeldung heißt nichts weiter, als dass dein Array zu dem Zeitpunkt noch ohne Inhalt ist, du aber trotzdem mit Elementen des Arrays arbeitest, indem du eben bspw. die Methode substring() in derem Kontext anweist. :)

Wenn ich verstehen würde, was die Invertierung der Subnetzmaske bezwecken soll und wie die theoretisch vonstatten ginge, könnte ich dir vielleicht nen Tip geben, falls das jetzt kein Hinweis war, der dich weiterbringt.

Gruß,
Geist
 
Also.
Durch die Invertierung der Subnetmask wird mit einer logischen oder Verknüpfung mit der IP die Broadcastadresse berechnet...
ICh hab mir das so gedacht, daß die Subnetzmaske häppchenweise invertiert wird und dann auch direkt wieder häppchenweise zusammengefügt wird.
also das das invertierte Stückchen direkt wieder hinten angefügt wird ... weiß aber nicht ob das so möglich ist ... vielleicht gibt es ja auch ne fertige funktion oder methode die diese binäre Zahl invertiert.
Was mir aber aufgefallen ist ... ist das nach der Invertierung (mit Hilfe eines alert(ip[i]); ) eigentlich eine binäre Zahl ausgegeben werden muss, diese Zahl jedoch trotzdem dezimal angezeigt wird ... falls ich einen Denkfehler im script habe is das ja logisch aber nachdem ich mir die funktionweise von .toString(2) durchgelesen habe müsste es eigentlich funktionieren.
Falls Ihr mir helfen könnt schreibt mir bitte ne msg oder ne mail
Meine Adresse is support@scopeeye.de

Bin für Jede Hilfe dankbar :)
Auch schonmal danke an diese tolle community auf die ich mich is jetzt immer verlassen konnte :)

Greetz Scope
 
Hm, nun wird alles klarer. :)

Die Ursache für das Nichterscheinen einer binären Zeichenkette ist recht einfach zu erklären:
Die toString()-Methode mit Angabe einer Basis verlangt als Kontextobjekt ein Number-Objekt, welches in deinem Array aber nicht vorliegt, denn du hast Strings als deine Arrayelemente abgelegt. :)

Jagst du also vor dem Umwandeln in eine binäre Zeichenfolge ein parseInt über das Arrayelement, wird dieses nun zunächst in ein Nummern-Objekt umgewandelt und kann anschließend problemlos über die toString()-Methode rückwärtig in einen String entsprechender Form gewandelt werden. :)
PHP:
for(i=0; i<=3; i++) {
    subnet[i] = parseInt(subnet[i]).toString(2);
}
Gruß,
Geist
 
uiuiui
daran hab ich noch garnicht gedacht ... das das als string und nicht als int rauskommt ... naja das bringt ja dann schon etwas licht ins dunkel.
K habs genacht ... aber es wird immernoch die Fehlermeldung mit der auf die ich keine Lösung habe angezeigt...
Also das mit dem undefined ... obwohl da was drinne stehen müsste ...
Naja ich werd mal noch en paar stunden tüfteln :)
Und erm ist diese häppchenweise zusammensetzung des string auf meine Weise überhaupt möglich ?
Das Script ist hier zu finden damit ihr mal nen Einblick über den Stand der dinge habt :)
Dangeschön greetz Scope
 
Zuletzt bearbeitet:
Zurück