PHP换行导致字符串值消失


php linebreak causes string value to disappear

我有一些php查询和打印医疗招聘网站上的mysql表的信息。有时用户输入,导致换行,我不希望他们,因为它会以一种不应该的方式影响呈现的HTML表的布局。

我可以修剪字符串,当他们填写表格和数据写入表,但已经有很多的数据,所以我决定删除页面上的换行符其中PHP读取并打印结果。

i声明了其中一个字符串,这会导致如下问题:

$specialtr = trim($special, "'n"); 

然后是html表呈现的位置:

echo '<td width="150">' . $specialtr . '</td>'; 

完整代码如下:

所有的代码都工作了,只是上面我添加的部分现在导致带有$specialtr变量的列不打印/打印为空。

    <form action="selected.php" method="POST">
<table border="1" cellpadding="2" cellspacing="2" style="width: 98%; margin-left: auto; margin-right: auto;">
<tr>
<td>
<?php
$dbhost = 'xxx';
$dbuser = 'xxx';
$dbpass = 'xxx';
$dbname = 'xxx';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error($conn));
mysql_select_db($dbname) or die(mysql_error($conn));
$specialtr = trim($special, "'n");
echo '<table border="1" cellpadding="2" cellspacing="2" style="margin-left: auto; margin-right: auto;">';
$query = 'SELECT userid FROM employee
      ORDER BY userid ASC';
$result = mysql_query($query, $conn) or die(mysql_error($conn));
$num_entries = mysql_num_rows($result); 
while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $value) {
echo '<tr>';
echo '<td><input type="radio" name="employee" value="' . $row['userid'] . '"/></td>';
echo '<td>Select</td>';
}
}
echo '</tr>';
echo '</table>';
?>
</td>
<td>
<?php
echo '<table border="1" cellpadding="2" cellspacing="2" style="width: 98%; margin-left: auto; margin-right: auto;">';
echo '<tr>';
$query = 'SELECT userid, name, surname, sex, age, nationality, email, telnr, special FROM employee
      ORDER BY userid ASC';
$result = mysql_query($query, $conn) or die(mysql_error($conn));
while ($row = mysql_fetch_assoc($result)) {
extract($row);
echo '<td>' . $userid . '</td>';
echo '<td>' . $name . '</td>';
echo '<td>' . $surname . '</td>';
echo '<td>' . $sex . '</td>';
echo '<td>' . $age . '</td>';
echo '<td>' . $nationality . '</td>';
echo '<td>' . $email . '</td>';               
echo '<td>' . $telnr . '</td>';                
echo '<td width="150">' . $specialtr . '</td>';  
echo '</tr>';
}
echo '</table>';
?>
</td>
</tr>
</table>
<br/>
<br/>
<input type="submit" name="go" value="Go!" />
</form>

代码运行得很好,但是由于我添加了修剪,整个列($特殊列消失了)。

我希望也许有人能告诉我为什么它消失了,或者如果我的语法有一点错误。

这样使用extract()是一件可怕的事情。作为一般规则,应该避免使用该函数。

还请注意,您正在执行trim()调用之前,$special被定义,所以您的$specialtr变量将是一个空字符串。在开始获取数据库结果并将结果行提取到$special之前调用该函数不会神奇地应用trim()来达到您已获取的行。如果您希望在获取结果时对其进行修剪,那么您必须在获取后应用修剪:

while ($row = mysql_fetch_assoc($result)) {
    echo '<td>' . $row['userid'] . '</td>';
    ...
    echo '<td width="150">' . trim($row['special']) . '</td>';  
                              ^^^^^^^^^^^^^^^^^^^^^
}