Grocery Crud自定义视图:如何通过URL识别查询ID?
嘿,别慌!作为编程和Grocery CRUD的新手,遇到这种URL里取ID的问题太正常了,我给你两个超简单的方法,保证一看就会~
方法1:用PHP自带的
$_SERVER['PATH_INFO']直接拿ID 你的URL是.../scripts/pastMenuPrint.php/2,这里面/2属于PHP的PATH_INFO内容,直接就能拿到:
// 先检查有没有PATH_INFO内容 if (!empty($_SERVER['PATH_INFO'])) { // 去掉开头的斜杠,得到纯ID $menu_id = trim($_SERVER['PATH_INFO'], '/'); // 新手必做:验证ID是数字,防止恶意输入 if (is_numeric($menu_id)) { // 现在就可以用这个$menu_id去查数据库啦! // 比如查历史菜单:SELECT * FROM past_menus WHERE id = $menu_id } else { echo "无效的菜单ID哦"; } } else { echo "请提供要查询的菜单ID"; }
方法2:从完整URL里拆分ID(兼容更多服务器配置)
如果第一种方法不好使(比如服务器没开启PATH_INFO),就从完整请求路径里拆:
// 获取完整的请求路径,比如"/scripts/pastMenuPrint.php/2" $request_uri = $_SERVER['REQUEST_URI']; // 用斜杠把路径拆成数组 $path_parts = explode('/', $request_uri); // 取数组最后一个元素,就是我们要的ID $menu_id = end($path_parts); // 同样要验证是数字! if (is_numeric($menu_id)) { // 执行你的查询逻辑 } else { echo "请输入有效的数字ID"; }
额外小提醒:在Grocery CRUD里正确传ID
你用add_action跳转的时候,要确保把当前行的ID拼到URL里,Grocery CRUD支持用{id}自动替换成当前行的ID,比如:
// 原来的代码可能是这样 // $crud->add_action('打印历史菜单', '', 'scripts/pastMenuPrint.php', 'fa fa-print'); // 改成带{id}的URL,点击按钮时会自动替换成对应行的ID $crud->add_action('打印历史菜单', '', 'scripts/pastMenuPrint.php/{id}', 'fa fa-print');
重中之重:新手一定要注意SQL注入风险!不要直接把$menu_id拼到SQL语句里,最好用预处理语句,比如用mysqli的写法:
// 假设你已经连接了数据库,$conn是连接对象 $stmt = $conn->prepare("SELECT * FROM past_menus WHERE id = ?"); $stmt->bind_param("i", $menu_id); // "i"表示这个参数是整数 $stmt->execute(); $result = $stmt->get_result(); $menu_data = $result->fetch_assoc(); // 拿到ID对应的菜单数据
内容的提问来源于stack exchange,提问作者Dontknowanything879
相关产品推荐
相关产品推荐

