2016-02-25 2 views
8
Echo-Befehl ignoriert

ich $ _SESSION [ ‚Showroom‘] auf ‚aktiv‘, wenn eine bestimmte Seite in Wordpress Einstellung angezeigt wird:PHP-Sitzung Änderungen unerwartet in if-Anweisung und

if(get_the_ID()==6470||get_the_ID()==252){ 
    $_SESSION['showroom']='active'; 
} 

Ich habe dann zwei Arrays der Seiten, gegen die geprüft werden soll. Wenn die nächste angezeigte Seite NICHT in einem dieser Arrays ist, wird $ _SESSION ['showroom'] in 'inactive' geändert.

$allowed_templates = array('template-A.php', 
          'template-B.php', 
          'template-C.php', 
          'template-E.php', 
          'template-G.php'); 
$allowed_ids = array(6470,252); 

$template_name = get_page_template_slug(); 
$page_id = get_the_ID(); 

if(in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false){ 
    $_SESSION['showroom']='inactive'; 
} 

Die if-Anweisung funktioniert die meiste Zeit, aber manchmal sogar meine $ _SESSION [ ‚Showroom‘] Änderungen auf inaktiv, obwohl eines der Arrays ist wahr Rückkehr! Nach mehreren Teststunden kann ich nicht feststellen, wo das Problem liegt. Hallte aus den beiden Teilen der if-Anweisung gibt mir immer 2 trues oder 1 + 1 wahr falsch, aber nie 2 Falschen:

if(in_array($template_name,$allowed_templates)==false){echo 'TFALSE';} 
if(in_array($template_name,$allowed_templates)){echo 'TTRUE';} 
if(in_array($page_id,$allowed_ids)==false){echo 'IFALSE';} 
if(in_array($page_id,$allowed_ids)){echo 'ITRUE';} 

Was ich hier fehlt?

Vielen Dank im Voraus für jede Hilfe!

EDIT: Haben Tests fortgesetzt und fanden die folgende Anomalie:

if(in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false){ 
    $_SESSION['showroom']='inactive'; 
    echo 'SET TO INACTIVE'; 
} 

Die if-Anweisung $ _SESSION ändert [ ‚Showroom‘] zu ‚inaktiv‘, sondern ‚auf inaktiv gesetzt‘ NICHT Echo aus!

Hier passiert etwas Seltsames!

+0

'if (in_array ($ template_name, $ allowed_templates) && in_array ($ page_id, $ erlaubte_ids)) { $ _SESSION ['showroom'] = 'inaktiv'; } 'oder' if (in_array ($ template_name, $ allowed_templates) === false && in_array ($ page_id, $ erlaubte_ids) === false) { $ _SESSION ['showroom'] = 'inaktiv'; } ' –

+0

Was sehen Sie, wenn Sie all diese' if..echo' Anweisungen innerhalb des 'if' setzen, die die Sitzungsvariable setzen? – Barmar

Antwort

7

Problem gelöst. Mein Code war in Ordnung. Zwei fehlende Bilder haben WordPress zum Absturz gebracht. Dauerte 10 Stunden um herauszufinden, aber ich habe es gefunden. Danke an alle für ihre Hilfe.

2

Sie können Folgendes versuchen;

if(!in_array($template_name,$allowed_templates) && !in_array($page_id,$allowed_ids)){ 
    $_SESSION['showroom']='inactive'; 
} 

Bearbeiten: Damit können versuchen und brechen sie weiter ... ähnlich wie Ihre Beispiele

if(!in_array($template_name,$allowed_templates){ 
    echo "not in templates,"; 
} 
if(!in_array($page_id,$allowed_ids)){ 
    echo "not in ids,"; 
} 
if(!in_array($template_name,$allowed_templates) && !in_array($page_id,$allowed_ids)){ 
    echo "not in both\n"; 
} 

dann sehen, ob wir ein Ergebnis mit not in templates,not in ids, bekommen, aber keine Hinter not in both

+0

Danke Dave. In_array war das, was ich ursprünglich ausprobiert habe, aber dasselbe Problem. Zuflucht zu == falsch als Alternative, aber immer noch kein Glück! –

+0

Da 'in_array' einen booleschen Wert zurückgibt, gibt es absolut keinen Unterschied zwischen'! In_array() 'und' in_array() == false'. – Barmar

+0

@Barmar - Sie haben Recht, und das ist auch Anants Kommentar ähnlich. – Dave

0

Das Problem wird rein logisch. Schauen wir uns diese Aussage:

if (in_array($template_name,$allowed_templates)==false && in_array($page_id,$allowed_ids)==false) 

Welche übersetzt „Wenn die Vorlage nicht gültig UND Seite ist ungültig“

Dies bedeutet, dass beide Aussagen, die erfüllt werden muss, markieren Sitzung als inaktiv. Was ist, wenn die Vorlage in Ordnung ist, aber die Seite nicht gültig ist? Das sollte definitiv auch als inaktiv markiert werden.

Durch die Änderung der Anweisung zu lesen „Wenn die Vorlage nicht gültig OR Seite ist ungültig“ decken wir die ungültigen Fälle auf. Weil jeder von ihnen als ein ungültiger Zustand gilt und daher nur einer von ihnen falsch sein muss, damit alles falsch ist. (Die OR-Anweisung)

So Code-weise wäre es

if (in_array($template_name,$allowed_templates)==false || in_array($page_id,$allowed_ids)==false) 

und Sie eingestellt sind.

Wie und zusätzlich. Ich würde den Code strukturieren, wie Sie bemerkt haben, funktioniert. Was ist logischer.Das bedeutet, dass es als inaktiv markiert wird, wenn es als inaktiv behandelt werden soll, in allen anderen Fällen als "aktiv". Oder umgekehrt.

+0

danke, aber ich muss gegen BEIDE Arrays überprüfen. Die Sitzung wird NUR inaktiv, wenn die Vorlage UND die Seiten-ID ungültig ist. –