Textfeld ständig aktualisieren

GalaxyWarrior

Erfahrenes Mitglied
Hi, ich schreibe es mal hier, da ich denke, dass das bestimmt mit JavaScript zu löse ist und ich das nicht weiß wie :-)
Also, ich habe eine Seite gemacht, wo man die Rechte von der ausgewählten Datei ändern kann. Da habe ich einmal Checkboxen und dann ein Textfeld wo man den Chmod direkt eingeben kann. Ist es möglich, dass sich die Zahl um den Wert der Chckboxen ändern wenn man die anklickt, damit man das gleich sieht wie sich das verändert?
Gruß GalaxyWarrior
 
Re: Textfeld sändig aktualisieren

hallo,

klar das geht.

die Checkbox bekommt ein onClick-Eventhandler mit einer Methode die das Eintrag in das Textfeld erledigt:

HTML:
 <!-- Der name der Checkbox ist folgendermassen: Erster Buchstabe sagt immer Bereich, zweiter das recht (gr= Group/read, gw=Group/write, ux=user/execute, or= other/read -->
 <body>
  <form>
  <table>
  <tr>
  <td></td>
  <td>read</td>
  <td>write</td>
  <td>execute</td>
  </tr>
  <tr>
  <td>group</td>
  <td><input type="checkbox" name="gr" onclick="fcSetOctal(this.name);" /></td>
  <td><input type="checkbox" name="gw" onclick="fcSetOctal(this.name);" /></td>
  <td><input type="checkbox" name="gx" onclick="fcSetOctal(this.name);" /></td>
  </tr>
  <tr>
  <td>user</td>
  <td><input type="checkbox" name="ur" onclick="fcSetOctal(this.name);" /></td>
  <td><input type="checkbox" name="uw" onclick="fcSetOctal(this.name);" /></td>
  <td><input type="checkbox" name="ux" onclick="fcSetOctal(this.name);" /></td>
  </tr>
  <tr>
  <td>other</td>
  <td><input type="checkbox" name="or" onclick="fcSetOctal(this.name);" /></td>
  <td><input type="checkbox" name="ow" onclick="fcSetOctal(this.name);" /></td>
  <td><input type="checkbox" name="ox" onclick="fcSetOctal(this.name);" /></td>
  </tr>
  
  </table>
  
  
  <input type="text" name="octal">
  </form>
  </body>

nun die JS Methode

Code:
 function fcSetOctal (field){
  var read=4;
  var write=2;
  var exec=1;
  var tmp;
  if (!document.forms[0].octal.value){
  document.forms[0].octal.value = "0";
  }
     switch (field.charAt(0)){
  	  case "g":
  			   switch (field.charAt(1)){
  				  case "r":
 				 read *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+read*100;
  				  break;
  				  case "w":
 				 write *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+write*100;
  				  break;
  				  case "x":
 				 exec *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+exec*100;
  				  break;
  			   }
  	  break;
  	  case "u":
  			   switch (field.charAt(1)){
  				  case "r":
 				 read *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+read*10;
  				  break;
  				  case "w":
 				 write *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+write*10;
  				  break;
  				  case "x":
 				 exec *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+exec*10;
  				  break;
  			   }
  	  break;
  	  case "o":
  			   switch (field.charAt(1)){
  				  case "r":
 				 read *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+read*1;
  				  break;
  				  case "w":
 				 write *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+write*1;
  				  break;
  				  case "x":
 				 exec *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+exec*1;
  				  break;
  			   }
  	  break;
  	}
  }

So in etwa. Aber Achtung: Das funktioniert nur beim ersten aufruf, weil ich das Entfernen der gesetzten Bits nicht implementiert habe. Such mal im Forum nach Bitmuster. Das hilft dir dann bei der Erweiterung!


[EDIT] Jetzt funtzt es komplett. HTML-Beispiel hinzugefügt.

cu

cP
 
Zuletzt bearbeitet:
Re: Textfeld sändig aktualisieren

Hi, hab das jetzt mal eingebaut, doch nun werden weder die Zahlen aus den Checkboxes (die haben bei mir Werte) noch der Inhalt des Textfeldes octal kann ich mit Post abrufen ( weil das soll ja gespeichert werden und das mache ich mit PHP )

Aber das aktuallisieren des Textfeldes klappt.

Gruß GalaxyWarrior
 
Re: Textfeld sändig aktualisieren

Hallo,....

wenn du sagen könntest, auf welchen der Vorschläge sich dieses Problem bezieht, würde das die Hilfestellung enorm erleichtern.
 
Re: Textfeld sändig aktualisieren

Auf den von Crazypower. Ich habe den Scrip so genommen wie er ihn gegeben hat, nur das ich meine eigenen schon vorhandenen Inputs verwende, die heißen halt 1r 1w 1x usw , das habe ich in dem Script geändert. Das funktioniert auch soweit. Das Textfeld wird eben wie in deinem Link in echtzeit aktualisiert. Nur wenn ich dann auf speichern klicke, dann wird normalerweise das Textfeld per $_POST[chmod] (chmod ist bei mir das textfeld ) ausgelesen. Doch dieser Wert ist nun leer. Das ergebnis der Checkboxen ist immer 0, wenn ich die an stelle des Textfeldes abfrage mit $_POST[1r] usw. Wenn ich das Javascript weglasse, dann wird eben das Textfeld nicht aktuallisiert, aber die Checkboxen geben bei der Abfrage mit _POST[1r] ihr value zurück, womit ich dann die einzelnen Stellen errechne ( eben 1r+1w+1x ). Woran kann das nun liegen, dass das nicht geht? Hier mal der Code:


Das steht im Head-Bereich der Page
Code:
<script language=JavaScript>
 function fcSetOctal (field){
  var read=4;
  var write=2;
  var exec=1;
  var tmp;
  if (!document.forms[0].octal.value){
  document.forms[0].octal.value = "0";
  }
     switch (field.charAt(0)){
  	  case "1":
  			   switch (field.charAt(1)){
  				  case "r":
 				 read *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+read*100;
  				  break;
  				  case "w":
 				 write *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+write*100;
  				  break;
  				  case "x":
 				 exec *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+exec*100;
  				  break;
  			   }
  	  break;
  	  case "2":
  			   switch (field.charAt(1)){
  				  case "r":
 				 read *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+read*10;
  				  break;
  				  case "w":
 				 write *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+write*10;
  				  break;
  				  case "x":
 				 exec *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+exec*10;
  				  break;
  			   }
  	  break;
  	  case "3":
  			   switch (field.charAt(1)){
  				  case "r":
 				 read *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+read*1;
  				  break;
  				  case "w":
 				 write *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+write*1;
  				  break;
  				  case "x":
 				 exec *= parseInt(document.forms[0].elements[field].checked ? "1" : "-1");
 				 document.forms[0].octal.value=parseInt(document.forms[0].octal.value)+exec*1;
  				  break;
  			   }
  	  break;
  	}
  }
</script>

und das im Body-Bereich:

PHP:
	<? 
		if($page == "chmod"){
 
	  $chmod_1_complete = $_POST[1r]+$_POST[1w]+$_POST[1x];
	  $chmod_2_complete = $_POST[2r]+$_POST[2w]+$_POST[2x];
	  $chmod_3_complete = $_POST[3r]+$_POST[3w]+$_POST[3x];

echo $chmod_1_complete;
echo $chmod_2_complete;
echo $chmod_3_complete;
echo $_POST[octal];
	  $chmod_complete = $chmod_1_complete.$chmod_2_complete.$chmod_3_complete;

			//$chmod_test = $_POST[chmod_first].$chmod_complete;
$chmod_test = $_POST[octal];
			
			// Herstellen der Basis-Verbindung
					$conn_id = ftp_connect("80.190.246.207"); 
					
					// Einloggen mit Benutzername und Kennwort
					$login_result = ftp_login($conn_id, $_SESSION[Name], $_SESSION[Clear]); 
					
					// Verbindung überprüfen
					if ((!$conn_id) || (!$login_result)) { 
							echo "Ftp-Verbindung nicht hergestellt!";
							echo "Verbindung mit 80.190.246.207 als Benutzer $_SESSION[Name] nicht möglich"; 
							die; 
						} else {
							
						}
					
					// Upload der Datei
					
				$noweb = preg_replace("/web\d+\/(.*)/i","$1",$dirurl);
					$chmod = ftp_site($conn_id, "chmod ".$chmod_test." ".$noweb); 
					
					// Upload-Status überprüfen
					if (!$chmod) { 
							
						} else {
							echo "Datei $source_file auf den Server geschrieben geschrieben";
						}
					
					// Schließen des FTP-Streams
					ftp_quit($conn_id);
			//chmod ($dirurl, $chmod_test);
		}else{
	?>
	  <form name="form1" method="post" action="<? echo "chmod.php?sid=".session_id()."&page=chmod&dirurl=".$dirurl; ?>">
	<? 
		
		$chmod = fileperms($dirurl); 
		$chmod = sprintf('%o', $chmod); 
		$chmod_out = substr($chmod, 3, 3);
		$chmod = substr($chmod, 2, 1);
		$chmod_1 = substr($chmod_out, 0, 1);
		$chmod_2 = substr($chmod_out, 1, 1);
		$chmod_3 = substr($chmod_out, 2, 1);
	?>
	  <input name="Datei" type="text" value="<? echo $dirurl; ?>" readonly="true">
	  <table width="308" border="1" align="center">
        <tr>
          <td width="70" align="center">&nbsp;</td>
          <td width="70" align="center">Lesen</td>
          <td width="70" align="center">Schreiben</td>
          <td width="70" align="center">Ausf&uuml;hren</td>
        </tr>
        <tr>
          <td align="center">Besitzer</td>
          <td align="center"><? if($chmod_1 == "4" || $chmod_1 == "5" || $chmod_1 == "6" || $chmod_1 == "7"){ ?><input type="checkbox" name="1r" value="4"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="1r" value="4"  onclick="fcSetOctal(this.name);"><? } ?></td>
          <td align="center"><? if($chmod_1 == "2" || $chmod_1 == "3" || $chmod_1 == "6" || $chmod_1 == "7"){ ?><input type="checkbox" name="1w" value="2"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="1w" value="2"  onclick="fcSetOctal(this.name);"><? } ?></td>
          <td align="center"><? if($chmod_1 == "1" || $chmod_1 == "3" || $chmod_1 == "5" || $chmod_1 == "7"){ ?><input type="checkbox" name="1x" value="1"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="1x" value="1"  onclick="fcSetOctal(this.name);"><? } ?></td>
        </tr>
        <tr>
          <td align="center">Gruppe</td>
          <td align="center"><? if($chmod_2 == "4" || $chmod_2 == "5" || $chmod_2 == "6" || $chmod_2 == "7"){ ?><input type="checkbox" name="2r" value="4"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="2r" value="4"  onclick="fcSetOctal(this.name);"><? } ?></td>
          <td align="center"><? if($chmod_2 == "2" || $chmod_2 == "3" || $chmod_2 == "6" || $chmod_2 == "7"){ ?><input type="checkbox" name="2w" value="2"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="2w" value="2"  onclick="fcSetOctal(this.name);"><? } ?></td>
          <td align="center"><? if($chmod_2 == "1" || $chmod_2 == "3" || $chmod_2 == "5" || $chmod_2 == "7"){ ?><input type="checkbox" name="2x" value="1"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="2x" value="1"  onclick="fcSetOctal(this.name);"><? } ?></td>
        </tr>
        <tr>
          <td align="center">Andere</td>
          <td align="center"><? if($chmod_3 == "4" || $chmod_3 == "5" || $chmod_3 == "6" || $chmod_3 == "7"){ ?><input type="checkbox" name="3r" value="4"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="3r" value="4"  onclick="fcSetOctal(this.name);"><? } ?></td>
          <td align="center"><? if($chmod_3 == "2" || $chmod_3 == "3" || $chmod_3 == "6" || $chmod_3 == "7"){ ?><input type="checkbox" name="3w" value="2"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="3w" value="2"  onclick="fcSetOctal(this.name);"><? } ?></td>
          <td align="center"><? if($chmod_3 == "1" || $chmod_3 == "3" || $chmod_3 == "5" || $chmod_3 == "7"){ ?><input type="checkbox" name="3x" value="1"  onclick="fcSetOctal(this.name);" checked><? }else{ ?><input type="checkbox" name="3x" value="1"  onclick="fcSetOctal(this.name);"><? } ?></td>
        </tr>
      </table>
	  <br>
	  <input name="octal" type="text" value="<? echo $chmod_out; ?>">
	  <input name="chmod_first" type="hidden" value="<? echo $chmod; ?>">
      <br><input name="submit" type="submit" value="Speichern">	      
	  </form>	
	  <? } ?>

Vieleicht bin ich auch blind und es ist nur ein kleiner Fehler, ist mir auch schon passiert (wenn man immer nachts Coden muss :-) )
Gruß GalaxyWarrior
 
Zuletzt bearbeitet:
Hallo,

checkboxen haben als wert entweder eine 1 oder eine 0 (Wahr oder unwahr, true oder false). Sie können keine Werte wie 1x o.ä haben. Du kannst prüfen, ob die Box aktiviert wurde, und dann einen Wert benutzen. In Php geht das dann so:

PHP:
 // Wenn checkbox mit namen 1r gesetzt wurde, speichere wert 4, ansonsten 0
 $wert = $_POST['1r'] ? 4 : 0;

Darf ich dich fragen, wieso du zuerst alles mit JS errechnest, um es dann mit php erneut zu errechnen?

Prüf doch einfach ab, ob der Wert des Feldes >=0 und <=777 ist.

cu
cP
 
Also, die errechnung meinst du sicherlich das $_POST[1x]+ blablabla , stimmts?
Das habe ich gemacht, weil ich den Wert vom Textfeld ja nicht übergeben konnte. Natürlich können die heckboxen auch andere Werte haben, 0 und value. nicht nur 0 und 1, wenn ich das JS wegalsse, dann geht es ja. Und wo steht das die Checkbox den Wert 1r hat? der Name ist 1r, 1w usw. nicht der Wert. Der Wert ist immer Value, je nachdem welches eben 1,2 oder 4. Und warumm ich den Value da stehen habe kann ich dir auch sagen. Ich habe nunmal bisher nur in PHP programmiert, und nochhn nicht mit JS gearbeitet und hatte erst nicht an JS gedacht.

Gruß GalaxyWarrior
 
Hi,

ja hast recht mit den Values. Und mir dem Check >=0 und <=777 stimmt ja so auch nicht, weil damit ja zahlen wie 688 möglich sind, was ja bei Oktalzahlen nicht stimmt. Also entweder das Textfeld disablen, oder wirklich nochmal in php ermitteln (oder wie oben schon erwähnt Bitmuster einsetzen).

Das Textfeld wird nicht per Post geholt, weil wahrscheinlich
die quotes Fehlen:
aus dem hier:
PHP:
$chmod_test = $_POST[octal];

mach mal das hier:
PHP:
$chmod_test = $_POST['octal'];

cu

cP
 
Ne, geht auch net, das mit dem Textfeld is kein Problem, ich kann ja mit PHP in 3 Zahlen teilen und dann gucken das die net über 7 sind.
 

Neue Beiträge

Zurück