You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP表单中PostgreSQL查询结果含单引号无法完整显示问题(新手求助)

解决文本框中PostgreSQL查询结果截断的问题

嘿,我看到你遇到的麻烦了——文本框里的内容要么只显示第一个单词,要么单引号后面的内容直接没了,这其实是HTML属性语法问题加上一点变量拼写小失误导致的,咱们一步步来搞定:

问题根源拆解

  1. 变量名拼写不一致:你在else块里写的是line = pg_fetch_assoc($marequete)(不仅少了$符号,变量名是line),但后面输出的时候用的是$ligne[nomope],变量名不统一会导致无法正确取值(不过你说能显示部分内容,大概率是笔误,先把变量名统一)。
  2. 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)会把内容里的单引号转成&#039;,双引号转成&quot;,空格保持原样,不管内容里有什么特殊字符,都不会破坏HTML的属性结构;
  • 用双引号包裹value属性后,浏览器会把整个转义后的字符串当成一个完整的值,不会因为空格或引号截断内容。

你试试这个写法,不管是"phase 110"还是"L'hopital",都能完整显示在文本框里了。

内容的提问来源于stack exchange,提问作者Leehan

火山引擎 最新活动