网站开发日志

2009年6月17日星期三

PHP中的值是否为空

在百度知道看到一个网页提问,是关于PHP中的值是否为空。这个问题还是相对简单,参考PHP手册,以下几种情况在PHP里被定义为空:

  • "" (an empty string)
  • 0 (0 as an integer)
  • "0" (0 as a string)
  • NULL
  • FALSE
  • array() (an empty array)
  • var $var; (a variable declared, but without a value in a class)

掌握这些规则,我们就可以对下面的PHP变量进行是否为空的判断。

<?php
$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = '';
$a5 = '0';
$a6 = 'null';
$a7 = array();
$a8 = array(array());
echo empty($a1) ? 'true' : 'false';  //true
echo "<br>";
echo empty($a2) ? 'true' : 'false';  //true
echo "<br>";
echo empty($a3) ? 'true' : 'false';  //true
echo "<br>";
echo empty($a4) ? 'true' : 'false';  //true
echo "<br>";
echo empty($a5) ? 'true' : 'false';  //true
echo "<br>";
echo empty($a6) ? 'true' : 'false';  //false, 因为$a6不是空字符串也不是'0'
echo "<br>";
echo empty($a7) ? 'true' : 'false';  //true
echo "<br>";
echo empty($a8) ? 'true' : 'false';  //false,因为$a不是空数组
?>

标签: ,

CSS line-height

在百度知道里,看到一位网友提问有关line-height的问题。

HTML+CSS代码如下:

<html>
</head>
<style type="text/css">
#a{ height:90px; width:400px; line-height:60px;background:#003399;}
#b{background:#FF6600; width:200px; height:25px;}
</style>
<body>
<div id=a>
<div id=b>ddd</div>555
</div>
</body>
</html>

请测试以上代码,为什么id=a的div设了line-height:60px后 id=b的div 高度设为25px,实际却等于60px呢?怎么样才能在父级div设了line-height的情况下,控制自身的高度。 请在IE6里面测试。看代码id=b的div高度应该是25px;可在IE6里面实际却是60px。 在firefox里高度就是25px,可里面的文字,却跑到外面了。

分析:line-height(行高)是有继承性的。在上述例子里,div(a)的行高=60px,div(b)是div(a)的子级。如果div(b)没有定义行高,那么它将继承父级的行高。由于div(b)的高度是25px,小于行高(60px), 在firefox下文字就跑到div的外面,而在IE6下,当div的高度小于行高,div的高度将被自动扩大,因此显示为60px。

解决方法:给子级定义行高,覆盖继承值。CSS如下:

#b {background:#FF6600; width:200px; height:25px;line-height:25px;}

标签:

2009年2月16日星期一

ajax vs iframe

前两天在百度知道看到一个有关表单验证的问题,提问的网友想知道:

...录入完张三的信息后,再录入张三的名字时会提示已经录入过该人的信息了,弹出信息框的形式提示...

这里的验证需要通过数据库的查询来验证,因此需要另一个PHP文件来执行。并且执行的结果要以弹出信息框的方式出现,因此要用到Javscript。通常的解法应该是使用ajax,具体思路如下:(我采用jQuery提供的ajax方法,这样代码会比较简单)

1. 需要验证的文本框 - HTML代码:

<input name="xm" type="text" id="xm" size="30" />

2. 使用jQuery的ajax方法调用check.php文件并且把结果:

$("#xm").onChange(function(){
  var name = $(this).val();
  $.ajax({
   type: "GET",
   url: "check.php",
   data: "name="+name,   
   success: function(repeat){
     if(repeat)
     alert( "重复!" );
   }
  });
});

3. check.php - 检测输入的名字是否已经存在于数据库,如果是返回1,如果不是返回0

<?php
  $xm=$_REQUEST['xm'];
  $sql="select count(*) from jinengchaxun where xm='$xm'";
  mysql_connect(..自己一定写正确哦..);
  $res=mysql_query($sql);
  list($cnt)=mysql_fetch_row($res);
  mysql_free_result($res);
  mysql_close();
  return ($cnt>0) ? 1 : 0; 
?>

注意:我没有测试过这种方法,有兴趣的可以试一下。

另外一种方法用到iframe,是另外一个网友提供的:

/**一、编写一个checkxinxi.php来检测指定的名字是否存在,内容如下:*/
<?php
$xm=$_REQUEST['xm'];
$sql="select count(*) from jinengchaxun where xm='$xm'";
mysql_connect(..自己一定写正确哦..);
$res=mysql_query($sql);
list($cnt)=mysql_fetch_row($res);
mysql_free_result($res);
mysql_close();
echo <<<END
<script type=text/javascript>
if ($cnt>0) {
alert('重复提示:已经录入过 $xm 了!');
parent.document.getElementById('chk_rst').innerHTML='重复';
}else parent.document.getElementById('chk_rst').innerHTML='新人';
</script>
END;
?>
/**二、addxinxi.php进行如下修改既可:*/
<input name="xm" type="text" id="xm" size="30" />
//修改为:
<input name="xm" type="text" id="xm" size="30" 
  onchange="chk_frm.location.href='chkxinxi.php?xm='+this.value;" />
<span id=chk_rst></span>
<iframe name=chk_frm style='display:none'></iframe>

我把原答案里的parent.chk_rst.innerHTML 改成 parent.document.getElementById('chk_rst').innerHTML,因为Firefox不识别parent.chk_rst

个人感觉,使用iFrame比较简单, 但是iFrame其实是把一个页面隐藏在另外一个页面里,所以执行的时候它需要刷新整个页面。而ajax可以异步更新,所以相对要平滑许多,而且使用jQuery后ajax的书写也变得简单了,所以还是建议使用ajax。

方法二的演示

标签: , , ,

2008年10月14日星期二

PHP 对中文字符窜分割

下面是百度知道里一个网友的问题: PHP - 对字符串操作

我有一个由英文字母、数字、中文字符组成的字符串
我想要往这个字符串的每两个字符中间加入一个百分号“%”,例如:

我爱PHP编程
变成:
我%爱%P%H%P%编%程

如果直接用PHP的函数,str_split, 来分割,会出现乱码,因为中文字符长度和英文字符长度是不一样的。但是我们可以建立新的函数先把支付转成ASCII 值,接着通过判断不同字符的长度来正确分割中文字符串,把结果存入数组,最后再用PHP函数,join,在字符间插入百分号。具体代码如下:

<?php
function str_split_utf8($str) {
    $split=1;
    $array = array();
    for ( $i=0; $i < strlen( $str ); ){
        $value = ord($str[$i]);
        if($value > 127){
            if($value >= 192 && $value <= 223)
                $split=2;
            elseif($value >= 224 && $value <= 239)
                $split=3;
            elseif($value >= 240 && $value <= 247)
                $split=4;
        }else{
            $split=1;
        }
            $key = NULL;
        for ( $j = 0; $j < $split; $j++, $i++ ) {
            $key .= $str[$i];
        }
        array_push( $array, $key );
    }
    return $array;
}
$string ="我爱PHP编程";
$arr1 = str_split_utf8($string);
echo join("%", $arr1);
?>

标签: ,