PHP POST方法无法传递变量,如何实现分类选择跳转至指定页面?
搞定表单参数传递问题!
嘿,我一眼就看到你代码里的问题啦:表单渲染的时候,$categoryID还没被POST赋值呢——只有点击提交按钮触发POST请求后,这个变量才会有值,所以表单action里的<?php echo $categoryID ?>其实是空的,自然没法正确跳转到带参数的load.php。而且你现在混合了POST和GET的用法,咱们可以调整几种方式来实现你的需求:
方案一:直接用GET提交,最简单!
既然你最终想要URL里带上categoryID参数,不如直接把表单的method改成get,这样选中的分类ID会自动拼到URL的查询参数里,根本不用手动在action里拼接:
<form class="add-new-post" method="get" action="load.php" enctype="multipart/form-data"> Choose Category: <select name="categoryID" > <?php do { ?> <option value="<?php echo $editcat_rs['categoryID']; ?>"> <?php echo $editcat_rs['name']; ?></option> <?php } while ($editcat_rs=mysqli_fetch_assoc($editcat_query));?> </select> <button type="submit" class="btn btn-primary" name="update">Post</button> </form>
提交后就会自动跳转到load.php?categoryID=你选的ID&update=Post,在load.php里用$_GET['categoryID']就能拿到参数啦。
方案二:保留POST,在load.php里跳转
如果你必须用POST(比如后面要传其他表单数据),可以让表单直接提交到load.php,然后在load.php里拿到POST的categoryID后再跳转到带GET参数的地址:
第一步:修改表单的action
<form class="add-new-post" method="post" action="load.php" enctype="multipart/form-data"> Choose Category: <select name="categoryID" > <?php do { ?> <option value="<?php echo $editcat_rs['categoryID']; ?>"> <?php echo $editcat_rs['name']; ?></option> <?php } while ($editcat_rs=mysqli_fetch_assoc($editcat_query));?> </select> <button type="submit" class="btn btn-primary" name="update">Post</button> </form>
第二步:在load.php里加跳转逻辑
<?php // 先处理POST提交的参数 if(isset($_POST['update']) && isset($_POST['categoryID'])){ $categoryID = $_POST['categoryID']; // 跳转到带GET参数的页面 header("Location: load.php?categoryID=" . $categoryID); exit; // 一定要加exit,防止后续代码执行 } // 然后处理GET参数的业务逻辑 if(isset($_GET['categoryID'])){ $categoryID = $_GET['categoryID']; // 这里写你要展示的内容或者其他操作 } ?>
这样既保留了POST提交,最终也能实现URL里带categoryID的效果。
方案三:用JS动态改表单action
不想改后端的话,也可以用JavaScript监听下拉框的变化,动态修改表单的提交地址:
<form class="add-new-post" method="post" action="" enctype="multipart/form-data" id="categoryForm"> Choose Category: <select name="categoryID" id="categorySelect"> <?php do { ?> <option value="<?php echo $editcat_rs['categoryID']; ?>"> <?php echo $editcat_rs['name']; ?></option> <?php } while ($editcat_rs=mysqli_fetch_assoc($editcat_query));?> </select> <button type="submit" class="btn btn-primary" name="update">Post</button> </form> <script> // 监听下拉框变化,修改表单action document.getElementById('categorySelect').addEventListener('change', function() { const categoryID = this.value; document.getElementById('categoryForm').action = `load.php?categoryID=${categoryID}`; }); // 页面加载时初始化action(如果有默认选中项) window.addEventListener('load', function() { const select = document.getElementById('categorySelect'); if(select.value) { document.getElementById('categoryForm').action = `load.php?categoryID=${select.value}`; } }); </script>
这样用户选完分类后,表单的action就已经带上了对应的ID,点击提交就能正确跳转啦。
内容的提问来源于stack exchange,提问作者Abegail Grace Ulanday
相关产品推荐
相关产品推荐

