PHP如何实现存储汽车配件编号的变量在所有项目文件中可访问
问题原因
你在搜索结果页提交上传表单时,没有将配件编号参数传递给图片处理页面subirImagen2.php,因此该页面中$busqueda变量为空,UPDATE语句的WHERE条件匹配不到任何数据,自然执行失败。当你替换为固定编号后条件生效,语句可以正常执行。
修复步骤
1. 修改搜索结果展示页的上传表单
在搜索结果页的上传表单内添加隐藏字段,将当前查询到的配件编号作为参数随表单一起提交:
<!-- 原来的上传表单 --> <form action="subirImagen2.php" method="post" enctype="multipart/form-data"> <!-- 新增隐藏字段传递配件编号 --> <input type="hidden" name="busqueda" value="<?php echo htmlspecialchars($busqueda); ?>"> <table> <tr> <td><label for="imagen">Imagen:</label></td> <td><input type="file" name="imagen" size="50"></td> </tr> <tr> <td colspan="2" style="text-align: center"><input type="submit" value="Enviar Imagen"></td> </tr> </table> </form>
这里使用htmlspecialchars处理输出是为了避免XSS注入风险。
2. 修改图片上传处理页的参数获取逻辑
把原来用$_GET获取参数的代码改为用$_POST获取,同时增加空值判断避免报错:
// 原来的代码 $busqueda=$_GET["buscar"]; 替换为下面的代码 $busqueda = $_POST['busqueda'] ?? ''; if(empty($busqueda)){ exit('未获取到配件编号,请重新搜索后再上传图片'); }
3. 补全更新数据库的逻辑,同时修复SQL注入风险
你原来的SQL直接拼接变量存在严重的SQL注入风险,建议使用预处理语句执行更新操作:
// 图片移动成功后执行更新 require("datosConexion.php"); $conexion=mysqli_connect($db_host,$db_usuario,$db_contra,$db_nombre,"3308"); if(mysqli_connect_errno()){ exit("数据库连接错误"); } // 预处理SQL $stmt = mysqli_prepare($conexion, "UPDATE fiber SET imagen = ? where referencia = ?"); // 绑定参数 s代表字符串类型,两个参数对应两个问号 mysqli_stmt_bind_param($stmt, "ss", $nombre_imagen, $busqueda); // 执行语句 mysqli_stmt_execute($stmt); // 检查影响行数 if(mysqli_stmt_affected_rows($stmt) > 0){ echo "图片关联成功"; }else{ echo "图片关联失败,请检查配件编号是否正确"; } // 关闭连接 mysqli_stmt_close($stmt); mysqli_close($conexion);
补充说明
如果你需要在多个页面全局访问配件编号,也可以将值存入$_SESSION中,使用前需要先在所有用到的页面头部执行session_start(),存入代码为$_SESSION['busqueda'] = $busqueda;,取值代码为$busqueda = $_SESSION['busqueda'] ?? '';。
内容的提问来源于stack exchange,提问作者Julian Rayman
相关产品推荐
相关产品推荐

