Dropdown oder Radio Button für Geschlecht

04/22/2020 10:30 {Skrillex}#1
Hi,
ich möchte gerne für meine Seite ein Dropdown menü oder 3 Radio Button für das Geschlecht machen. Zugleich möchte ich aber auch, dass wenn bereits inhalt in der datenbank ist, dass dann das richtige Geschlecht wirklich angezeigt wird.

Bisher habe ich es folgendermaßen gelöst:


PHP Code:
function getCustomerSex() {
    
$user_infos ORM::for_table('accounts')->where('Kundennummer'$_SESSION["login_user"])->find_one();
    
$Geschlecht $user_infos->Geschlecht;
    if(
$Geschlecht == 0){
        echo
'<select name="sex" class="form-control">
        <option value="0">keine Angabe</option>
        <option value="1">Männlich</option>
        <option value="2">Weiblich</option>
        <option value="3">Divers</option>
       </select>'
;
      
    }
    else if(
$Geschlecht == 1){
        echo
'<select name="sex" class="form-control">
        <option value="1">Männlich</option>
        <option value="2">Weiblich</option>
        <option value="3">Divers</option>
        <option value="0">keine Angabe</option>
       </select>'
;
   
    }
    else if(
$Geschlecht == 2){
        echo
'<select name="sex" class="form-control">
        <option value="2">Weiblich</option>
        <option value="3">Divers</option>
        <option value="0">keine Angabe</option>
        <option value="1">Männlich</option>
       </select>'
;
    }
    else if(
$Geschlecht == 3){
        echo
'<select name="sex" class="form-control">
        <option value="3">Divers</option>
        <option value="0">keine Angabe</option>
        <option value="1">Männlich</option>
        <option value="2">Weiblich</option>
       </select>'
;
    }   

Ich persönlich glaube aber, dass man diesen code massiv einkürzen kann.

Eventuell weiß ja einer wie man das am besten umsetzen kann.

Vielen dank und Lieben Gruß
04/22/2020 12:46 False#2
Du brauchst nur einmal das echo im Code, dann musst du nur bei der richtigen Option das Attribute selected dranhängen.
04/25/2020 09:36 Legithos#3
Quote:
Originally Posted by {Skrillex} View Post
PHP Code:
function getCustomerSex() {
    
$user_infos ORM::for_table('accounts')->where('Kundennummer'$_SESSION["login_user"])->find_one();
    
$Geschlecht $user_infos->Geschlecht;
    if(
$Geschlecht == 0){
        echo
'<select name="sex" class="form-control">
        <option value="0">keine Angabe</option>
        <option value="1">Männlich</option>
        <option value="2">Weiblich</option>
        <option value="3">Divers</option>
       </select>'
;
      
    }
    else if(
$Geschlecht == 1){
        echo
'<select name="sex" class="form-control">
        <option value="1">Männlich</option>
        <option value="2">Weiblich</option>
        <option value="3">Divers</option>
        <option value="0">keine Angabe</option>
       </select>'
;
   
    }
    else if(
$Geschlecht == 2){
        echo
'<select name="sex" class="form-control">
        <option value="2">Weiblich</option>
        <option value="3">Divers</option>
        <option value="0">keine Angabe</option>
        <option value="1">Männlich</option>
       </select>'
;
    }
    else if(
$Geschlecht == 3){
        echo
'<select name="sex" class="form-control">
        <option value="3">Divers</option>
        <option value="0">keine Angabe</option>
        <option value="1">Männlich</option>
        <option value="2">Weiblich</option>
       </select>'
;
    }   

Die Lösung hast du von False ja schon bekommen. Was ich dir noch bezüglich deinen Variablen hinsichtlich der Übersichtlichkeit raten würde, wäre die Variablen in englischer Sprache zu halten ($Geschlecht -> $gender) und klein zu schreiben. Recht viel kürzen würde ich meiner Meinung nach bei dem Code nicht, letztendlich bleibt es gleich, ob du die IF-Abfrage über das komplette SELECT oder in den einzelnen OPTIONS machst. Je nachdem, ob der Benutzer gezwungen ist ein Geschlecht zu wählen könntest du auch noch eine zusätzliche Option mit dem Attribut disabled "Bitte wählen..." hinzufügen, dieses selected machen und das SELECT mit required versehen.

EDIT: Ich revidiere, es geht kürzer! Wenn du deine Options als Datenbankeintrag machst und die dann für das SELECT rausholst. Kannst mir gerne eine PN schreiben wenn du nicht weiter weißt :)
04/25/2020 10:40 False#4
Quote:
Originally Posted by Legithos View Post
Recht viel kürzen würde ich meiner Meinung nach bei dem Code nicht, letztendlich bleibt es gleich, ob du die IF-Abfrage über das komplette SELECT oder in den einzelnen OPTIONS machst.
Das würde ich so nicht sagen, aus den 38 Zeilen kann man schnell 18 machen.
Wenn man will könnte noch mehr kürzen, aber ich wollte dir nur ein Beispiel liefern das es sehr wohl viel ausmacht (mehr als die Hälfte weniger).

PHP Code:
function getCustomerSex()
{
    
$userInfo ORM::for_table('accounts')->where('customerNumber'$_SESSION["user"])->find_one();
    
$gender $userInfo->gender;

    
$unselected $gender === ' selected' '';
    
$male $gender === ' selected' '';
    
$female $gender === ' selected' '';
    
$diverse $gender === ' selected' '';
    return 
printf('
        <select name="sex" class="form-control">
            <option value="0"%s>keine Angabe</option>
            <option value="1"%s>Männlich</option>
            <option value="2"%s>Weiblich</option>
            <option value="3"%s>Divers</option>
        </select>'
$unselected$male$female$diverse);

04/27/2020 11:52 {Skrillex}#5
Danke für eure Antworten. Ich habe jetzt doch radio Button genutzt. Ich habe sowieso meinen kompletten code überarbeitet. Ich nutze nurnoch englische variablen etc.

Mein code: mit twig + php programmiert:

PHP Code:
<div class="form-group">
            <
label for="sex" class=" form-control-label">Geschlecht</label><br>
            <
table>
            <
td><input type="radio" {% if sex == %} checked {% endif %} name ="sex"  value="1">
            <
label style="margin-right: 10 " for="male">Männlich</label></td>
            <
td><input type="radio" {% if sex == %} checked {% endif %} name ="sex"  value="2">
            <
label style="margin-right: 10 " for="female">Weiblich</label></td>
            <
td><input type="radio"{% if sex == %} checked {% endif %} name ="sex"  value="3">
            <
label style="margin-right: 10 " for="diverse">Divers</label></td>
            <
td><input type="radio" {% if sex == %} checked {% endif %} name ="sex"  value="0">
            <
label style="margin-right: 10 " for="nothing">keine Angabe</label></td>
            </
table>
        
      </
div
04/27/2020 16:48 lnqlorlouz#6
Quote:
Originally Posted by {Skrillex} View Post
Danke für eure Antworten. Ich habe jetzt doch radio Button genutzt. Ich habe sowieso meinen kompletten code überarbeitet. Ich nutze nurnoch englische variablen etc.

Mein code: mit twig + php programmiert:

PHP Code:
<div class="form-group">
            <
label for="sex" class=" form-control-label">Geschlecht</label><br>
            <
table>
            <
td><input type="radio" {% if sex == %} checked {% endif %} name ="sex"  value="1">
            <
label style="margin-right: 10 " for="male">Männlich</label></td>
            <
td><input type="radio" {% if sex == %} checked {% endif %} name ="sex"  value="2">
            <
label style="margin-right: 10 " for="female">Weiblich</label></td>
            <
td><input type="radio"{% if sex == %} checked {% endif %} name ="sex"  value="3">
            <
label style="margin-right: 10 " for="diverse">Divers</label></td>
            <
td><input type="radio" {% if sex == %} checked {% endif %} name ="sex"  value="0">
            <
label style="margin-right: 10 " for="nothing">keine Angabe</label></td>
            </
table>
        
      </
div
Ich würde nicht mehr zu Tabellen-Layouts tendieren.
Und das for="sex" in deinem Label-Element bezieht sich immer auf eine Id, nicht auf den name="sex". Da fehlen eigentlich noch Id's. ([Only registered and activated users can see links. Click Here To Register...])
Und bei deinem Inline-Style margin-right: 10, fehlt eine Einheit (px, vh, vw, em, rem...)