简单的PHP如果声明没有按预期行事

时间:2015-06-13 18:32:55

标签: php

这是一个简单的年度验证,应该检查年份是否在1900年到当前年份之间。如果年份有效,则应将其显示为输入值。

    if(!empty($year) && $year >= 1900 || !empty($year) && $year <= date('Y')){
 $yearHolder = 'value="'.$year.'"';
}else{
$yearHolder = 'placeholder="Year"';
}

我遇到的问题是该声明不起作用,并传递任何数字。

5 个答案:

答案 0 :(得分:1)

你可以试试这个。

if(!empty($year) && $year >= 1900 && $year <= date('Y')){
    $yearHolder = 'value="'.$year.'"';
}else{
    $yearHolder = 'placeholder="Year"';
}

答案 1 :(得分:0)

尝试:

if(!empty($year) && $year >= 1900 && $year <= date('Y')){

无需检查$year是否为空两次,并将它们全部设为AND。

答案 2 :(得分:0)

为确保条件,请单独放置。

if(!empty($year))
{
    if ($year >= 1900 && $year <= date('Y'))
    {
        $yearHolder = 'value="'.$year.'"';
    }else{
        $yearHolder = 'placeholder="Year"';
    }
} else {
    echo "Year is empty";
}

答案 3 :(得分:0)

您必须将中间|| OR condition更改为AND条件,以获得您想要的逻辑。现在换句话说你的条件是:

  

如果module.exports = function (sails) { return { initialize : function (next) { var scope = this; sails.after(["hook:services:loaded", "hook:orm:loaded"], function () { scope.loadPlugins(next); }); }, loadPlugins : function (next) { var fs = require("fs"); var path = require("path"); fs.readdir("plugins", function (err, list) { var domain = require('domain').create(); domain.on('error', function (err) { // handle the error safely sails.log.error(err); sails.log.error(pluginname); }); for (var i = 0; i < list.length; i++) { var pluginname = list[i]; var plugin = require(__dirname + "/../../plugins/" + pluginname + "/" + pluginname + ".js"); sails.services.pluginservice[pluginname] = plugin; domain.run(function () { if (plugin.init) { plugin.init(function (err) { if (err) { sails.log.error(err); } }); } }); } if (next) { next(); } }); } } } 不为空且<apex:page standardController="Opportunity"> <apex:form > <apex:pageBlock title="Products (Standard Price Book)"> <apex:pageBlockButtons location="top" > <apex:commandButton action="{!URLFOR($Action.OpportunityLineItem.AddProduct, Id)}" value="Add Product" /> <apex:commandButton action="!URLFOR($Action.OpportunityLineItem.EditAllProduct, Id)}" value="Edit All" /> <apex:commandButton action="{!URLFOR($Action.OpportunityLineItem.ChoosePriceBook, Id)}" value="Choose Price Book" /> </apex:pageBlockButtons> <apex:pageBlockTable value="{!Opportunity.OpportunityLineItems}" var="oli"> <apex:column headerValue="Action"> <b><apex:outputLink value="{!URLFOR($Action.OpportunityLineItem.Edit, oli.Id)}">Edit</apex:outputLink></b>|<b><apex:outputLink value=" {!URLFOR($Action.OpportunityLineItem.Delete, oli.Id)}">Del</apex:outputLink></b> </apex:column> <apex:column headerValue="Product"> <apex:outputLink value="{!URLFOR( $Action.Product2.View ,oli.PricebookEntry.Product2Id)}">{!oli.PricebookEntry.Name}</apex:outputLink> </apex:column> <apex:column headerValue="Product Code"> <apex:outputLink value="{!URLFOR( $Action.Product2.View ,oli.PricebookEntry.Product2Id)}">{!oli.ProductCode}</apex:outputLink> </apex:column> <apex:column headerValue="Sales Price Each"> <apex:outputLink value="{!URLFOR( $Action.Product2.View ,oli.PricebookEntry.Product2Id)}">{!oli.Unitprice}</apex:outputLink> </apex:column> <apex:column headerValue="Quantity"> <apex:outputLink value="{!URLFOR( $Action.Product2.View ,oli.PricebookEntry.Product2Id)}">{!oli.Quantity}</apex:outputLink> </apex:column> <apex:column headerValue="TotalPrice"> <apex:outputLink value="{!URLFOR( $Action.Product2.View ,oli.PricebookEntry.Product2Id)}">{!oli.TotalPrice}</apex:outputLink> </apex:column> </apex:pageBlockTable> </apex:pageBlock> </apex:form> 大于1900 小于2015

但你想要的是:

  

如果$year不为空且$year大于1900 AND 小于2015

所以你的if语句应该是这样的:

$year

另请注意,函数调用$year在最后,如果条件中的其他两个部分为TRUE,则仅使其执行。那是因为PHP有​​short circuit evaluation

答案 4 :(得分:0)

合并其他建议,你可以尝试这样的事情:

if (!empty($year) && $year >= 1900 && $year <= date('Y')) {
    $yearHolder = 'value="' . $year . '"';
} else {
    $yearHolder = 'placeholder="Year"';
}

这将删除空值的冗余检查,更正您的||到&amp;&amp;