Doğru prosedürü takip değilse?

5 Cevap php

Ben bir İçerik Yönetim Sistemi üzerinde çalışıyor, ve şimdiye kadar çok iyi değilim.

I'm trying to get the system to work with a maintenance mode system. This is the code in the script to display the maintenance stuff:

if ($maintenance['value'] == "1") {?>
    <div id="content">
     <div id="errmsg">
      <?php echo $maintenance['notes']; ?>
     </div>
    </div>
<? } else {?>

   <h1><?php echo $title; ?></h1>
   <hr /><br />
   <div id="content">
    <?php echo $contents; 
     if (!$content) { 
      include    ('includes/error/404.php');}?>
   </div>   			
<? } ?>

Ben $ bakım ['değer'] değişkeni olması gerektiği gibi çalıştığını doğrulamak, ancak komut o bu kısmı olması gerektiği gibi çalışmıyor. Değer şu anda 1 ayarlı, ama yine de else şeyler görüntüler.

Herhangi bir fikir?

5 Cevap

Ben ikinci CASSY önerdiği gösterimde. Benim notlar:

$maintenance['value'] tamsayı {[(2 tutan bile, ben PHP gerçekten veritiplerini nasıl işleyeceğini gerçekten emin değilim ama sadece this site kontrol ve buna göre, kendi ifadesi gerçek olarak değerlendirmek gerekir )]} (Eğer dizeye karşılaştırdığınız "1").

Diğer değer nedir, $maintenance['value'] tutabilir? "0"? Eğer öyleyse kaydetmek tarafta olmak için, değişken, neden sadece TRUE atamaz ve FALSE? Neyse, belki sadece bu gibi ifadeyi yazmak için deneyebilirsiniz:

<?php if ($maintenance['value']) : ?>

$maintenance['value'], bu değerlerin herhangi tutan bu TRUE olarak değerlendirir:

  • gerçek
  • 1
  • herhangi bir tamsayı! = 0
  • "1"
  • herhangi bir dize! = "0"

Sen farklı bir sözdizimi kullanmayı deneyebilirsiniz. Bunun yerine kıvırcık parantez açmak, kullanabilirsiniz

<?php if ($maintenance['value'] == "1") : ?>

    <!-- HTML STUFF HERE -->

<?php ELSE: ?>

    <!-- more html stuff here -->

<?php ENDIF; ?>

Benim deneyim, PHP çözümleyici bu iyi ayrıştırmak.

Ayrıca bakınız the PHP manual for the alternative syntax

Bu sizin else deyimi aşağıdaki} fazladan var görünür.

Nasıl yaklaşımın tersine hakkında?

if (!isset($maintenance['value'])) { ?>

// echo normal non-maintenance stuff

<?php } else { ?>

// display maintenance stuff

<?php

}

Eğer maintenance değişkeni ayarlamak, ya da olup olmadığını bilmek bu şekilde. Ve umarım, belki de bir echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>"; neden görmek ile.

Ayrıca, if/else ifadeleri aracılığıyla ilk çalışır tipik iğrenç ve unutkan olduğum için, size değil, canlı kodu atama, operatör daha, bir karşılaştırma kullanılarak emin misin?

Mesaj OP Yorum aşağıdaki yanıt düzenlenebilir:

that might not work, the value in the database is either 1 or 0. I should have made this clearer in OP.

Eğer $ bakım ['değer'] boolean olduğunu biliyorsanız, 1 veya 0, o zaman neden bu bilgiyi kullanmak ve yapmak değil:

if ($maintenance['value'] == "0") { ?>

// echo normal non-maintenance stuff

<?php } elseif ($maintenance['value'] == "1") {

// display maintenance stuff

<?php } else { 

echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";

}

Sonra ne oluyor tam olarak biliyorum. Olsa da değil, tabii ki, zorunlu olarak why. Muhtemelen sorunun noktası olan.

Diğer insanlar söylediler, bir int ve bir dize arasında karşılaştırma çalışıyoruz. Siz "1" kullanarak ya 1, ya da "0" ya da 0 ya da her şeyi değiştirebilir. Alternatif ve daha iyi bir yöntem tip-spesifik karşılaştırmak gibi === olarak operatörleri veya {kullanmaktır [(1)] } değerini ve türünü hem de maç için; ve kendinizi ve yapmak için çalışıyoruz ne tercüman hem de acı belirgin yapmak için doğru ve yanlış boolean terimleri kullanırlar.

Ayrıca değeri komut dosyası aracılığıyla yarıya değişiklik olmadığından emin olmak için, örneğin, define("MAINTENANCE", true); kullanarak deneyebilirsiniz. Sonra tekrar olsa da, bu dosyaya yeni değerler yazmak sürece daha zor ayarları sunucu tarafını değiştirmek için yapabilir. Daha sonra sunucu başka bir istemci için dosyayı okumaya çalışıyor iken yazma ile ilgili sorunlar olabilir ama ...