PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Datenbankwert ersetzen, aber nur die Ausgabe


nalye
2014-04-01, 12:34:41
Moin,

in Sachen PHP bin ich extrem unbewandert, so dass ich gerade an folgendem scheitere:

Ich hole mir Einen Wert aus der DB ("disabled") und möchte "1" durch "Ja" ersetzen und "0" durch "Nein", der Code ist folgender

while($r=mysql_fetch_object($sql)){
if (!is_array($groups[$r->userid])) {
$groups[$r->userid][0] = "none";
}
[...]
print("<td><a href=\"edit_user.php?uid=$r->uid\"><strong>$r->userid</strong></a></td>".
"<td>$r->disabled</td>".
"</td></tr>");
}

ezzemm
2014-04-01, 13:30:06
Es gibt sicher elegantere Wege, aber dies würde funktionieren:


$jein = Array('Nein', 'Ja');

while($r=mysql_fetch_object($sql)){
if (!is_array($groups[$r->userid])) {
$groups[$r->userid][0] = "none";
}
[...]
print("<td><a href=\"edit_user.php?uid=$r->uid\"><strong>$r->userid</strong></a></td>".
"<td>$jein[$r->disabled]</td>".
"</td></tr>");
}

Zum Verständnis, man kann es auch so schreiben:
$jein = Array('0' => 'Nein', '1' => 'Ja');

Und in die Ausgabe wäre dann $jein[0] bzw. $jein[1]

nalye
2014-04-01, 13:54:33
Hmmm, danke erstmal. Aber leider funktioniert das nicht (weiße Seite) :(


//Edit: Hab's:

print("<td><a href=\"edit_user.php?uid=$r->uid\"><strong>$r->userid</strong></a></td>".
[...]
"<td>");
if ($r->disabled == false) {echo "false";} else {echo "true";}
print("</td>".
"</td></tr>");

ezzemm
2014-04-01, 14:25:28
Naja, korrekterweise müsste die entsprechende Codezeile eh so lauten:
"<td>".$r->disabled."</td>"

bzw. so:
"<td>".$jein[$r->disabled]."</td>"

littlejam
2014-04-04, 21:57:35
Moin,

in Sachen PHP bin ich extrem unbewandert, so dass ich gerade an folgendem scheitere:

Ich hole mir Einen Wert aus der DB ("disabled") und möchte "1" durch "Ja" ersetzen und "0" durch "Nein", der Code ist folgender

while($r=mysql_fetch_object($sql)){
if (!is_array($groups[$r->userid])) {
$groups[$r->userid][0] = "none";
}
[...]
print("<td><a href=\"edit_user.php?uid=$r->uid\"><strong>$r->userid</strong></a></td>".
"<td>$r->disabled</td>".
"</td></tr>");
}

Und sowas?

$val=preg_replace("1","Ja",$r->disabled);
$val=preg_replace("0","Nein",$val);
echo $val;


Wahlweise ineinander verschachtelbar auch als Einzeiler oder mit ähnlichen Funktionen möglich.

Gruß

Gast
2014-04-04, 22:48:04
echo ($r->disabled == 1) ? "Ja" : "Nein";

Asaraki
2014-04-07, 03:15:30
Dürfte auf gängigen System massiv schneller sein, wenn du den Wert bereits im SQL entsprechend rausliest, da SQLServer normalerweise solche Dinge in einem Bruchteil der Zeit erledigen die du im PHP Code benötigst, ausserdem hält es den Code sauberer und du kannst, sollten noch weitere Werte dazukommen dies ohne Anpassung des PHP-Codes erledigen.

In meiner Erfahrung ist es immer am besten, soviele "Fälle" wie möglich jeweils am erstbesten Punkt zu erledigen. Gerade so kleine Dinge können später in komplexeren PHP-Projekten zu komischen Fehlern führen die du mühsam suchen musst, während du bei Datenfehlern ansonsten einfach das SQL kurz selbstständig laufen lassen kannst und gleich siehst ob alles passt.

Like :

SELECT
Werte,
DisabledTranslated =
CASE Disabled
WHEN '0' THEN 'Nein'
WHEN '1' THEN 'Ja'
ELSE 'Falls benötigt, im Zweifelsfalle lieber die Zelle schon constrainen auf nur 0 und 1'
END,
AndereWerteEtc...

Wollte nur den Performanceaspekt auch mal in die Runde werfen. Falls du natürlich den Wert anderswo zwangsläufig als 1/0 brauchst dann kannst du immer noch einfach beide Werte auslesen, also "Diasabled" und "DisabledTranslated" in einem Query.

P.S: Was mir noch aufgefallen ist, du scheinst du erwarten dass dein "Disabled" ein boolean ist, aber vermutlich liest du diesen als Char aus und kannst entsprechend nicht mit true/false arbeiten. Immer im Hinterkopf behalten.

Berni
2014-04-07, 03:21:07
Glaube nicht, dass sowas ein Haupt-Performanceproblem darstellen wird zumal PHP schon auch gut optimiert in den aktuellen Versionen...da gibts sicher entscheidendere Stellen zum Optimieren.

Marscel
2014-04-07, 03:51:15
Ja, sowas sollte selbst bei PHP nichts ausmachen. Und: Die Internationalisierung gleich als Query-Return einzusetzen ist eigentlich auch zu starkes Coupling.

Asaraki
2014-04-07, 04:21:59
Glaube nicht, dass sowas ein Haupt-Performanceproblem darstellen wird zumal PHP schon auch gut optimiert in den aktuellen Versionen...da gibts sicher entscheidendere Stellen zum Optimieren.

Sicherlich, aber danach wurde ja nicht gefragt. Und ob etwas die grösste Baustelle ist oder nicht sollte eigentlich kein Hindernis sein es nicht doch ebenfalls zu optimieren. Später sind es 12 Werte die nach dem Query noch translated werden und plötzlich sind es 900'000 Results * x Queries pro Sekunde.

Der Aspekt der Internationalisierung von Marscel ist natürlich korrekt, mir ging es mehr darum aufzuzeigen, dass man diese Dinge auch auf DB-Ebene lösen kann.
Sobald es um Internationalisierung geht wird man dies ja auch kaum per Statement lösen sondern entsprechende Patterns anwenden.