1.以下哪一句不會把 John 新增到 users 陣列? $users[] = 'john'; 成功把 John 新增到陣列 users。 array_add($users,’john’); 函式 array_add() 無定義。 array_push($users,‘john’); 成功把 John 新增到陣列 users。 $users ||= 'john'; 語法錯誤。
2.sort()、assort()、和 ksort() 有什麼分別?它們分別在什麼情況下使用?
sort() 根據陣列中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 重新編號。主要是當陣列索引鍵的值無關疼癢時用來把陣列排序。 assort() PHP 沒有 assort() 函式,所以可能是 asort() 的筆誤。 asort() 與 sort() 一樣把陣列的元素按英文字母順序來排列,不同的是所有索引鍵都獲得保留,特別適合替聯想陣列排序。 ksort() 根據陣列中索引鍵的值,以英文字母順序排序,特別適合用於希望把索引鍵排序的聯想陣列。
3.以下的代碼會產生什麼?為什麼?
$num =10; function multiply(){ $num =$num *10; } multiply(); echo $num;
由於函式 multiply() 沒有指定 $num 為全域變量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值是 10。
4. reference 跟一個正規的變量有什麼分別?如何 pass by reference?在什麼情況下我們需要這樣做? Reference 傳送的是變量的地址而非它的值,所以在函式中改變一個變量的值時,整個應用都見到這個變量的新值。 一個正規變量傳送給函式的是它的值,當函式改變這個變量的值時,只有這個函式才見到新值,應用的其他部分仍然見到舊值。
$myVariable = "its' value"; Myfunction(&$myVariable); // 以 reference 傳送參數
以 reference 傳送參數給函式,可以使函式改變了的變量,即使在函式結束後仍然保留新值。
5.些函式可以用來在現正執行的腳本中插入函式庫? 對這道題目不同的理解會有不同的答案,我的第一個想法是插入 PHP 函式庫不外乎 include()、include_once()、require()、require_once(),但細心再想,「函式庫」也應該包括 com 物件和 .net 函式庫,所以我們的答案也要分別包括 com_load 和 dotnet_load,下次有人提起「函式庫」的時候,別忘記這兩個函式。
6.foo() 與 @foo() 有什麼分別? foo() 會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。 @foo() 在執行這個函式時,會隱藏所有上述的錯誤訊息。 很多應用程式都使用 @mysql_connect() 和 @mysql_query 來隱藏 mysql 的錯誤訊息,我認為這是很嚴重的失誤,因為錯誤不該被隱藏,你必須妥善處理它們,可能的話解決它們。
7.你如何替 PHP 的應用程式偵錯? 我並不常這樣做,我曾經試過很多不同的偵錯工具,在 Linux 系統中設定這些工具一點也不容易。不過以下我會介紹一個近來頗受注目的偵錯工具。 PHP - Advanced PHP Debugger 或稱 PHP - APD,第一步是執行以下的指令安裝:
pear install apd安裝後在你的腳本的開頭位置加入以下的語句開始進行偵錯:
apd_set_pprof_trace();執行完畢,打開以下檔案來查閱執行日誌: apd.dumpdir 你也可以使用 pprofp 來格式化日誌。 詳細的資料可以參閱 http://us.php.net/manual/en/ref.apd.php。
8.「===」是什麼?試舉一個「==」是真但「===」是假的例子。 「===」是給既可以送回布爾值「假」,也可以送回一個不是布爾值但卻可以賦與「假」值的函式,strpos() 和 strrpos() 便是其中兩個例子。 問題的第二部份有點困難,想一個「==」是假,但是「===」是真的例子卻很容易,相反的例子卻很少。但我終於找到以下的例子:
if (strpos("abc", "a") == true){ // 這部分永不會被執行,因為 "a" 的位置是 0,換算成布爾值「假」}if (strpos("abc", "a") === true){ // 這部份會被執行,因為「===」保證函式 strpos() 的送回值不會換算成布爾值.}
9.你會如何定義一個沒有成員函式或特性的類別 myclass?
class myclass{}
10.你如何產生一個 myclass 的物件?
$obj = new myclass();
11.在一個類別內如何存取這個類別的特性及變改它的值? 使用語句:$this->propertyName,例如:
class myclass{ private $propertyName; public function __construct() { $this->propertyName = "value"; }}
12.include 和 include_once 有什麼分別?require 又如何? 三者都是用來在腳本中插入其他檔案,視乎 url_allow_fopen 是否核准,這個檔案可以從系統內部或外部取得。但他們之間也有微細的分別: include():這個函式容許你在腳本中把同一個檔案插入多次,若果檔案不存在,它會發出系統警告並繼續執行腳本。 include_once():它跟 include() 的功能相似,正如它的名字所示,在腳本的執行期間,有關檔案只會被插入一次。 require():跟 include() 差不多,它也是用來在腳本中插入其他檔案,但若果檔案不存在,它會發出系統警告,這個警告會引致致命錯誤令腳本中止執行
13.以下哪一個函式可以把瀏覽器轉向到另一個頁面? redir() 這不是一個 PHP 函式,會引致執行錯誤。 header() 這個是正確答案,header() 用來插入卷頭資料,可以用來使瀏覽器轉向到另一個頁面,例如: header("Location: http://www.search-this.com/"); location() 這不是一個 PHP 函式,會引致執行錯誤。 redirect() 這不是一個 PHP 函式,會引致執行錯誤。
14.以下哪一個函式可以用來開啟檔案以便讀/寫? fget() 這不是一個 PHP 函式,會引致執行錯誤。 file_open() 這不是一個 PHP 函式,會引致執行錯誤。 fopen() 這是正確答案,fopen() 可以用來開啟檔案以便讀/寫,事實上這個函式還有很多選項,詳細資料請參閱 php.net。 open_file() 這不是一個 PHP 函式,會引致執行錯誤。 15.mysql_fetch_row() 和 mysql_fetch_array() 有什麼分別? mysql_fetch_row() 把數據庫的一列儲存在一個以零為基數的陣列中,第一欄在陣列的索引 0,第二欄在索引 1,如此類推。mysql_fetch_assoc() 把數據庫的一列儲存在一個關聯陣列中,陣列的索引就是欄位名稱,例如我的數據庫查詢送回「first_name」、「last_name」、「email」三個欄位,陣列的索引便是「first_name」、「last_name」和「email」。mysql_fetch_array() 可以同時送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。 16.下面的代碼用來做什麼?請解釋。
$date='08/26/2003';print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","//2///1///3",$date);
這是把一個日期從 MM/DD/YYYY 的格式轉為 DD/MM/YYYY 格式。我的一個好朋友告訴我可以把這個正規表達式拆解為以下的語句,對於如此簡單的表示是來說其實無須拆解,純粹為了解說的方便:
// 對應一個或更多 0-9,後面緊隨一個斜號$regExpression = "([0-9]+)/";// 應一個或更多 0-9,後面緊隨另一個斜號$regExpression .= "([0-9]+)/";// 再次對應一個或更多 0-9$regExpression .= "([0-9]+)";至於 //2///1///3 則是用來對應括號,第一個括號對的是月份,第二個括號對應的是日期,第三個括號對應的是年份。
17.給你一行文字 $string,你會如何編寫一個正規表達式,把 $string 內的 HTML 標籤除去? 首先,PHP 有內建函式 strip_tags() 除去 HTML 標籤,為何要自行編寫正規表達式?好了,便當作是面試的一道考題吧,我會這樣回答:
$stringOfText = "<p>This is a test</p>";$expression = "/<(.*?)>(.*?)<//(.*?)>/";echo preg_replace($expression, "//2", $stringOfText);// 有人說也可以使用 /(<[^>]*>)/ $expression = "/(<[^>]*>)/";echo preg_replace($expression, "", $stringOfText);
18.PHP 和 Perl 分辨陣列和散列表的方法有什麼差異? 這正是為何我老是告訴別人選擇適當的編程語言,若果你只用一種語言的話你怎麼能回答這道問題?這道問題很簡單,Perl 所有陣列變量都是以 @ 開頭,例如 @myArray,PHP 則沿用 $ 作為所有變量的開頭,例如 $myArray。 至於 Perl 表示散列表則用 %,例如 %myHash,PHP 則沒有分別,仍是使用 $,例如 $myHash。 19.你如何利用 PHP 解決 HTTP 的無狀態本質? 最主要的倆各選擇是 session 和 cookie。使用 session 的方法是在每一頁的開始加上 session_start(),然後利用 $_SESSION 散列表來儲存 session 變量。至於 cookie 你只需記著一個原則:在輸出任何文字之前調用 set_cookie() 函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 變量。 還有一個不那麼可靠的方法,就是利用訪客的 IP 地址,這個方法有特定的危險性。 20.GD 函式庫用來做什麼? 這個可能是我最喜歡的函式庫,自從 PHP 4.3.0 版本後 GD 便內建在 PHP 系統中。這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是製作所圖檔。GD 以外的另一個選擇是 ImageMagick,但這個函式庫並不內建於 PHP 之中,必須由系統管理員安裝在伺服器上。 21.試寫出幾個輸出一段 HTML 代碼的方法。 嗯,你可以使用 PHP 中任何一種輸出語句,包括 echo、print、printf,大部分人都使用如下例的 echo:
echo "My string $variable";你也可以使用這種方法:
echo <<<ENDThis text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can't contain any extra white space.END;
22.PHP 比 Perl 好嗎?請討論。 我們不要為一個簡單的問題引發一場舌戰,正如我經常說的:「為工作選擇適合的語言,不要把工作遷就語言。」我個人認為 Perl 十分適合用作命令行工具,雖然它在網頁應用上也有不錯的表現,但是它的真正實力在命令行上才能充分發揮。同樣地,PHP 雖然可以在控制台的環境中使用,但是個人認為它在網頁應用上有更好的表現,PHP 有大量專門為網頁應用而設計的函式,Perl 則似乎以命令行為設計之本。 個人來說兩種語言我都喜歡,在大學期間我經常使用 Perl、PHP 和 Java,可惜工作上我使用 C#,但在家裡我花不少時間操練 PHP、Perl、Ruby(現正學習)和 Java,保持我的技能知識在最新狀態。很多人問我 C 和 C++ 怎麼樣,它們是否仍有機會在我的應用中佔一席位,我的答案基本上是「否」,我近來的工作主要集中在網頁開發,雖然 C 和 C++ 也可以用來寫網頁,但它們到底不是為這種工作而設計的,「為工作選擇適合的語言」,若果我需要編寫一個控制台應用,用來展示 bubble sort、quick sort 和 merge sort 的效能比較,我一定會使用 C / C++。若果我需要編寫一個相片簿系統,我會使用 PHP 或者 C#(我認為製作用戶介面方面 .NET 語言比網頁更加)。
参考: 1.http://blog.csdn.net/jerryfleming/archive/2007/01/17/1485528.aspx 2.http://blog.csdn.net/phpme/archive/2006/06/23/826204.aspx 3.http://www.jian-li.com.cn/shiti/20061125/9125.Html 4.http://www.hkpug.net/node/211 5.http://club.phpe.net/index.php?act=ST&f=10&t=7768 6.http://khaki.bloghome.cn/posts/126072.html
1 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用? 答: 传值只是把某一个变量的值传给了另一个变量,而引用则说明两者指向了同一个地方。 2 在PHP中error_reporting这个函数有什么作用? 答: The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script. 3 请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。 答:
<?
php
if
(
isset
(
$_POST
[
'
action
'
])
&&
$_POST
[
'
action
'
]
==
'
submitted
'
) {
$email
=
$_POST
[
'
email
'
];
if
(
!
preg_match
(
"
/^(?:w+.?)*w+@(?:w+.?)*w+$/
"
,
$email
)) {
echo
"
电子邮件检测失败
"
; }
else
{
echo
"
电子邮件检测成功
"
; } }
else
{
?>
<
html
>
<
head
><
title
>
EMAIL检测
</
title
>
<
script type
=
"
text/javascript
"
>
function
checkEmail(sText) {
var
reg
=/^
(
?:
w
+
.?
)
*
w
+
@(
?:
w
+
.?
)
*
w
+
$
/
;
var
email
=
document
.
getElementById(sText)
.
value;
if
(
!
reg
.
test(email)) { alert(
"
电子邮件检测失败
"
); }
else
{ alert(
"
电子邮件格式正确
"
); } }
</
script
>
</
head
>
<
body
>
<
form action
=
"
<?php echo $_SERVER['PHP_SELF'] ?>
"
method
=
"
POST
"
>
电子邮件:
<
input type
=
"
text
"
id
=
"
email
"
name
=
"
email
"
/><
br
/>
<
input type
=
"
hidden
"
name
=
"
action
"
value
=
"
submitted
"
/>
<
input type
=
"
button
"
name
=
"
button
"
value
=
"
客户端检测
"
onclick
=
"
checkEmail('email')
"
/>
<
input type
=
"
submit
"
name
=
"
submit
"
value
=
"
服务器端检测
"
/>
</
form
>
</
body
>
</
html
>
<?
php }
?>
4 简述如何得到当前执行脚本路径,包括所得到参数。
<?
php
echo
"
http://
"
.
$_SERVER
[
'
SERVER_NAME
'
]
.
$_SERVER
[
'
PHP_SELF
'
]
.
"
?
"
.
$_SERVER
[
'
QUERY_STRING
'
];
//
echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
?>
5 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)
<?
php
function
BubbleSort(
&
$arr
)
{
$cnt
=
count
(
$arr
);
$flag
=
1
;
for
(
$i
=
0
;
$i
<
$cnt
;
$i
++
)
{
if
(
$flag
==
0
)
{
return
;
}
$flag
=
0
;
for
(
$j
=
0
;
$j
<
$cnt
-
$i
-
1
;
$j
++
)
{
if
(
$arr
[
$j
]
>
$arr
[
$j
+
1
])
{
$tmp
=
$arr
[
$j
];
$arr
[
$j
]
=
$arr
[
$j
+
1
];
$arr
[
$j
+
1
]
=
$tmp
;
$flag
=
1
;
}
}
}
}
$test
=
array
(
1
,
3
,
6
,
8
,
2
,
7
);
BubbleSort(
$test
);
var_dump
(
$test
);
?>
6 请举例说明在你的开发过程中用什么方法来加快页面的加载速度 答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具啦 Mysql部分 1 创建poll表,用于记录单选投票用户的数据 字段包括 id[ Autoincreace ] , ip , time , iid(用户选则的选项,int型) 写出create上述table的完整sql语句
drop
table
if
exists
poll;
/*
==============================================================
*/
/*
Table: poll
*/
/*
==============================================================
*/
create
table
poll ( id
int
unsigned
not
null
auto_increment, ip
varchar
(
15
)
not
null
, time
datetime
not
null
, iid
int
not
null
,
primary
key
(id) )
2 写出将一个选择2号选项的ip为127.0.0.1的用户在当前时间的投票记录到数据库的SQL
insert
into
poll (ip,time,iid)
values
(
'
127.0.0.1
'
,now(),
2
);
3 写出满足下边条件的SQL语句
item表的结构为 id(就是poll表中的iid) , descp(用户选择的选项的文字)
请查询并返回10条记录,包括ip和用户选择的选项的文字 4 现在因为投票人数太多,网站时常出现too many connection的错误,请提供解决方案 方法一:加大MySql的最大连接数 mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些,编辑my.ini 修改 max_connections=1000 方法二,不用mysql数据库,改为直接写文件,详细方法参照问题5 若非要用 mysql,还可 方法三:由于用mysql语句调用数据库时,在每次之执行语句前,会做一个临时的变量用来打开数据库,所以你在使用mysql语句的时候,记得在每次调用完mysql之后就关闭mysql临时变量 5 在成功解决连接数的问题后,发现程序运行缓慢,经查发现是mysql并发太多,表被锁定的现象严重,请提供解决方案 对于访问量大的,本来就不推荐使用数据库,可以考虑直接写到文本中,根据预测的访问量,先定义假若是100个文件文件名依次为1.txt,2.txt…100.txt,每有用户投票的时候,随机往其中的一个文件中写入投票信息。统计的时候,再对所有文本文件中的数据进行分析。必要的时候,再导入数据库
drop
table
if
exists
item;


/**/
/*==============================================================*/

/**/
/* Table: item */

/**/
/*==============================================================*/
create
table
item
(
id
int
not
null
,
descp
varchar
(
200
)
not
null
,
primary
key
(id)
);
select
A.ip,b.descp
from
poll A,item B
where
A.id
=
B.id
limit
10
6 因为用户实在太多,所以又分配给你两台服务器,你会如何来安排这3台服务器? 对于服务器分配,其实有好几种方案(建议采用LINUX主机),先列出一个解决方案。 1. 考虑到电信,网通(南北差异)互访问速度慢的问题,可以让电信的用户走电信的线,网通的走网通的线。大致可以这样分配,国内南方用户(电信用户)拥有一台 服务器A;北方用户(网通用户)拥有一台服务器B。国外的用户也可以考虑给一台服务器C。用户访问的时候,首先访问的是针对国外的服务器,那台机器是电信 网通的用户访问速度都差不多的(可以考虑就租用香港或是什么地方的),经过服务器C判断后直接跳到相应的服务器。统计时三台机器的数据合起来。 7 现在开始要求同一ip不能重复投票 ,请指出如何对数据表进行相应的修改 ALTER TABLE `phpinterview`.`poll` ADD unique INDEX `IX_poll_ip`(`ip`); 8. 原有数据已经有很多重复ip的数据了,所以我们把它导出为一个txt,格式和上边的poll一致,用TAB键间隔,请写一段程序,删除ip有重复的记录,并统计每个投票选项的投票数
<?
php
//
读取文本并放入数组
$apoll
=
file
(
"
c:/1.txt
"
);
//
对每一行数据进行分割,从而获取了一个二维数组
for
(
$i
=
0
;
$i
<
count
(
$apoll
);
$i
++
) {
$poll
[
$i
]
=
split
(
"
"
,
$apoll
[
$i
]); }
//
获取IP、出现的次数数据
$arrIP
=
array
();
for
(
$i
=
0
;
$i
<
count
(
$poll
);
$i
++
) {
$arrIP
[
$poll
[
$i
][
1
]]
=
isset
(
$arrIP
[
$poll
[
$i
][
1
]])
?
$arrIP
[
$poll
[
$i
][
1
]]
+
1
:
1
; }
//
获取选项、投票个数
$arrRes
=
array
();
for
(
$i
=
0
;
$i
<
count
(
$poll
);
$i
++
) {
if
(
$arrIP
[
$poll
[
$i
][
1
]]
==
1
) {
$arrRes
[
$poll
[
$i
][
3
]]
=
isset
(
$arrRes
[
$poll
[
$i
][
3
]])
?
$arrRes
[
$poll
[
$i
][
3
]]
+
1
:
1
; } }
var_dump
(
$arrRes
);
?>
mysql5.0测试版:
/**/
/*========================得到测试数据c: .txt=========*/
SELECT
*
into
outfile
'
c: .txt
'
FROM
`testok`;

/**/
/*========================载入临时表=========*/
create
TABLE
phpinterview.testok(id
int
,ip
varchar
(
15
),time
datetime
,iid
int
);
LOAD
DATA INFILE
'
c: .txt
'
into
table
testok;

/**/
/*=========================删除ip有重复的记录=========*/
delete
A
from
testok A,(
select
ip
from
testok B
group
by
ip
having
count
(
*
)
>
1
) B
where
A.ip
=
B.ip

/**/
/*================统计每个投票选项的投票数==============================*/
select
iid,
count
(
*
)
from
testok B
group
by
B.iid
1、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来 表名User Name Tel Content Date 张三 13333663366 大专毕业 2006-10-11 张三 13612312331 本科毕业 2006-10-15 张四 021-55665566 中专毕业 2006-10-15 请根据上面的题目完成代码: $mysql_db=mysql_connect("local","root","pass"); @mysql_select_db("DB",$mysql_db); drop table if exists user;
/*==============================================================*/ /* Table: user */ /*==============================================================*/ create table user ( `Name` varchar(20), Tel varchar(16), Content varchar(255), `Date` date ) insert into user(name,tel,content,`date`) values('张三','13333663366','大专毕业','2006-10-11'); insert into user(name,tel,content,`date`) values('张三','13612312331','本科毕业','2006-10-15'); insert into user(name,tel,content,`date`) values('张四','021-55665566','中专毕业','2006-10-1');
select * from user where name='张三';
<?php header("content-type:text/html; charset=gbk");
$mysql_db=mysql_connect("localhost","root",""); @mysql_select_db("phpinterview",$mysql_db); echo "<table>"; mysql_query("set names gbk"); $result=mysql_query("select Name,Tel,Content,Date from user where Name='张三'") or die("错误:".mysql_error()); while($row=mysql_fetch_array($result,MYSQL_BOTH)) { echo "<tr><td>".$row["Name"]."</td><td>".$row["Tel"]."</td><td>". $row["Content"]."</td><td>".$row["Date"]."</td></tr>"; } mysql_free_result($result); echo "</table>" ?> 3、如何使用下面的类,并解释下面什么意思? class test{ function Get_test($num){ $num=md5(md5($num)."En"); return $num; } } <?php /** * 使用md5加密数据... * */ class test{ function Get_test($num){ $num=md5(md5($num)."En"); return $num; } } $a=new test(); echo $a->Get_test("123"); ?> 4、用javascipt打印 “上海爱吉” <html> <head><title>JS打印</title></head> <body> <script type="text/javascript"> document.write("上海吉它"); </script> </body> </html> 5、写出 SQL语句的格式 : 插入 ,更新 ,删除 select expression from tablename where condition group by columns asc with rollup order by column asc limit offset,rowcount;
insert into tablename(columname) values(exp); update tablename set columnname=exp where condition order by column limit rowcount; delete from tablename where condition order by column limit rowcount; 一、PHP/MySQL编程 1) 某内容管理系统中,表message有如下字段 id 文章id title 文章标题 content 文章内容 category_id 文章分类id hits 点击量 创建上表,写出MySQL语句 2)同样上述内容管理系统:表comment记录用户回复内容,字段如下 comment_id 回复id id 文章id,关联message表中的id comment_content 回复内容 现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面 文章id 文章标题 点击量 回复数量 用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0 3) 上述内容管理系统,表category保存分类信息,字段如下 category_id int(4) not null auto_increment; categroy_name varchar(40) not null; 用户输入文章时,通过选择下拉菜单选定文章分类 写出如何实现这个下拉菜单
drop
table
if
exists
Comment;

drop
table
if
exists
category;

drop
table
if
exists
message;


/**/
/*==============================================================*/

/**/
/* Table: Comment */

/**/
/*==============================================================*/
create
table
Comment
(
comment_id
int
unsigned
not
null
,
id
int
unsigned
not
null
,
comment_content
text
,
primary
key
(comment_id)
)
type
=
InnoDB;


/**/
/*==============================================================*/

/**/
/* Table: category */

/**/
/*==============================================================*/
create
table
category
(
category_id
int
not
null
AUTO_INCREMENT,
category_name
varchar
(
40
)
not
null
,
primary
key
(category_id),
key
AK_pk_category_id (category_id)
)
type
=
InnoDB;


/**/
/*==============================================================*/

/**/
/* Table: message */

/**/
/*==============================================================*/
create
table
message
(
id
int
not
null
,
title
varchar
(
120
)
not
null
,
content
text
not
null
,
category_id
int
unsigned,
hit
int
unsigned,
primary
key
(id)
)
type
=
InnoDB;

select
A.id,A.title,A.hits,IFNULL(B.num,
0
)
from
message A
left
join
(
select
id,
count
(
*
)
as
num
from
comment B
group
by
id) B
on
A.id
=
B.id
order
by
B.num
desc
;
<
html
>
<
head
><
title
>
JS打印
</
title
></
head
>
<
body
>
<
form
>
<
select id
=
"
category
"
name
=
"
category
"
>
<?
php
mysql_connect
(
"
localhost
"
,
"
root
"
,
""
) or
die
(
"
db conn error:
"
.
mysql_error
());
mysql_select_db
(
"
phpinterview
"
) or
die
(
"
db error
"
.
mysql_error
());
$result
=
mysql_query
(
"
select category_id,category_name from category
"
);
while
(
$row
=
mysql_fetch_array
(
$result
))
{
echo
"
<option value='
"
.
$row
[
"
cateogry_id
"
]
.
"
'>
"
.
$row
[
"
category_name
"
]
.
"
</option>
"
;
}
?>
</
select
>
</
form
>
</
body
>
</
html
>
1)内容管理系统:用户提交内容后,系统生成静态HTML页面;写出实现的基本思路 直接通过php写入文件,或使用模板来替换标签 2) 简单描述用户修改以发布内容的实现流程和基本思路 更新内容,替换静态文件 3) 写出以下程序的输出结果 <? $b=201; $c=40; $a=$b>$c?4:5; echo $a; ?> 4 4) 写出以下程序的输出结果 <? $str="cd"; $$str="hotdog"; $$str.="ok"; echo $cd; ?> hotdogok 5)有一表 menu(mainmenu,submenu,url),请用递归法写出一树形菜单,将所有的menu列出来 <html> <head><title>JS打印</title></head> <body> <form> <?php function GenerateMenu($id=0,$str="") { $result=mysql_query("select mainmenu,url,submenu from menu where mainmenu=$id"); while($row=mysql_fetch_array($result)) { echo $str.$row["url"]."<br />"; GenerateMenu($row["submenu"],$str."--"); } mysql_free_result($result); }
$link=mysql_connect("localhost","root",""); mysql_select_db("phpinterview"); GenerateMenu(); mysql_close($link) ?> </form> </body> </html> 6)- 给你三个数,写程序求出其最大值。 $var1=1; $var2=7; $var3=8; $max=$var1>$var2?$var1:$var2; $max=$max>$var3?$max:$var3; echo $max; 9)- 写出发贴数最多的十个人名字的SQL,利用下表: members(id,username,posts,pass,email) SELECT username,count(*) as num FROM `members` group by username desc order by count(*) desc limit 10 10)如何通过javascript判断一个窗口是i已经被屏蔽。 <script> var result = window.open("/somepage.aspx"); if(result==null) { alert("浏览器不允许弹出窗口"); } </script> 11)-写出session的运行机制 用户A访问站点Y,如果站点Y执行了session_start();(以下假定session_start()总是存在)那么会产生一个 session_id,这个session id一般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置session.use_only_cookies为1,强制SESSION ID必须以COOKIE传递。)。这时候SESSION ID表现为$_COOKIE[’PHPSESSID’];(PHPSESSID可用session_name()函数来修改) 用户A接着访问,这个session id($_COOKIE[’PHPSESSID’])就会在A每次访问Y的时候传送到站点Y。 在站点Y上,会有这么一个目录,是用来保存SESSION的实际数据的。站点Y接收到session id,然后通过session id,来获得与SESSION数据的关联,并返回SESSION数据。 13)-防止SQL注射漏洞一般用__addslashes___函数。 14)-查询在线人数,并能处理异常掉线的SQL 参考:http://topic.csdn.net/t/20001216/09/49126.html 二. 数据库设计题: 请设计一套图书馆借书管理系统的数据库表结构;可以记录基本的用户信息、图书信息、借还书信息;数据表的个数不超过6个;请画表格描述表结构(需要说明每个字段的字段名、字段类型、字段含义描述); 在数据库设计中应: 1. 保证每个用户的唯一性; 2. 保证每种图书的唯一性;每种图书对应不等本数的多本图书;保证每本图书的唯一性; 3. 借书信息表中,应同时考虑借书行为与还书行为,考虑借书期限; 4. 保证借书信息表与用户表、图书信息表之间的参照完整性; 5. 限制每个用户最大可借书的本数 6. 若有新用户注册或新书入库,保证自动生成其唯一性标识 7. 为以下的一系列报表需求提供支持: (无特定说明,不需编写实现语句,而需在数据库设计中,保证这些报表可以用最多一条SQL语句实现) a) 日统计报表:当日借书本数、当日还书本数报表; b) 实时报表: i. 当前每种书的借出本数、可借本数; ii. 当前系统中所有超期图书、用户的列表及其超期天数 iii. 当前系统中所有用户借书的本数,分用户列出(包括没有借书行为的用户);请编写实现此需求的SQL语句: 数据库应用: 请撰写一系列的SQL语句,分别描述完整的借书行为与还书行为;并保证这一系列的SQL语句的执行完整性 下题是测验能力之最重要测试,如不能完成我们将无法给出评判结果!所以请写出详细的回答,并保证答案是可以执行的程序。在两日内将结果通过电子邮件寄到[email protected]邮箱 结合第二题中你的设计,用一种数据库实现,要求使用三层结构或者多层结构,要求采用面向对象的思想进行编程,有可能的话,设计一套模板机制来实现之。 功能:列出当前借出图书的情况 ,按日期排列 编号 用户姓名 书名 书的编号 借出日期 1. 张进 大染坊 12576587 2004-9-1 2. 刘兴 西游记 32131098 2004-9-2 |