我在JS中有一个函数,该函数将验证传递给它的值。我在php中也有一个while循环,它循环遍历从数据库中获取的数据行。这是我想要实现的,每次调用js函数(在循环内)时,都会验证特定行中的注册号。 以下是我尝试使其工作但仍找不到解决方法的示例代码。
while ($row=mysqli_fetch_array($result)) {
$registration_number=$row['registration_number'];
echo "<script>checkRegNum(".$registration_number.");</script>";
}
?>
<script>
function checkRegNum(str){
var str_1=str.replace("-","");
var str_2=str_1.replace("-","");
var str_3=str_2.replace("-","");
var str_4=str_3.replace("/","");
var str_5=str_4.replace("/","");
var str_6=str_5.replace("/","");
var final_str=str_6;
if(final_str.length!=14){
return 2;
}else{
if( (isNaN(x1)) && (!isNaN(x2)) && (!isNaN(x3)) && (!isNaN(x4)) ){
return 1;//format correct
}else{
return 1;//Format wrong
}
}
</script>
答案 0 :(得分:0)
首先,您错过了}
的功能。
尝试这样!
要在PHP的javascript函数内传递值,您需要用queets包围它,例如:
echo '<script>checkRegNum("'.$registration_number.'");</script>';
<script>
function checkRegNum(str){
var str_1=str.replace("-","");
var str_2=str_1.replace("-","");
var str_3=str_2.replace("-","");
var str_4=str_3.replace("/","");
var str_5=str_4.replace("/","");
var str_6=str_5.replace("/","");
var final_str=str_6;
if(final_str.length!=14){
console.log('A 1');
return 2;
}else{
if( (isNaN(x1)) && (!isNaN(x2)) && (!isNaN(x3)) && (!isNaN(x4)) ){
console.log('A 2');
return 1;//format correct
}else{
console.log('A 3');
return 1;//Format wrong
}
}
}
</script>
<?
while ($row=mysqli_fetch_array($result)) {
$registration_number=$row['registration_number'];
echo '<script>checkRegNum("'.$registration_number.'");</script>';
}
?>
要查看功能是否有效,我为每次返回添加了控制台日志消息。
答案 1 :(得分:0)
出现了很多问题,这表明这可能是一个不好的解决方案。
为什么不首先验证PHP内部的注册号?无效的注册号如何最终出现在数据库中?您应该始终在将输入提交到数据库等之前验证输入。
无论如何,应该在PHP代码段上方定义checkRegNum函数。在javascript中(与大多数语言一样),您必须先定义函数或变量,然后再对其进行引用。
<script>
function checkRegNum(str){
var str_1=str.replace("-","");
var str_2=str_1.replace("-","");
var str_3=str_2.replace("-","");
var str_4=str_3.replace("/","");
var str_5=str_4.replace("/","");
var str_6=str_5.replace("/","");
var final_str=str_6;
if(final_str.length!=14){
console.log('A 1');
return 2;
} else {
if( (isNaN(x1)) && (!isNaN(x2)) && (!isNaN(x3)) && (!isNaN(x4)) ){
console.log('A 2');
return 1;//format correct
}else{
console.log('A 3');
return 1;//Format wrong
}
}
}
<?php
while ($row=mysqli_fetch_array($result)) {
echo 'checkRegNum("' . htmlspecialchars($row['registration_number']) . '");';
}
?>
</script>
此外,您可能希望使用strip_tags()或htmlspecialchars()和其他卫生功能来清理注册号,以确保没有通过数据库的代码注入(XSS攻击)。显然,未经消毒的数据可能最终会存储在数据库中。