zielscheibe: radio button

Hallo,

ich habe einen Radio Button konfiguriert jedoch bekomme ich es nicht so hin das ich nur einen auswählen kann. Sobald ich den Name oder ID verwende bekomme ich einen Fehler angezeigt. mit der Post Methode bin ich auch nicht weiter gekommen anscheinend habe ich einen groben Schnitzer drin könnt ihr mir helfen?

Könnt Ihr mir helfen?

Die Kopf Datei ist eine HTML und eine PHP Datei welche die Ausgabe Datei ist. Die anderen zwei sind das Unterprogramm.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<form>
<label>Bitte geben sie das Kennzeichen hier ein: <input type="text" name="knz"></label><br>
<label>Bitte geben sie den Stundenpreis hier ein: <input type="text" name="sp"></label><br>
<label>Anhaengerkupplung verfügbar? <input type="radio" id="anhänger" name="an" value="true"><br>
<label>Anhaengerkupplung nicht verfügbar? <input type="radio" id="nichtanhänger" name="ab" value="nichtAnhaengerkupplung"><br>
<label><input type="submit" name="senden" value="Senden"></label>
</form>
</body>
</html>

<?php
if(isset($_GET["senden"])) 
{

if(isset($_GET["an"])) 
{
	$a=TRUE;
}
elseif($_GET["ab"]) {

	$a=FALSE;
}
require_once "abpkw.php";

$pkw1=new PKW($_GET["knz"],$a);
$pkw1->setStundenpreis($_GET["sp"]);

$pkw1->ausgabePKWDaten();
PKW::bestandAusgeben();

$pkw1->ausleihen();

PKW::bestandAusgeben();

$pkw1->ausleihen();
PKW::bestandAusgeben();
//$pkw1->setFunktionsfaehig(FALSE); //zum überprüfen
$pkw1->zurueckGeben();
//	$pkw1->setFunktionsfaehig(FALSE); //zum überprüfen
PKW::bestandAusgeben();
}

?>

--------------------------------PHPTEIl 1-------------------

<?php
abstract class Fahrzeug
{
protected $stundenpreis;
protected $kennzeichen;
protected $funktionsfaehig;

public function __construct($knz)
{
	$this->kennzeichen=$knz;
	$this->funktionsfaehig=TRUE;
}
public function setStundenpreis($sp) 
{
	$this->stundenpreis=$sp;
}
public function getStundenpreis() 
{
	return $this->stundenpreis;
}
public function setFunktionsfaehig($ff) 
{
	$this->funktionsfaehig=$ff;
}
}
?>

-------------------------PHP TEil2-----------------------------------

<?php
require_once "abfahrzeug.php";

class PKW extends Fahrzeug
{
private static $bestand;
private $anhaengerkupplung;

public function __construct($knz,$ak) 
{
	parent::__construct($knz);
	$this->anhaengerkupplung=$ak;
	self::$bestand++;
}
public function ausleihen() 
{
	if(self::$bestand>=1) 
	{
		self::$bestand--;
	}
}
public function zurueckGeben() 
{
	if($this->funktionsfaehig==TRUE) 
	{
		self::$bestand++;	
	}
}
public function ausgabePKWDaten() 
{
	echo "<h1>Daten des PKW mit dem Kennzeichen: ".$this->kennzeichen."</h1>";
	echo "Aktueller Stundenpreis: ".$this->getStundenpreis()." Euro.<br>";
	if($this->funktionsfaehig==TRUE) 
	{
	echo "Fahrzeug ist <b>funktionsfaehig</b><br>";
	}
	else 
	{
	echo "Fahrzeug ist nicht <b>funktionsfaehig</b><br>";
	}
	if($this->anhaengerkupplung==TRUE) 
	{
	echo "Anhaengerkupplung ist vorhanden<br>";
	}
	else 
	{
	echo "Anhaengerkupplung ist nicht vorhanden<br>";
	}
	
}
public static function bestandAusgeben() 
{
	echo "<p>".self::$bestand." PKW verfügbar</p>";	
}
}
?>
  1. Hallo zielscheibe,

    ich habe einen Radio Button konfiguriert jedoch bekomme ich es nicht so hin das ich nur einen auswählen kann.

    https://wiki.selfhtml.org/wiki/HTML/Formulare/input/Radio-Buttons_und_Checkboxen#Radio-Buttons

    Bis demnächst
    Matthias

    --
    Pantoffeltierchen haben keine Hobbys.
    ¯\_(ツ)_/¯
  2. Hi,

    <label>Anhaengerkupplung verfügbar? <input type="radio" id="anhänger" name="an" value="true"><br>
    <label>Anhaengerkupplung nicht verfügbar? <input type="radio" id="nichtanhänger" name="ab" value="nichtAnhaengerkupplung"><br>
    

    Radiobuttons müssen, damit sie als zusammengehörig erkannt werden können, denselben name-Wert haben. Bei Dir haben die beiden Radiobuttons unterschiedliche name-Werte.

    cu,
    Andreas a/k/a MudGuard

    1. Hallo MudGuard, ich habe das schon versucht nur bekomme ich dann bei der Ausgabe zwei Fehler angezeigt.

      
      <form>
      <label>Bitte geben sie das Kennzeichen hier ein: <input type="text" name="knz"></label><br>
      <label>Bitte geben sie den Stundenpreis hier ein: <input type="text" name="sp"></label><br>
      <label>Anhaengerkupplung verfügbar? <input type="radio" id="anhaenger" name="an" value="true"><br>
      <label>Anhaengerkupplung nicht verfügbar? <input type="radio" id="nichtanhaenger" name="an" value="nichtAnhaengerkupplung"><br>
      <label><input type="submit" name="senden" value="Senden"></label>
      </form>
      </body>
      </html>
      
      <?php
      if(isset($_GET["senden"])) 
      {
      
      if(isset($_GET["anhaenger"])) 
      {
      	$a=TRUE;
      }
      elseif($_GET["nichtanhaenger"]) {
      
      	$a=FALSE;
      

      1. Guten Abend Ich schließe mich dem Thread meines Schulkollegensmal an.

        <tr>
           <td>Mit oder Ohne Anhänger?</td>
           <td> 
               <input name="nameanhaenger" type="radio" id="mitAnhaenger" value="TRUE" checked><label 
                for="MitAnhänger">Mit</label>
               <input name="nameanhaenger" type="radio" id="ohneAnhaenger" value="FALSE"><label 
                for="OhneAnhänger">Ohne</label>
           </td>
        </tr>
        

        Wenn ich nun folgende Radio-Boxen habe, bei denen ich id="ohneAnhaenger" ausgewählt habe und mit dieser Auswahl weiter in PHP arbeiten will.

        Dann müsste ich doch theoretisch den Wert "FALSE" durch value="FALSE" einer Variable zuweisen können. In dem Fall so:

        $a=$_GET["nameanhaenger"];

        bzw

        $a=$_POST["nameanhaenger"];

        Sodass $a = FALSE wäre.

        oder irre ich mich, und es wird der Wert von id="..." zugewiesen?

        Grüße

        1. Tach!

          Dann müsste ich doch theoretisch den Wert "FALSE" durch value="FALSE" einer Variable zuweisen können.

          Ja, aber ...

          In dem Fall so:

          $a=$_GET["nameanhaenger"]; bzw $a=$_POST["nameanhaenger"];

          Sodass $a = FALSE wäre.

          ... "FALSE" ist nicht FALSE. Ein String ist kein boolescher Wert und wenn du ihn mit true oder false vergleichst oder ihn in einem booleschen Kontext auswertest gelten PHPs Konvertierungsregeln.

          Nimm var_dump(), um den konkreten Wert inklusive Typ anzuschauen, der in einer Variable steht.

          oder irre ich mich, und es wird der Wert von id="..." zugewiesen?

          Du irrst in der Form, dass HTML irgendwas von PHP und dessen Typsystem weiß. Alle Formulardaten werden als String übertragen und stehen auch als solche in $_GET/$_POST.

          dedlfix.

      2. Hallo zielscheibe,

        $_GET kann man zwar nehmen, aber du solltest dem form method="post" geben und $_POST abfragen. Das ist die übliche Vorgehensweise. Man kann auch $_REQUEST verwenden, darin sind $_GET und $_POST vereinigt.

        Nach submit fragst du zuerst isset($_POST["an"]) ab, das ist FALSE wenn kein Radiobutton angeklickt wurde.

        Und dann fragst du $_POST["an"] ab und findest darin den Wert des value Attributs des ausgewählten Radiobuttons.

        Rolf

        --
        sumpsi - posui - clusi
    2. Hallo,

      <label>Anhaengerkupplung nicht verfügbar? <input type="radio" id="nichtanhänger" name="ab" value="nichtAnhaengerkupplung"><br>

      Radiobuttons müssen, damit sie als zusammengehörig erkannt werden können, denselben name-Wert haben. Bei Dir haben die beiden Radiobuttons unterschiedliche name-Werte.

      Das auf jeden Fall. Aber was ist mit den Umlauten, sind doch gar nicht erlaubt innerhalb id="" oder?

      lg

      1. @@Lisa

        Aber was ist mit den Umlauten, sind doch gar nicht erlaubt innerhalb id="" oder?

        Doch. Außer Leerzeichen u.ä.[1] sind in IDs alle Zeichen erlaubt.

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann

        1. genauer: außer Leerzeichen (U+0020), Tabulatorzeichen (U+0009), LINE FEED (LF U+000A), FORM FEED (FF U+000C) und CARRIAGE RETURN (CR U+000D) ↩︎

  3. Liebe zielscheibe,

    habe ich einen groben Schnitzer drin könnt ihr mir helfen?

    die Frage, ob eine Anhängerkupplung verfügbar ist, oder nicht, regelt man einfacher mit einer Checkbox:

    <label>
      Anhängerkupplung verfügbar?
      <input type="checkbox" name="kupplung">
    </label>
    

    Auf PHP-Seite hat man bei ausgefüllter Checkbox das hier:

    Array (
        [kupplung] => on
    )
    

    Hat der Nutzer die Checkbox nicht angewählt, fehlt der Eintrag in $_POST völlig. Daher prüft man das so:

    $kupplung_vorhanden = array_key_exists('kupplung', $_POST);
    

    Wenn Du aber absolut auf einem Radio-Button bestehst, dann benötigst Du zwei mögliche Werte für ein und denselben Namen:

    <p>
      <label>
        <input type="radio" name="kupplung" value="ja">
        Anhängerkupplung vorhanden
      </label>
      <label>
        <input type="radio" name="kupplung" value="nein" checked>
        keine Anhängerkupplung
      </label>
    </p>
    

    Ich verwende das checked-Attribut, damit auf jeden Fall eine der beiden Möglichkeiten verwendet wird - standardmäßig eben keine Anhängerkupplung.

    Die PHP-Seite sieht dann eben so aus:

    $kupplung_vorhanden = (
      array_key_exists('kupplung', $_POST)
      && $_POST['kupplung'] == 'ja'
    );
    

    Wie Du diese Ideen in Deinen Code integrierst, überlasse ich jetzt Dir.

    Liebe Grüße

    Felix Riesterer

    1. @@Felix Riesterer

      die Frage, ob eine Anhängerkupplung verfügbar ist, oder nicht, regelt man einfacher mit einer Checkbox […].

      Ja. Aber zwei Radiobuttons „ja“/„nein“ können durchaus sinnvoll sein, z.B. um Nutzer explizit zu einer Entscheidung dafür oder dagegen zu bewegen, d.h. keine Interaktion weder als Zustimmung noch als Ablehnung zu werten …

      Ich verwende das checked-Attribut, damit auf jeden Fall eine der beiden Möglichkeiten verwendet wird

      … dann ohne Vorauswahl. Man kann die Radiobuttons required machen und validieren, ob einer gewählt wurde.

      Und zusammengehörige Radiobuttons sollten üblicherweise in einem fieldset-Element (mit legend) gruppiert sein.

      ☞ Jemand Kätzchen?

      Was man auf keinen Fall nehmen sollte: eine Drop-down-Auswahl.

      <select name="kittens">
      	<option value="yep">ja</option>
      	<option value="nope">nein</option>
      </select>
      

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
      1. Lieber Gunnar,

        Ja. Aber

        ;-)

        zwei Radiobuttons „ja“/„nein“ können durchaus sinnvoll sein, z.B. um Nutzer explizit zu einer Entscheidung dafür oder dagegen zu bewegen, d.h. keine Interaktion weder als Zustimmung noch als Ablehnung zu werten … [...] Man kann die Radiobuttons required machen und validieren, ob einer gewählt wurde.

        Ja, kann man. Wenn man es so haben will.

        Und zusammengehörige Radiobuttons sollten üblicherweise in einem fieldset-Element (mit legend) gruppiert sein.

        Was macht das fieldset-Element geeigneter, als ein simples p oder li? Beim fieldset sehe ich einen Vorteil, wenn man gleich auch noch das zugehörige legend-Element nutzt. Ansonsten ist mir eine semantische Textstruktur lieber, da ein fieldset ohne legend in meinen Augen (hat nix mit der Spec zu tun) nicht zwingend einen Block-Kontext bedeutet.

        Liebe Grüße

        Felix Riesterer

        1. @@Felix Riesterer

          Und zusammengehörige Radiobuttons sollten üblicherweise in einem fieldset-Element (mit legend) gruppiert sein.

          Was macht das fieldset-Element geeigneter, als ein simples p oder li?

          Seine Rolle …

          Beim fieldset sehe ich einen Vorteil, wenn man gleich auch noch das zugehörige legend-Element nutzt.

          Ja, das gehört dazu.

          Screenreader können dann bei jedem Eingabeelement von übergeordneten fieldset die legend mit vorlesen. „Radiobutton ja“ und „Radiobutton nein“ allein sind wenig aussagekräftig; deswegen „Magst du Kätzchen? Radiobutton ja“ und „Magst du Kätzchen? Radiobutton nein“.

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann