2016-07-25 13 views
0

Ich möchte etwas wie eine Promotion-Code-Funktion für meine Ecomm-Website tun. Derzeit habe ich eine Variable namens $ currentDate, die ich nicht sicher bin, ist das richtige Format.So exportieren Sie einen Datetime-Wert von Mysql zu PHP

$currentDate = date("Y-M-D") 

Ich möchte das mit einem Datum in meiner Datenbank vergleichen, das Ablaufdatum genannt wird. In meiner Datenbank habe ich eine Zeile mit promoCode = GSS2016 (varchar), Rabatt = 0,1 (double, angenommen, um 10% Rabatt zu repräsentieren) und expiryDate = 2016-07-28 (datetime, die in YMD ist, wenn ich nicht falsch bin .. I.) habe bereits eine Abfrage ausführen, um zu überprüfen, ob der Promocode existiert, aber ich bin nicht sicher, wie es in PHP zu exportieren und mit dem aktuellen Datum vergleichen

$currentDate = date("Y-M-D"); 

session_start(); 

$conn = mysqli_connect("localhost", "root", "","websiteDb"); 

$promoCodeInput = $_POST['promoCode']; 

$sql = "SELECT * FROM promocodedb WHERE promoCode = '$promoCodeInput'"; 

$codeChecker = mysqli_query($conn, $sql) or die (mysqli_error($conn)); 

if (mysqli_num_rows($codeChecker) > 0) 
{ 
    $fetchDiscount = mysqli_fetch_assoc($codeChecker); 

    $expiry = $fetchDiscount['expiryDate']; 

    if ($expiry > $currentDate) 
    { 
     $discountPercentage = $fetchDiscount['discount']; 
     echo $discountPercentage; 

     $cookie_value = $discountPercentage; 
     setcookie("discount", $cookie_value, time() + (60 * 60)); //discount last for 1 hour 

     header("Location:cart.php?status=promoApplied"); 
    } 
    else 
    { 
     //header("Location:cart.php?status=promoExpired"); 
    } 
} 
else 
{ 
    header("Location:cart.php?status=promoFail"); 
} 
+0

Sie müssen besser erklären, was Sie versuchen zu tun. Der von Ihnen gepostete Code scheint nicht sehr hilfreich zu sein. Versuchen Sie zu sehen, ob ein Rabattcode noch gültig ist? –

Antwort

0

Y-M-D eine Zeichenfolge wie 2016-Jul-25 erzeugt. Sie können das nicht zuverlässig mit einer anderen Zeichenkette oder sogar einer mysql Datum/Uhrzeit formatierten Zeichenkette vergleichen, die 2016-07-25 wäre.

String Vergleichsregeln werden nie richtig funktionieren, wenn Zahlen/Daten zu vergleichen:

php > var_dump('2016-Jul-25' > '2016-07-25'); 
bool(true) 
php > var_dump('2016-Jul-25' == '2016-07-25'); 
bool(false) 

Auch wenn diese beiden Versionen das gleiche Datum darstellen, können Sie die Vergleiche wieder falsch sehen. Nach String-Regeln sind sie NICHT die gleichen Daten.

Wie gut, beachten Sie diese:

php > var_dump('2016-Jul-25' > '2016-Mar-25'); 
bool(false) 

Wahre durch menschliche Parsing-Standards, weil Juli durch String-Vergleich Standards später im Jahr als März, aber FALSCH kommt, weil J früher im Alphabet kommt als M Daher ist die Jul Version KLEINER/früher als die Mar Version.

0

Sie können alle Datumsangaben in Unix-Zeitstempel übertragen und untereinander als Zeitstempel vergleichen. Unix-Zeitstempel ist die Anzahl der Sekunden seit dem 1. Januar 1970

Die Funktion für Datetime in Unix Zeitstempel Übertragung ist strtotime

Das ist ziemlich clevere Funktion und kann viele Datums-Zeitformate erkennen.

Blick auf PHP strtotime

Verwandte Themen