我目前正在使用Codeigniter进行基本的CRUD。我有以下代码
JS-
function approve(args){
if(confirm('Do you want to approve this document?')){
window.location = "http://52.45.5.57/index.php/FinalizeCase/approve/" + args;
}else{
return false;
}
HTML和一些PHP循环所有的PKs以生成类似的东西
<input type="submit" name="submit" value="Approve" onclick="approve(0000000004)"/>
<input type="submit" name="submit" value="Approve" onclick="approve(0000000008)"/>
但奇怪的是,有时当我点击链接时,我会得到非常奇怪的值,即15,我得到13。我想也许我混合了循环或其他什么,并尝试将单元格更改为215 ~当我测试它时,我得到了140,尽管我的最大单元格和DB大约为15,不包括我为测试而提出的那个。
单击前检查了链接参数,并在单元格中使用相应的值进行了签出。
尝试使用以下内容,但保持不变,251变为141,12变为8。
- 使用按钮而不是输入标记
- 在html标记中使用唯一的名称和值
您真的需要前导零吗?您正经历php或JavaScript等松散类型语言的一个缺点:解释器决定每个变量的类型,而不是您。它在大多数情况下节省了工作,因为"它只是工作",但有时解释器选择的数据类型不是你所期望的,最终你会出现在这里。
你可能认为你的args是字符串或有很多前导零的整数,但解释器实际上看到的是八进制数(当转换为十进制时,会改变(
根据你期望的实际类型,你有很多选择:
如果你希望参数被视为字符串,你需要保留前导零,但要防止任何像这样的八进制解释
function approve(args)
{
var a = String(args); // force the type to string
if(confirm('Do you want to approve this document?'))
{
window.location = "http://52.45.5.57/index.php/FinalizeCase/approve/" + a;
}
else
{
return false;
}
为了安全起见,您可能还想将控制器中的值转换为字符串。假设args在PHP部分中也被称为$args,那么您可以执行类似的操作
public function approve( (string) $args = null)
{
// Do whatever you need to do
}
如果数据库中的args是一个零填充整数,这也是我推荐的操作方法。
如果需要将args视为字符串,则应修剪前导零,并使用JavaScript中的parseInt();
和/或php中的$args = (int) $args;
强制转换为int
就像@Funk Forty Niner说的那样。
解决方案很简单,只需去掉前导零即可。
$str = ltrim($str, '0');