`title` varchar(50) NOT NULL,
`description` varchar(255) NOT NULL,
}elseif ($action == 'add'){
if(submitcheck('idauthfieldaddsubmit')) {
$newtitle = cutstr(dhtmlspecialchars($newtitle),50);
$newdescription = cutstr(daddslashes($newdescription),255);
$db->query("INSERT INTO {$tablepre}idauthfieldsvar (...,title,description,...) VALUES (..., '$newtitle', '$newdescription',...)");
showmessage('成功添加一条新的认证项目!', "idauthsetcp.php?action=index");
}
include template('idauth_set_add');
}
查看dz代碼,相關的地方似乎都使用了cutstr來截取字元,但問題是一個漢字是兩個字元,DZ的cutstr函數截取的不很好。比如title字段輸入50個“日”字,cutstr函數就只是截取了前25個並且寫入資料庫(如上圖中infofieldid為9處所示),但事實上這50個“日”字的字串本來符合varchar(50)的要求。
另外在實際應用中,發現MySQL會自動幫你截取字串。比如66個“日”字的字串,在執行數據庫INSERT的操作過程中,MYSQL會自動截取到50個“日”字的字串來符合varchar(50)的要求,這樣一來又似乎失去了使用cutstr的需要(如上圖中infofieldid為10處所示)。
由於title要求不能支持html格式,因此對$newtitle進行dhtmlspecialchars處理,然後就寫入資料庫(如上圖中infofieldid為7,8處所示)。
但現在非常關心的一件事情是,進行了dhtmlspecialchars處理之後,還需不需要使用daddslashes進行轉義以防止SQL注入?也就是說,在進行了dhtmlspecialchars處理的前提下,用了daddslashes和沒用daddslashes對防止SQL注射有沒有影響?