目的:将textarea标签中的行内容用逗号串起来
测试代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <form method="post" action="">
<textarea name="flist" cols="40" rows="2" wrap="OFF" style="width:98%"></textarea>
<input type="submit">
</form>
<?php
$list = '';
$flist = (isset($_POST['flist'])) ? $_POST['flist'] : '';
$flist = explode("\n",$flist);
for($i=0 ; $i<count($flist) ; $i++)
{
if ($list == '')
{
$list = $flist[$i];
}
else
{
if(!empty($flist[$i])){
$list = $list . ',' . $flist[$i];
}
}
}
echo $list;
?> |
<form method="post" action="">
<textarea name="flist" cols="40" rows="2" wrap="OFF" style="width:98%"></textarea>
<input type="submit">
</form>
<?php
$list = '';
$flist = (isset($_POST['flist'])) ? $_POST['flist'] : '';
$flist = explode("\n",$flist);
for($i=0 ; $i<count($flist) ; $i++)
{
if ($list == '')
{
$list = $flist[$i];
}
else
{
if(!empty($flist[$i])){
$list = $list . ',' . $flist[$i];
}
}
}
echo $list;
?>
结果:分行成功,但空行无法过滤!
原因:回想工作环境是apache+php,感觉分行符不是“\n”而是“\r\n”,修改上述代码,过滤空行成功!
1
| $flist = explode("\r\n",$flist); |
$flist = explode("\r\n",$flist);
记录中有一个字段名是:cfield,内容如这样:2,4,7,17 现在要通过一次SQL查询取出所有该字段中包含7的记录。这时候使用mysql自带的instr函数将非常方便。测试代码如下:
1
2
3
4
5
6
| $aid=7;
$sql="SELECT * FROM news WHERE instr(','+cfield+',',','+$aid+',')>0";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['title'].'<br>';
} |
$aid=7;
$sql="SELECT * FROM news WHERE instr(','+cfield+',',','+$aid+',')>0";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['title'].'<br>';
}
需要注意的是:要在字段cfield和变量aid前后加逗号,这样可以解决7与17混淆的问题。
(2016-2-3)注:上述语句中+号的用法会使MYSQL尝试将两端字符进行相加运算,出现了异想不到的结果。比较稳妥的是用CONCAT函数相接:
1
| $sql="SELECT * FROM news WHERE instr(concat(',',cfield,','),',$aid,')>0"; |
$sql="SELECT * FROM news WHERE instr(concat(',',cfield,','),',$aid,')>0";
或
1
| $sql="SELECT * FROM news WHERE concat(',',cfield,',') LIKE '%,$aid,%'"; |
$sql="SELECT * FROM news WHERE concat(',',cfield,',') LIKE '%,$aid,%'";
最近做了个表单提交的页面,表单中有一组checkbox,提交后要获取已勾选的内容。该页面在IE和chrome(版本 25.0.1364.172 m)中运行正常,但在firefox中失败。
相关代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| function GetCheckBoxList(objName) {
var result = "";
var coll = document.all.item(objName)
if (!coll) return result;
if (coll.length) {
for (var i = 0; i < coll.length; i++) {
if (coll.item(i).checked) {
result += (result == "") ? coll.item(i).value : ("," + coll.item(i).value);
}
}
} else {
if (document.all.item(objName).checked) {
result = document.all.item(objName).value;
}
}
return result;
} |
function GetCheckBoxList(objName) {
var result = "";
var coll = document.all.item(objName)
if (!coll) return result;
if (coll.length) {
for (var i = 0; i < coll.length; i++) {
if (coll.item(i).checked) {
result += (result == "") ? coll.item(i).value : ("," + coll.item(i).value);
}
}
} else {
if (document.all.item(objName).checked) {
result = document.all.item(objName).value;
}
}
return result;
}
查资料得知firefox不支持document.all这种方法,看来也是个老问题了,网上的资料有很多,但大多都没有给出源码参考,仍然让新手摸不清头脑。我在这个问题上也浪费了一些时间。下面将重写上述代码,有此问题的朋友,可仔细比较一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| function GetCheckBoxList(objName) {
var result = "";
var coll = document.getElementsByName(objName);
if (!coll) return result;
if (coll.length) {
for (var i = 0; i < coll.length; i++) {
if (coll[i].checked) {
result += (result == "") ? coll[i].value : ("," + coll[i].value);
}
}
} else {
if (document.getElementsByName(objName).checked) {
result = document.getElementsByName(objName).value;
}
}
return result;
} |
function GetCheckBoxList(objName) {
var result = "";
var coll = document.getElementsByName(objName);
if (!coll) return result;
if (coll.length) {
for (var i = 0; i < coll.length; i++) {
if (coll[i].checked) {
result += (result == "") ? coll[i].value : ("," + coll[i].value);
}
}
} else {
if (document.getElementsByName(objName).checked) {
result = document.getElementsByName(objName).value;
}
}
return result;
}
在firefox中,获取表单元素属性要使用getElemntById或getElementsByName方法,前者是通过id号获取,后者是通过name名称获取。
注:新版的firefox已经开始接受document.all方法了,经测试属实!测试的代码如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <html>
<body>
<input type="checkbox" id="txt" value="a" checked />
<input type="checkbox" id="txt" value="b" checked />
<input type="checkbox" id="txt" value="c" />
<input type="checkbox" id="txt" value="d" checked />
<SCRIPT LANGUAGE="JavaScript">
var result="";
var coll = document.all.txt;
for (var i = 0; i < coll.length; i++) {
if (coll[i].checked) {
result += (result == "") ? coll[i].value : ("," + coll[i].value);
}
}
alert(result);
</SCRIPT>
</body>
</html> |
<html>
<body>
<input type="checkbox" id="txt" value="a" checked />
<input type="checkbox" id="txt" value="b" checked />
<input type="checkbox" id="txt" value="c" />
<input type="checkbox" id="txt" value="d" checked />
<SCRIPT LANGUAGE="JavaScript">
var result="";
var coll = document.all.txt;
for (var i = 0; i < coll.length; i++) {
if (coll[i].checked) {
result += (result == "") ? coll[i].value : ("," + coll[i].value);
}
}
alert(result);
</SCRIPT>
</body>
</html>
ASP中一次查询循环体使用“Rs.MoveNext”可以移动指针,获取两条或更多的记录。PHP中是否有这种功能?答案是肯定的!
首先我们先看一下,PHP查询是如何工作的?常用的办法是通过mysql_fetch_array()函数,获取一条记录并把它赋值给$row数组变量,然后在循环体中就可以打印出记录内容了。如代码:
1
2
3
4
5
| $sql="SELECT * FROM `news` WHERE `class`='$id'";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['title'].'<br>';
} |
$sql="SELECT * FROM `news` WHERE `class`='$id'";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['title'].'<br>';
}
我们可以看到,下一次循环的时候是再一次通过mysql_fetch_array()获取新记录赋值给$row数组,所以我们可以尝试在循环体中使用它。如代码:
1
2
3
4
5
6
7
| $sql="SELECT * FROM `news` WHERE `class`='$id'";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['title'].'<br>';
$row = mysql_fetch_array($result); //获取下一条记录
echo $row['title'].'<br>';
} |
$sql="SELECT * FROM `news` WHERE `class`='$id'";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['title'].'<br>';
$row = mysql_fetch_array($result); //获取下一条记录
echo $row['title'].'<br>';
}
运行一下看看,达到和ASP中的“Rs.MoveNext”一样的效果了!
事情是这样的:有一个页面要展示几张图片,这几张图片分别来自不同的地方,而且图片的路径随日期变化,但是图片之间并不是统一更新的。当访问者看到这个页面的时候,要根据当天的日期看到最新的图片内容。
操作如下:
将已知的图片路径和日期保存到文本文件中如:epic.txt 格式为:2012-12-10|http://wuhuaguo.lifeskillcn.com/wp-content/2012-12/10/gl.jpg 一行一条
页面主文件index.asp: 阅读全文…