Hilft mir jemand bei der Fehlersuche in 'Snake'?

Ich habe jetzt einmal wieder ein Snake-Spiel angefangen zu programmieren. Diesmal soll es Snake-Online für mehrere Spieler werden, was der Grund dafür ist, dass ich meine alte Version noch einmal uberarbeiten musste, dass man leichter mehrere Schlangen erstellen kann und auch das ganze Spiel besser gemanagt wird.

In den Source Code könnt ihr euch auf http://christian-plugge.de/Snake-Prototyp reinlesen. Um Die Vorschau zu sehen einfach noch -Vorschau an die URL anhängen, also http://christian-plugge.de/Snake-Prototyp-Vorschau.

Das Problem ist in Zeile 98 bzw. 413 - 417:

console.log(this.game.getPixelRGBA(nextX, this.lastPos.y));

Definition:

// get pixel data of x/y
game.prototype.getPixelRGBA = function(x, y) {
	x = x || 0;
	y = y || 0;
	return this.ctx.getImageData(x, y, 1, 1).data;
};

Das soll die RGBA (Red/Green/Blue/Alpha)-Farbe von einem Pixel im Canvas auslesen. An der Stelle im Code testweise nur wenn die Schlange nach links läuft. Wenn man aber den Log in der Konsole anguckt und über eine andere Schlange läuft, wird als Farbe immer noch nur

Uint8ClampedArray(4) [0, 0, 0, 0]

also keine Farbe ausgegeben. Eine neue Schlange kann man mit der Klasse snake erstellen:

new snake({
	game: g,
	name: 'test',
	control: {
		up: 'w',
		left: 'a',
		down: 's',
		right: 'd'
	}
});

Ich vermute, dass die Farbe ausgelesen wird, bevor das Spielfeld (die Spieler) überhaupt gezeichnet wurden. Irgendwelche Vorschläge??

Gezeichnet wird das Feld übrigens mit der Funktion in Zeile 394 - 400:

// print next frame
game.prototype.nextFrame = function() {
	this.clear();
	this.player.forEach(
		snake => snake.paint(),
		snake => snake.move()
	);
};

Danke für jede Hilfe

Liebe Grüße

Win7User

...zur Frage

Mir ist gerade aufgefallen, dass ich die Frage schon in der Fragestellung selbst beantwortet habe. Ich muss einfach als erstes zeichnen, und dann die Bewegungen ausführen, dass es funktioniert. In der bearbeiteten Version der Frage ist die Funktion jetzt richtig:

// print next frame
game.prototype.nextFrame = function() {
	this.clear();
	this.player.forEach(
		snake => snake.paint(), // als erstes zeichnen
		snake => snake.move()   // und dann erst die Bewegung ausführen!
	);
};

Danke trotzdem, falls sich jemand die Frage durchgelesen hat!

...zur Antwort

Falls du es noch genauer haben willst, solltest du dir einmal auf Stackoverflow diese oder diese Antwort durchlesen. Das ist einiges genauer als der kurze Reguläre Ausdruck, den FaTech benutzt hat (nichts für ungut!).

Liebe Grüße

Win7User

...zur Antwort

[nur eine Anmerkung]

Webentwicklung beißt sich nicht mit Spielentwicklung. Man kann auch mit den Techniken für Webentwicklung ein Spiel schreiben. Hier ein Beispiel, dass ich einmal gemacht habe:

Canvas Snake

Eine vereinfachte Version des Spiels Snake habe ich einmal geschrieben. Das war eins meiner ersten kleinen Projekte in der Programmierung -- aus diesem Grund ist die Seite auch nicht wirklich ansprechend (ich wollte nur das Spiel zum laufen bringen).

...zur Antwort

Hi Plonkadonka,

um den Text aus der Prompt-Box mit einzufügen, kannst du einfach die Variable mit dem Additionsoperator an .innerText der Überschrift hinzufügen.

Beispiel:

[...]
<body>
  <h1 id="greet">Nice to meet you, </h1>
  <script>
    // Benutzername abfragen
    while(!(window.username = prompt('Please type in your username', 'username')));

    // Überschrift-Element auswählen ...
    document.querySelector('h1#greet')

      // Benutzername anhängen
      .innerText += username;
  </script>
</body>

Zum testen das hier in die Adressleiste kopieren:

data:text/html,<body><h1 id="greet">Nice to meet you, </h1><script>while(!(window.username = prompt('Please type in your username', 'username')));document.querySelector('h1#greet').innerText += username;</script></body>

Liebe Grüße

Win7User

...zur Antwort

Wie du schon richtig erkannt hast, kannst du mit pageYOffset die Position herausfinden, an die gescrollt wurde.

Du hast aber nichts konkretes genannt, wie du die Größe änderst. Aus diesem Grund kann dir hier leider niemand wirklich weiterhelfen.

Hier aber allgemeines Beispiel wie es funktioniert (JavaScript)

function adjustSize(y){
    // Skript um die größe anzupassen
}

document.addEventListener('load', function(ev){
    adjustSize(pageYOffset);
}

Und noch eine kleine Sache:

wenn du eine Frage stellst, solltest du immer Codeschnnipsel oder verlinkungen auf jsbin.com o.Ä. Seiten machen, dass man deinen Code nachvollziehen kann.

Liebe Grüße

Win7User

...zur Antwort

Die Methode call wird benutzt, um eine Funktion mit einem anderen this-Argument aufzurufen. In deinem Beispiel wird die Funktion Human mit dem this von SuperHero aufgerufen. So werden alle internen Zuweisungen von Human auf SuperHero übertragen. Danach wird die noch fehlende Eigenschaft power ergänzt.

In Schritt 2 wird der prototype von SuperHero geändert. Der Prototype enthält alle Eigenschaften und Methoden, die in den Instanzen des Konstruktors vorhanden sein sollen.

Wenn die Funktion Human aufgerufen mit new ein Objekt zurückgibt, in dem z.B. die Funktion getName() definiert ist

{
  getName: function(){
    return this.name
  }
}

kann man wenn man eine Instanz erzeugt hat

var sh = new SuperHero;

diese Funktion davon aufrufen:

sh.getName();

Würde man es nur auf die Funktion SuperHero definieren, würde es nicht vererbt werden.

Liebe Grüße

Win7User

...zur Antwort

Hi Portugal!

Ich würde in JavaScript Klassen als Funktionen definieren, da die Methode mit dem class-Keyword noch nicht so viel Unterstützung an den Endgeräten hat.

Deine Klasse könntest du beispielsweise so erstellen:

function customClass(show, auto, state){
  this.show = show || false; 
  this.auto = auto || true;
  this.state = state || 'active';
}

Die konstanten Eigenschaften und Funktionen der Klasse können über den Prototype festgelegt werden:

// Wert, der bei allen Instanzen gleich ist
customClass.prototype.constantValue = 'Hello World';

// Funktion, die von Instanzen aufgerufen werden kann
customClass.prototype.getState = function(){
  return this.state;
}

Eine Instanz der Klasse kann dann mit den new-Keyword erstellt werden.

// Instanz mit Standardwerten erstellen
var cc = new customClass;

// Instanz-Eigenschaften ändern
cc.show = true;
cc.state = 'was auch immer';

// Instanz-Methoden aufrufen
cc.getState();

Die Eigenschaften, die im Prototype festgelegt wurden, sind bei allen Instanzen gleich.

// Instanzen erzeugen
var cc1 = new customClass;
var cc2 = new customClass(false, false, '');
var cc3 = new customClass(true, true, 'Hello World');

// Prototype Eigenschaft anzeigen
console.log(cc1.constantValue);
console.log(cc2.constantValue);
console.log(cc3.constantValue);

// Erwartete Ausgabe:
"Hello World"
"Hello World"
"Hello World"

// Wert ändern
customClass.prototype.constantValue = 'Test';

// Prototype Eigenschaft anzeigen
console.log(cc1.constantValue);
console.log(cc2.constantValue);
console.log(cc3.constantValue);

// Erwartete Ausgabe:
"Test"
"Test"
"Test"

Ich hoffe ich konnte helfen :)

Liebe Grüße

Win7User

...zur Antwort

Du solltest dir einmal angucken, wie die Datei auf dem Server verarbeitet wurde. Wenn die Webseite, auf der die Datei angeboten wird, und die Seite, die den Download startet, identisch sind, musst du aufpassen, was du sendest.

Hier ein Beispiel wie ich es wahrscheinlich über GET als 'onepager' gemacht hätte:

<?php ob_start(); ?>
<!DOCTYPE html>
<html>
<head>
	<title>Download</title>
</head>
<body>
	<div>
		<h1>Download</h1>
		<p>Das hier ist ein Dateidownload mit PHP.<br>Bitte klicke
		auf <a href="?Dateiname=Datei%201&Dateiendung=exe">diesen Link</a> um eine Datei
		Herunterzuladen.</p>
	</div>
</body>
</html>

<?php

# Dateien, die man herunterladen darf
$DOWNLOADFILES = array(
	"Datei 1.exe",
	"Datei 2.txt",
	"Datei ohne Endung"
);

if(isset($_GET["Dateiname"])
	&& !empty($_GET["Dateiname"])
	&& isset($_GET["Dateiendung"])){

	# Output-Buffer leeren, weil noch Header gesetzt werden;
	# Inhalt liegt in der Variable $content und kann mit
	# der Anweisung echo $content wieder eingefügt werden.
	# So kommt auch kein HTML-Code in die Dateien.
	$content = ob_get_clean();

	$file = $_GET["Dateiname"].((empty($_GET["Dateiendung"])) ? '' : '.'.$_GET["Dateiendung"]);

	if(file_exists($file) && in_array($file, $DOWNLOADFILES)){
		header("HTTP/1.1 200 OK", true, 200);
		header("Content-Type: application/octet-stream");
		header("Content-Disposition: attachement; filename=$file");
		header("Content-Transfer-Encoding: binary");
		header("Content-Length: ".filesize($file));
		echo file_get_contents($file);

	}elseif(!in_array($file, $DOWNLOADFILES)){
		header("HTTP/1.1 401 Unauthorized", true, 401);
		echo "Du bist nicht berechtigt, auf diese Datei zuzugreifen";

	}else{
		header("HTTP/1.1 404 Not Found", true, 404);
		echo "Datei wurde nicht gefunden";
	}
}

?>

Ganz oben in der Datei habe ich den Befehl ob_start(); ausgeführt. Das sorgt dafür, dass alles, was folgt in den internen Ausgabebuffer (Output Buffer) geschrieben wird -- der HTML-Code.

Falls in der URL die GET-Parameter Dateiname (darf nicht leer sein) und Dateiendung gesetzt sind wird die Seite einfach mit $content = ob_get_clean(); gelöscht und in die Variable $content geschrieben. So können noch die Header entsprechend gesetzt werden und der Inhalt abgeändert/ersetzt werden.

Ich habe einfach schlampig mit echo eine Zeile ausgegeben, falls die Datei nicht heruntergeladen werden kann. Das könnte man aber mit preg_replace() besser machen, indem man noch Platzhalter im Source Code plaziert, die man so einfach mit 'Zugriff verweigert' oder 'Datei nicht gefunden' ersetzen kann.

Für dich sollte aber eher relevant sein, wie du den Inhalt wieder löschen kannst, um eine andere Datei zu laden.

Liebe Grüße

Win7User

...zur Antwort

Hi Frage100X,

am besten machst du das so, wie rexex9 dir geschrieben hat. Auslesen, speichern, weiterleiten und anzeigen.

Wenn du die Daten nicht speichern musst (bspw. der Beleg für eine Bestellung), kannst du sie auch direkt anzeigen.

[ungetestet] Beispiel:

<!-- Seite A -->
<form action="seite-b.php" method="POST">
  <input type="text" name="irgendwas" />
  <input type="submit" />
</form>

<!-- Seite B -->
<html>
  <head></head>
  <body>
    <section>
      <p>Hier sind die eingegebenen Daten:</p>
      <div>
        <!-- HIER WERDEN DIE DATEN MIT PHP EINGEFÜGT -->
        <?php echo $_POST["irgendwas"]; ?>
      </div>
    </section>
  </body>
</html>

Wenn es sich um Kommentare handelt, nützt so etwas natürlich nichts, weil nichts gespeichert ist.

Ich würde also auch regex9's Antwort bevorzugen.

Liebe Grüße

Win7User

...zur Antwort

Du könntest einmal hier nachlesen -- das dürfte für dich einige Fragen zu den Voraussetzungen und dem Beruf an sich klären.

  1. Duales Studium (Berufsschule und Betrieb)
  2. Ausbildungszeit von 3 Jahren
  3. Mittlere Reife-Abschluss
  4. Gute Noten in Mathe, Deutsch, Englisch - vor allem Mathe; Grundkenntnisse Englisch
  5. Handwerkliches Geschick, Sorgfalt, Analytische Fähigkeiten
  6. Schreibtischarbeit, flexible Zeiten; nur selten Dienstreisen
  7. lösungsorientiert

Das ist sehr kurz zusammengefasst, was du können/haben solltest und was dich erwarten wird.

...zur Antwort

Hi terraexist,

ich habe gestern einmal deine Frage gelesen und mir überlegt, dass so etwas wirklich einmal sehr praktisch sein kann. Dazu kommt natürlich noch, dass ich mich auch ein bisschen mit Programmiersprachen auskenne (deshalb habe ich es auch gelesen ;)) und es auch ab und zu einmal brauchen könnte.

Ich habe jetzt also ein Programm geschrieben, dass genau das macht.

Als erstes muss man in einer Textdatei, die nach dem ersten starten erstellt wird, die Server-Konfig angeben (Host, Port, Benutzer, Passwort). Dann kann man einfach alle Dateien, die auf die Server, die eingetragen wurden, hochgeladen werden sollen, auf das Icon ziehen.

Dann öffnet sich ein Konsolen-Fenster, in dem immer der aktuelle Status steht (Upload gestartet/Fehler aufgetreten/Verbindung fehlgeschlagen/was auch immer).

Die Datei kannst du dir auf Mediafire herunterladen: Hotfolder.exe

Da werden alle Dateien auch auf Viren gescannt -- du solltest dir also sicher sein können, dass ich so etwas nicht mache (ich kann Viren nicht ausstehen).

Wenn du aber ganz sicher sein willst, dass alles okay ist und ich dir keinen Mist andrehen will, kannst du dir auch den Source-Code angucken. Den habe ich in einem Zip auch auf Mediafire hochgeladen.

In der Zip-Datei ist auch die kompilierte Datei drin. Du kannst sie aber natürlich auch löschen, den Code überprüfen und das ganze neu kompilieren. Das Programm dafür (pyinstaller.exe) und die spec-Datei (hotfolder.spec) sind natürlich auch dabei.

Du musst also nur noch eine Konsole in dem Verzeichnis aufmachen, in dem die Dateien liegen, und dort den Befehl pyinstaller.exe hotfolder.spec eingeben, wenn du den Code fertig überprüft hast und die Datei wieder brauchst.

Ich hoffe ich konnte helfen :D

Liebe Grüße

Win7User

...zur Antwort

Hi Flo,

wenn du eine (platformübergreifende) Anwendung in HTML, CSS un JavaScript (Node.js) schreiben willst, würde ich dir Electron vorschlagen.

Das ist genau für so etwas gedacht.

Liebe Grüße

Win7User

...zur Antwort

Hallo Sam,

in jedem Tutorial, dass du findest, wirst du nur die Grundlagen der Sprache lernen. Das sind normal diese Sachen:

  1. voller Name
  2. Geschichte
  3. Anwendung
  4. Hello World
  5. Variablen
  6. Datentypen
  7. Eigenschaften/Methoden
  8. Ausdrücke
  9. Einfache/Erweiterte Bedingungsabfragen
  10. Schleifen
  11. Funktionen/Klassen (OOP/nicht OOP)
  12. Anwendungsbeispiele

Viel mehr braucht man als erstes nämlich als erstes gar nicht. Benutzt man das alles dann eine Weile (nicht ca. 1 Woche -- eher ein paar Jahre) wird man, wenn man komplexere Projekte hat, gar nicht daran vorbeikommen, in Dokumentationen nachzulesen (oder es sich erklären lassen), bis man es kapiert hat.

So wirst du (bei JS) sicher irgendwann noch die Switch-Anweisung brauchen können, wenn du ganz viele if-else Blöcke hintereinander hast.

Noch später wirst du dir dann sicher noch den Prototype genauer angucken müssen, da man diesen u.a. braucht, um eigene 'Klassen' zu machen.

Wenn diese ganzen Sachen, die man erst später irgendwann einmal brauchen kann, in einem Tutorial untergebracht werden würden, würde es nur unnötig lang werden und der, der es macht wird sich immer mehr Fragen, wozu das ganze sinnvoll ist, weil man den Sinn von vielen Sachen noch nicht verstehen kann, wenn man noch ein Tutorial macht.

Das würde also, wie schon erwähnt, alles nur zumüllen und die Leute mit Sachen verwirren, die sie noch gar nicht brauchen können.

[...] woher kann ich mir dieses Wissen dann herholen?

Du musst dir immer wenn du etwas nicht verstehst die Dokumentationen dazu durchlesen.

Hier die drei ersten Seiten, die mir dazu einfallen würden:

  1. https://developer.mozilla.org/de/
  2. https://www.w3schools.com/
  3. https://selfhtml.org/

Du könntest auch einfach einmal anfangen, dir eine Homepage zu scheiben. Dann wirst du schon sehr schnell merken, was du noch nicht kannst/verstehst und kannst so auch genau das lernen, was du einmal brauchen kannst.

Ich hoffe ich konnte helfen :)

Liebe Grüße

Win7User

...zur Antwort

Hi Svenwas,

Das könntest du mit einem Bild und einem kleinen JS-Skript machen. So kannst du auch - falls ein Bild ausgewählt wurde - dieses anstelle des Dateinamens anzeigen.

Hier ein kleiner Beispielcode:

<div id="inputImage">
	<button onclick="this.nextElementSibling.click()">Bild anzeigen</button>
	<input type="file" name="file">
	<img alt="Wähle ...">
	<style>
		#inputImage {
			max-width: 80%;
			margin: auto;
		}
		#inputImage * {
			float: left;
			clear: both;
			max-width: 100%;
			margin-bottom: 10px;
		}
		#inputImage input { display: none }
	</style>
	<script>
		var inpImg = document.querySelectorAll('#inputImage input,img'),
			reader = new FileReader;
		inpImg[0].oninput = function(event) {
			if (inpImg[0].files.length === 0) return inpImg[1].alt = 'Wähle ...';
			inpImg[1].alt = inpImg[0].files[0].name;
			
			if(!!inpImg[0].files[0].type.match(/image/)){
				reader.readAsDataURL(inpImg[0].files[0]);
			}else{
				inpImg[1].src = '';
			}
			reader.onload = function(event){
				inpImg[1].src = reader.result;
			}
		}
	</script>
</div>

Das ist ein bisschen anders als das, was du geschrieben hast. Der Input-Tag wird versteckt und durch einen Button ersetzt. Dieser bekommt das Attribut onclick, mit der Funktion this.nextElementSibling.click(), die das nächste Element anklickt.

Aus diesem Grund muss als nächstes auch das Input-Feld geschrieben werden (es wird mit CSS versteckt). Das hat auch den Vorteil, dass du auf den Button schreiben kannst, was du willst - normal ist es ein vom Browser vorgegebener Text.

An den Input kommt eine längere Funktion. Das ist die, die mit inpImg[0].oninput anfängt. Als erstes wird geprüft, ob eine Datei ausgewählt wurde. Falls nicht, wird wieder 'Wähle ...' in den Alt-Tag geschrieben (der Text der den Dateinamen anzeigt falls es kein Bild war). Falls ein Bild angegeben wurde, wird der Dateiname der ersten Datei reingeschrieben.

Dann wird noch geguckt, ob die Datei ein Bild ist (via mime-Type). Falls das der Fall ist, wird die Datei als Daten-URL gelesen und über das img-Tag angezeigt.

Ich hoffe ich konnte helfen :)

Liebe Grüße

Win7User

PS:
zum testen gib einfach das hier in die Adressleiste ein:

data:text/html;,<div id="inputImage"> <button onclick="this.nextElementSibling.click()">Bild anzeigen</button> <input type="file" name="file"> <img alt="W%C3%A4hle ..."> <style> #inputImage { max-width: 80%; margin: auto; } #inputImage * { float: left; clear: both; max-width: 100%; margin-bottom: 10px; } #inputImage input { display: none } </style> <script> var inpImg = document.querySelectorAll('#inputImage input,img'), reader = new FileReader; inpImg[0].oninput = function(event) { if (inpImg[0].files.length === 0) return inpImg[1].alt = 'W%C3%A4hle ...'; inpImg[1].alt = inpImg[0].files[0].name; if(!!inpImg[0].files[0].type.match(/image/)){ reader.readAsDataURL(inpImg[0].files[0]); }else{ inpImg[1].src = ''; } reader.onload = function(event){ inpImg[1].src = reader.result; } } </script> </div>
...zur Antwort

Wie wäre es mit einem Programm, welches ein Sudoku lösen kann? Das habe ich letztens einmal in irgendeiner Frage hier gelesen.

Ich kann mir gut vorstellen, dass das eine ganz schöne Sache sein könnte.

Einige Lösungsstrategien sind auf dieser Seite leicht verständlich erklärt. Noch einige mehr aber eher für fortgeschrittene bis Profis findest du hier.

Wenn du das implementiert hast, kannst du es ja auf irgendeiner Webseite hochladen und vorstellen ☺

Liebe Grüße

Win7User

...zur Antwort

Es wurden schon viele Lösungen geschrieben allerdings noch keine einzige, die die Ergebnisse über die Parameterliste zurückgibt.

Ich schreibe also einfach auch noch eine Antwort ☺

[...] Funktion rechne [...]
function rechne(){}
[...] zwei Zahlen übergeben [...]
function rechne($a=0, $b=0){}
[...] zwei Ergebnisse über Parameterliste zurückliefern [...]
function rechne($a=0, $b=0, &$summ, &$product){
  $summ = $a + $b;
  $product = $a * $b;
  return array(
    "summ" => $summ,
    "product" => $product
  );
}

Das sind also alle Sachen, die du gegeben hast. Eine Funktion mit dem Namen rechne, an die zwei Parameter als Eingabe (die Zahlen) und zwei Parameter als Ausgabe übergeben werden. Die Eingabe-Parameter bekommen den Standardwert 0, dass nichts falsches berechnet wird. Die Ausgabe-Parameter müssen vor dem Dollar-Zeichen ($) noch ein Und-Zeichen (&) stehen, dass die Variable als Referenz übergeben wird.

Das kannst du dann einfach ausrechnen:

$a + $b;
$a * $b;

Das gibst du dann auch noch an die Ausgabevariablen weiter:

$summ = $a + $b;
$product = $a * $b;

Ich würde - einfach dass es ein bisschen ordentlicher ist auch noch einen normalen Rückgabewert angeben:

return array(
  "summ" => $summ,
  "product" => $product
);

Die Funktion würde dann also so aussehen:

function rechne($a=0, $b=0, &$summ, &$product){
	$summ = $a + $b;
	$product = $a * $b;
	return array(
		"summ" => $summ,
		"product" => $product
	);
}

Dann nur noch die Funktion ausführen und die Rückgabewerte anzeigen:

# Ausgabevariablen festlegen
$plusErgebnis = 0;
$malErgebnis = 0;

# Funktion ausführen
rechne(2, 3, $plusErgebnis, $malErgebnis);

#Ergebnisse anzeigen
echo "2 + 3 = $plusErgebnis\r\n2 * 3 = $malErgebnis";

Alles zusammen:

<?php

function rechne($a=0, $b=0, &$summ, &$product){
	$summ = $a + $b;
	$product = $a * $b;
	return array(
		"summ" => $summ,
		"product" => $product
	);
}

$plusErgebnis = 0;
$malErgebnis = 0;

rechne(2, 3, $plusErgebnis, $malErgebnis);

echo "2 + 3 = $plusErgebnis\r\n2 * 3 = $malErgebnis";

?>

Liebe Grüße

Win7User

...zur Antwort

Ja, bei den meisten Webseiten ist das möglich, wie dir Isendrak schon geschrieben hat.

Wenn du die Adresse einer Webseite bspw. also in einer Datenbank speichern willst, kannst du einfach die IP-Adresse speichern, da diese (oft) nicht so lang ist, wie die Domain.

Du könntest sie sogar noch in einen Integer umrechnen, um bei einem Hacking-Angriff nicht gleich zu zeigen, dass es IPs sind oder einfach, weil sie so noch drei Zeichen kürzer wird.

Ich habe das gerne verwendet, wenn ich eine Wette gewinnen wollte, dass ich eine Webseite besuchen kann, nur indem ich eine Zahl in die Adressleiste eingebe ...

Als Beispiel nehme ich einfach einmal die (/eine) IP von gutefrage.net.

Das ist diese hier: 213.95.206.42

Eine IPv4 ist in 4 Oktette unterteilt, die von Punkten getrennt werden. Den Integer-Wert davon kannst du so ausrechnen:

1. IP in Oktette aufteilen

Oktett 1: 213
Oktett 2: 95
Oktett 3: 206
Oktett 4: 42

2. Formel aufstellen und einsetzen

Formel
IPInt = (Oktett1 * 256^3) + (Oktett2 * 256^2) + (Oktett3 * 256) + (Oktett4)

Hochzahlen ausrechnen
IPInt = (Oktett1 * 16777216) + (Oktett2 * 65536) + (Oktett3 * 256) + (Oktett4)

Einsetzen
IPInt = (213 * 16777216) + (95 * 65536) + (206 * 256) + (42)

Ausrechnen (Taschenrechner)
IPInt = (213 * 16777216) + (95 * 65536) + (206 * 256) + (42)
      = 3579825706

Resultat notieren
3579825706

Wenn man diese Zahl (3579825706) jetzt in die Adressleiste eingibt, kommt man auf die Startseite von gutefrage.net. Die Zahl wird vom Browser wieder in die durch Punkte getrennte Schreibweise umgewandelt und von gutefrage.net wieder auf die Domain-URL weitergeleitet.

Liebe Grüße

Win7User

...zur Antwort

Hi pixelino,

Du kannst dir einmal dieses JS-Bin angucken. Da habe ich die Titel, die abgespielt werden, einfach in mehreren option-Elementen im HTML angegeben.

Nach klick auf den Button wird einfach der eingegebene Titel aus der Datalist abgespielt.

Liebe Grüße

Win7User

...zur Antwort
2 Forms in einer Datei

2 Formulare in eine Webseite einzubauen ist selbstverständlich möglich. Wie sinnvoll das ist, ist eine andere Sache, weil man immer nur ein Formular absenden kann und man, falls man nur lokal die Daten braucht, auch kein Formular daraus machen muss.

<?
if(isset($_POST["eintragen"] && isset($_POST["test"])){
    echo $_POST["test"];
}
?>

<form action="test.php" method="post">
	<input name="test" type="radio" value="test1" />
	Test1
	<input name="test" type="radio" value="test2" />
	Test2
</form>

<!--Einiges an code -->

<form action="test.php" method="post">
	<input name="eintragen" type="submit" value="Eintragen" />
</form>

Ist das dein Ernst!?

Du hast zwei gleiche Formulare. In einem hast du nur input-Felder und im anderem nur einen Submit-Button. Daraus resultiert folgendes:

  1. das erste Formular kann vom Benutzer nicht abgesendet werden
  2. beim Absenden des zweiten Formulars werden außer denen des Buttons keine Daten übertragen

Du hast also überhaupt nichts.

Wenn du noch etwas daraus machen willst, solltest du den Button, den du im zweiten Formular hast, in das erste einsetzen und das zweite löschen oder noch Daten einfügen (z.B. input, select, textarea, ...) und dann noch ein Submit-Element - Button oder input mit type submit - einfügen.

An der Serverseite musst du nicht den Wert eines Submit-Elements abfragen, da dieser normal nicht geändert wird. Stattdessen solltest du prüfen, ob die Werte, die du brauchst gesetzt und nicht leer sind.

Hier einmal der überarbeitete Code:

<?
if(isset($_POST["eintragen"] && isset($_POST["test"])){
    echo $_POST["test"];
}
?>

<form action="test.php" method="post">
	Test1
	<input name="test" type="radio" value="test1" />
	Test2
	<input name="test" type="radio" value="test2" />
    <input type='submit' value='Eintragen' name='eintragen'>
</form>

Liebe Grüße

Win7User

...zur Antwort

So wie pixelbarbier es geschrieben hat, sollte es funktionieren, es geht aber sicher auch kürzer und übersichtlicher:

var select = document.createElement('select');
select.onchange = HelloWorld
document.body.appendChild(select);

Bei dynamisch erstellten Elementen können Attribute auch direkt in der 'dot notation' (siehe https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Property_Accessors) angegeben werden. Die Funktion heißt also HelloWorld. Das solltest du selbstverständlich anpassen.

Alternativ dazu kannst du das Event auch mit EventTarget.addEventListener() anheften:

var select = document.createElement('select');
select.addEventListener('change', HelloWorld);
document.body.appendChild(select);

Liebe Grüße

Win7User

...zur Antwort