Hallo, Gast! (Registrieren)

Letzte Ankündigung: Sicherheitsupdate: MyBB 1.8.29 veröffentlicht (30.10.21)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
PHP: if-Bedingung - Wo/Wie? (profilfeld !empty ODER nur bei best. guid)
#1
Moin!

Ich habe eine PHP-Seite, bei der ich u.a. Usernamen ausgeben lasse, sofern sie in einem bestimmten Profilfeld eine vorgeschriebene Angabe machen.
Z.B. Alle User, die im Profilfeld fid4 die Angabe "A" machen, gebe ich über ein Template_Bit aus und alle User, die in fid4 "B" angeben, gebe ich über ein anderes Bit aus.
Konkreter: Die Spieler geben ihre Herkunfts- (fid1) und Aufenthaltszeit (fid4) an und ich ermittle alle Zeitreisende, weil dabei ja Herkunft != Aufenthalt ist.

Jetzt ist mein Problem:
Ich habe eine Abfrage die alle Usernamen ausgeben soll, die in fid1 und fid4 unterschiedliche Angaben gemacht haben, da beide fids zwar anders heißen, aber die gleichen Antwortmöglichkeiten zulassen.
quasi fid1 != fid4
Nur führt diese Abfrage dazu, dass auch alle User angezeigt werden, die bisher noch KEINE ANGABE in fid4 gemacht haben. Ist ja irgendwie auch logisch, weil dann fid1 und fid4 gar nicht identisch sein können.

Mein Gedanke war es also eine if-Bedingung hinzuzufügen, die eine Ausgabe nur erlaubt, sofern fid4 nicht leer ist ODER (ginge auch) diese Abfrage nur gemacht wird, wenn die User, zu denen die fids gehören, nicht der Usergruppe 2 entsprechen. Also nicht die Betrachter, sondern die Besitzer der Profilfelder. - Verständlich?

Das habe ich bisher:
PHP-Code:
$times=$db->query("SELECT * FROM mybb_users LEFT JOIN mybb_userfields ON mybb_users.uid = mybb_userfields.ufid WHERE fid4 != fid1 ORDER BY mybb_users.username ASC") ;
    
while(
$result=$db->fetch_array($times)) {
$userid $result['uid'];
$username $result['username'];
$zeitreise $result['fid4'];
eval(
"\$reise_times .= \"".$templates->get("bit_reisende")."\";"); 


Wo muss also die if-Abfrage hin und wie muss ich sie formulieren um
entweder a) if(!empty .... fid4???
oder b) die guid !=2 einzubauen.

Danke für mögliche Hilfen oder Tipps für eigenständiges Denken. Smile
LG

P.S.: Habe Forensoftware u. alles Weitere auf aktuellstem Stand.
Zitieren
#2
Die if-Abfrage einfach erweitern um:

if (!empty($deinFeld1) && !empty($deinFeld2)) {}
Zitieren
#3
Moin,
danke für die fixe Antwort!

Das Argument, dass ich beide abfragen muss, kann ich nachvollziehen.
Aber ich weiß z.B. gar nicht wie ich "deinFeld" anspreche.
$fid4 ergibt keinen Sinn, oder?

Nach meinem Verständnis wäre es so:
PHP-Code:
if(!empty($fid4) && !empty($fid1))
        {
$times=$db->query("SELECT * FROM mybb_users LEFT JOIN mybb_userfields ON mybb_users.uid = mybb_userfields.ufid WHERE fid4 != fid1 ORDER BY mybb_users.username ASC") ;
    
while($result=$db->fetch_array($times)) {
$userid $result['uid'];
$username $result['username'];
$zeitreise $result['fid4'];
eval(
"\$reise_times .= \"".$templates->get("bit_reisende")."\";"); 



Funktioniert aber nicht, was mich auch nicht wundert. 
"Nur" $fid1 kommt mir falsch vor. - Was übersehe ich?
Zitieren
#4
Nur mal schnell drüber geschaut, ohne das ich es richtig verstanden habe. Wink 

Definiere eine zweite Variable für fid1.
Die if-Anweisung steuert das "eval"

Beispiel:

PHP-Code:
$times=$db->query("SELECT * FROM mybb_users LEFT JOIN mybb_userfields ON mybb_users.uid = mybb_userfields.ufid WHERE fid4 != fid1 ORDER BY mybb_users.username ASC") ;
    
while($result=$db->fetch_array($times)) {
$userid $result['uid'];
$username $result['username'];
$zeitreise $result['fid4'];
$sonstwas $result['fid1'];

if (!empty(
$sonstwas) && !empty($zeitreise))
{
eval(
"\$reise_times .= \"".$templates->get("bit_reisende")."\";"); 

else
{
eval(
"\$reise_times .= \"".$templates->get("bit_sonstwas")."\";");

Zitieren
#5
Man könnte auch die Ausgabe überspringen, wenn fid4 leer ist.

PHP-Code:
$times=$db->query("SELECT * FROM mybb_users LEFT JOIN mybb_userfields ON mybb_users.uid = mybb_userfields.ufid WHERE fid4 != fid1 ORDER BY mybb_users.username ASC") ;
    
while($result=$db->fetch_array($times)) {
if(empty(
$result['fid4'])) {
    continue;
}
$userid $result['uid'];
$username $result['username'];
$zeitreise $result['fid4'];
eval(
"\$reise_times .= \"".$templates->get("bit_reisende")."\";"); 

Zitieren
#6
@Schnapsnase: Hatte ich auch überlegt, aber iwie gehofft, dass es eine schlankere Variante gibt xD - Ich wollte auf ein weiteres Bit verzichten. Der Übersichtslichkeithalber ...

@doylecc: Danke! Auf die Idee bin ich gar nicht gekommen. Danke! Funktioniert super Smile
Zitieren