如何从其他PHP文件中调用指定PHP页面并传递所需参数
问题背景
你现有3个PHP页面的逻辑如下:
- View.php:通过JS的onclick事件触发AJAX POST请求调用目标PHP页面
生成触发元素的PHP代码:
配套AJAX请求函数:echo "<td><a id='execute' href='' onclick='execute_upgrade_page($workflow_id,".$row['Task_Number'].",\"demo.php\")' title='Click to Execute the workflow'> <i class='fa fa-forward' style='font-size:16px'></i> </a></td>";function execute_upgrade_page(id,tnum,scriptName){ $.ajax({ url: scriptName, method: "POST", data: { id: id, tnum:tnum, scriptName:scriptName }, success: function(data) { console.log(data); } }); } - demo.php:已完成POST参数校验,现有逻辑可正常运行
参数校验代码:if(isset($_POST['id']) && isset($_POST['tnum']) && isset($_POST['scriptName'])) { } - modify.php:已通过数据库查询匹配到目标脚本为demo.php,需要补全携带3个必填参数调用/跳转demo.php的逻辑
现有待补全代码段:$get_script_name = "select * from details where `Workflow_Number` = $workflow_id and Task_Number = $task_num"; $check_prep_task_details=mysqli_query($con,$get_script_name); if(mysqli_num_rows($check_prep_task_details) > 0) { while ($row = mysqli_fetch_array($check_prep_task_details)) { $db_script = $row['Script_Name']; if($db_script == "demo.php") // 此处补全调用逻辑 } }
实现方案
根据实际业务需求二选一即可:
场景1:需要浏览器跳转到demo.php(和前端点击触发的交互效果一致)
因为demo.php校验的是POST参数,不能直接用GET方式拼接URL跳转,在注释位置输出自动提交的隐藏表单即可实现POST跳转:
if($db_script == "demo.php"){ // 三个参数直接取当前上下文已有的变量即可 $target_id = $workflow_id; $target_tnum = $task_num; $target_script = $db_script; // 输出隐藏表单+自动提交JS echo <<<HTML <form id="auto_post_jump" action="{$target_script}" method="post"> <input type="hidden" name="id" value="{$target_id}"> <input type="hidden" name="tnum" value="{$target_tnum}"> <input type="hidden" name="scriptName" value="{$target_script}"> </form> <script>document.getElementById('auto_post_jump').submit();</script> HTML; exit; // 终止当前页面后续逻辑执行 }
场景2:不需要用户感知跳转,在modify.php服务端直接运行demo.php的逻辑
不需要发起额外HTTP请求,直接手动给$_POST超全局变量赋值,模拟POST传参后引入demo.php即可,注意提前确认demo.php内的文件引用路径、依赖变量和当前页面兼容:
if($db_script == "demo.php"){ // 模拟POST传参 $_POST['id'] = $workflow_id; $_POST['tnum'] = $task_num; $_POST['scriptName'] = $db_script; // 引入目标文件执行逻辑 require_once "demo.php"; }
额外提示:你现有SQL语句直接拼接变量入参,存在SQL注入风险,建议改用mysqli预处理绑定参数的写法,避免安全漏洞。
内容的提问来源于stack exchange,提问作者anu priya
相关产品推荐
相关产品推荐

