php перевод строки приводит к исчезновению строкового значения - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть несколько php-запросов и распечатки информации о MySQL-таблице на медицинском веб-сайте. Иногда пользователи вводят, вызывая разрывы строк, где я бы не хотел их, потому что это влияет на макет отображаемой HTML-таблицы так, как это не должно быть.

Я могу обрезать строки, когда они заполняют формы и данные записываются в таблицу, но там уже много данных, поэтому я решил удалить разрывы строк на странице где php читает и печатает результаты.

я объявил одну из строк, где это вызывает проблемы как таковые:

$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>

Код работал достаточно хорошо, но, поскольку я добавил обрезку, весь этот столбец (столбец $ special исчезает).

Я надеюсь, что кто-то может сказать мне, почему он исчезает или в моем синтаксисе есть небольшая ошибка.

1 Ответ

1 голос
/ 05 декабря 2011

Использование 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>';  
                              ^^^^^^^^^^^^^^^^^^^^^
}
...