PHP表单中PostgreSQL查询结果含单引号无法完整显示问题(新手求助)
解决文本框中PostgreSQL查询结果截断的问题
嘿,我看到你遇到的麻烦了——文本框里的内容要么只显示第一个单词,要么单引号后面的内容直接没了,这其实是HTML属性语法问题加上一点变量拼写小失误导致的,咱们一步步来搞定:
问题根源拆解
- 变量名拼写不一致:你在
else块里写的是line = pg_fetch_assoc($marequete)(不仅少了$符号,变量名是line),但后面输出的时候用的是$ligne[nomope],变量名不统一会导致无法正确取值(不过你说能显示部分内容,大概率是笔误,先把变量名统一)。 - HTML属性未正确包裹+特殊字符未转义:你的
input标签里value=<?php echo"'$ligne[nomope]'" ; ?>写法有两个坑:- 没给
value属性加双引号包裹,浏览器会把空格当成属性分隔符,所以"phase 110"会被解析成value='phase,后面的110'直接被当成无效属性; - 内容里的单引号(比如"L'hopital")会提前闭合你手动加的单引号,导致只显示"L"。
- 没给
修复步骤
1. 规范数据库连接+统一变量名
先把数据库连接抽出来单独执行,避免每次查询都重复建立连接,同时修正变量名:
// 先建立数据库连接(放在查询之前,只执行一次) $dbConn = pg_connect("host=$server port=$port dbname=$base user=$_SESSION[identifier] password=$_SESSION[password]"); if (!$dbConn) { die("数据库连接失败,请检查会话中的账号密码"); } $sql3 = "select * from matable where code_tranche = $1" ; $marequete = pg_query_params($dbConn, $sql3, array($code_tranche));
2. 正确输出文本框的value值
用双引号完整包裹value属性,同时用htmlspecialchars()转义内容,并且加上ENT_QUOTES参数确保单引号和双引号都被转义:
<body class="imagemenuu"> <div> <form> <h4>Operation <?php echo htmlspecialchars($code_tranche); ?></h4> <?php if (pg_num_rows($marequete) == 0) { echo "<h5> The operation '" . htmlspecialchars($code_tranche) . "' does not exist </h5>"; } else { $ligne = pg_fetch_assoc($marequete); // 统一变量名为$ligne // 可以用var_dump测试取值,但最终输出到文本框必须转义 // var_dump($ligne['nomope']); } ?> <p class="psga">operation name: <input type="text" size='60' name="nom_ope" value="<?php echo htmlspecialchars($ligne['nomope'], ENT_QUOTES); ?>" class="alert alert-info"> </p> <!-- 补上之前遗漏的闭合p标签 --> </div> </form> </body>
为什么这样能解决问题?
htmlspecialchars($ligne['nomope'], ENT_QUOTES)会把内容里的单引号转成',双引号转成",空格保持原样,不管内容里有什么特殊字符,都不会破坏HTML的属性结构;- 用双引号包裹
value属性后,浏览器会把整个转义后的字符串当成一个完整的值,不会因为空格或引号截断内容。
你试试这个写法,不管是"phase 110"还是"L'hopital",都能完整显示在文本框里了。
内容的提问来源于stack exchange,提问作者Leehan




