Bei Zahlenwert wird nur erste Ziffer an Funktion übergeben

Voltex

Mitglied
Hallo Community,
ich hab mal wieder ein kleines Problem und bin sicher, dass es sich schnell lösen lässt. Jedoch fehlt mir im Moment jede Idee.

Ich lasse für das Feld "Beziehungsstatus" eines Profils einen Zahlenwert an die Datenbank senden. Beim Aufrufen des Profils wird dieser Zahlenwert ausgelesen, verglichen und anschließend der zugehörige Beziehungsstatus ausgegeben. Das Ganze sieht so aus:

profileedit.php
PHP:
<td>Beziehungsstatus:</td>  <td> 
                  <select name="rel_ship_state"> 
                    <option value="0" <?php if($value['rel_ship_stat'] == "0") { echo "selected";} ?> >Keine Angabe
                    </option> 
                    <option value="1" <?php if($value['rel_ship_stat'] == "1") { echo "selected";} ?> >Solo und auf der Suche
                    </option> 
[...]
                    <option value="10" <?php if($value['rel_ship_stat'] == "10") { echo "selected"; }?> >Auf den richtigen Partner warten
                  </select></td>

profile.php
PHP:
echo $value['rel_ship_stat']."<br>";
echo "Beziehungsstatus: "; compare_relationship($value['rel_ship_stat']);

(Das echo $value['rel_ship_stat']; hab ich eingebaut ob auch der Zehnerwert ausgegeben wirt. Hier stimmt der Wert noch.)

compare.php
PHP:
function compare_relationship($value)
{
            if ($value['rel_ship_stat'] == "0")
            {
              echo "Keine Angabe";
            }
           else if ($value['rel_ship_stat'] == "1")
            {
              echo "Solo und auf der Suche";
            }
[...]
            else if ($value['rel_ship_stat'] == "10")
            {
              echo "Auf den richtigen Partner warten";
            } 
}

So, jetzt kommt das witzige an der Sache. Rufe ich die profileedit.php auf, wird in der Dropdownbox auch der entsprechende Beziehungsstatus angezeigt. Rufe ich die profile.php auf, zeigt er mit den Beziehungsstatus der zur 1 gehört, also "Solo und auf der Suche".

Was ich erreichen möchte dürfte klar sein: ich möchte dass er auf der profile.php auch den Wert anzeigt, der zur 10 und nicht zur 1 gehört. In der datenbank wurde 10 als Wert korrekt gespeichert.

Ich hoffe Ihr könnt mir helfen.

so far,
Christian
 
Moin,

== "1" prüft nicht den Typ, es ist somit auch ein boolescher Vergleich, der prüft, ob der Wert true ergibt, was bei 10 der Fall ist.

als Lösung könntest du bspw. diesen Vergleich ans Ende stellen oder auch den Typ prüfen per ===
 
Wie ist deine Spalte in der DB definiert? Wenn du nur 1 Zeichen erlaubst, kann es daran liegen, dann ignoriert er alle weiteren Zeichen.

Eine weitere Möglichkeit wäre ein Typenvergleich unter PHP, dieser wird mit "===" durchgeführt.

Code:
1 == "1" true
1 === "1" false


// ach da war ja schon einer schneller, aber doppelt hält besser ^^
 
wenn ich per === den Typ prüfe, ist das Ergebnis noch das gleiche. Und was genau meinst du mit "ans Ende stellen"?

Die Tabelle in der DB ist als INT mit 2 Zeichen festgelegt
 
Alternative:
PHP:
switch($value) { 
    case '0': 
        print 'Keine Angabe'; 
    break; 
    case '1': 
        print 'Solo und auf der Suche'; 
    break; 
    case '10': 
        print 'Auf den richtigen Partner warten'; 
}
 
Zuletzt bearbeitet:
Hab ich versucht, klappt leider auch nicht, aber ich habe mir anstatt des Beziehungsstatusses einfach mal den Wert der Variable innerhalb der Funktion ausgeben Lassen. Dieser ist 1. die 0 wurde also "unter den Tisch" fallen gelassen. Woran könnte das liegen?

Also, es steht eine 10 in der Datenbank, der Wert wird auch als 10 Ausgelesen. Dann an die Funktion übergeben. Dabei schens die 0 wohl wegzufallen... irgendwie
 
Kann ja garnicht funktionieren, da innerhalb der Funktion $value['rel_ship_stat'] unbekannt ist und der passende Wert in $value steht. So die Theorie, also versuchs mal so:

PHP:
function compare_relationship($value) 
{ 
	if ((int)$value === 0) { 
		echo "Keine Angabe"; 
	} 
	elseif ((int)$value === 1) { 
		echo "Solo und auf der Suche"; 
	} 
	elseif ((int)$value === 10) { 
		echo "Auf den richtigen Partner warten"; 
	}  
}

//edit: Habs oben bei meiner Alternative auch mal geändert.
 
Zuletzt bearbeitet:
Also das Problem hat sich irgendwie gerade von selbst gelöst. Auf einmal hats funktioniert. Warum weis ich nciht. Dennoch danke für eure Hilfe. Falls es wieder zu Problemen kommt werde ich diese Tipps nochmal ausprobieren ;)
 
Zurück