заполнение текстовой области / поля существующими данными - PullRequest
1 голос
/ 20 апреля 2009

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

В данный момент я выбираю данные и отображаю их в текстовой области следующим образом:

$usernameQuery = "select username, firstname from USERS where username = '" . $con->escape_string($username) . "'";     

$xblah = $con->query($usernameQuery);
  while ($row = mysqli_fetch_assoc($xblah))
  {
    $checkUsername = $row['username'];
    $checkFirstName = $row['firstname'];
   }


echo "<form name=\"userForm\">
<h1>Editing information for: ".$username."</h1>
<p>
First name:
<textarea rows=\"1\" id=\"firstname\">".$checkFirstName."</textarea>
<br />
</form>"

Эта текстовая область не отображается правильно в Firefox, из-за ошибки отображения двух строк, когда указана одна. Есть ли способ сделать то же самое с input type = text?

Также, в настоящее время содержимое имени в базе данных является john для моей записи теста, но var_dump ($ checkFirstName) показывает только s. Что я должен сделать, чтобы получить фактическое содержимое поля?

Ответы [ 5 ]

2 голосов
/ 20 апреля 2009

Есть ли способ сделать то же самое с типом ввода = текст?

<input type="text" name="firstname" value="<?= $checkFirstName ?>" />

Что касается вашей другой проблемы, есть ли другой пользователь, который имеет имя 's', но также имеет то же имя пользователя, что и пользователь с именем 'john'? Причина, по которой я говорю это, заключается в том, что вы используете цикл while для извлечения ваших данных, поэтому, если есть несколько совпадений, у вас останется последняя строка, которая соответствует вашему запросу.

Возможные способы решения этой проблемы включают не использование цикла while (что означает, что вы хотите получать / обрабатывать несколько строк данных) и обеспечение уникальности всех имен пользователей.

Кроме этого, я не понимаю, почему значение, извлеченное из 'firstname', не будет соответствовать тому, что находится в базе данных.

0 голосов
/ 05 марта 2014

Попробуйте поместить весь свой PHP-код здесь:

   <textarea id="firstname" rows="1">
        <?php
              //connect to database
              //Select data
            if(mysql_num_rows($sql)) {
                 $row = mysql_fetch_row($sql);
                  echo nl2br($row['0']);
            }
        ?>
   </textarea>
0 голосов
/ 20 апреля 2009

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

<?php
    echo '<input type="text" name="name" value="' . htmlentities($checkFirstName) . '">';
?>

не забывайте о htmlentities или htmlspecialchars (зависит от кодировки - если ваша кодировка - Unicode, htmlspecialchars должно быть достаточно, в противном случае его htmlentities). не используйте htmlentities только для полей формы, но всякий раз, когда вы печатаете предоставленные пользователем данные. в противном случае кто-то может внедрить xss (cross site scripting) атаки или, по крайней мере, создать ошибочный html, указав имя пользователя, например

<script type="text/javascript">execute_evil_code();</script>

как для отображения только одного символа вместо полной строки: обычно это происходит, если вы думаете, что работаете с массивом и вместо этого имеете строку. используйте var_dump($variable);, чтобы увидеть тип ваших переменных.

также, как сказал htw, проверьте, действительно ли $username уникален, и вы получаете правильный ряд. запустите полученный запрос (echo $usernameQuery;) в phpmyadmin (или любом другом инструменте, который вы используете). если возвращается более одной строки, ваше имя пользователя не уникально (возможно, это ошибка само по себе), и строка, которую вы получаете, не первая, а последняя. это странно, потому что 's' не является частью "john", поэтому, возможно, набор результатов mysql - это нечто совершенно другое. отладка на более высоком уровне и var_dump вся строка $.

0 голосов
/ 20 апреля 2009

Если вы используете input type = text input, все, что вы вводите в атрибут value, будет показано по умолчанию.

echo '<input type="text" value="' . $checkFirstName . '">';

Конечно, вам нужно убедиться, что вы выполняете некоторую очистку $ checkFirstName, прежде чем выводить его в это поле, на всякий случай.

Что касается получения значений вашего поля, попробуйте var_dumping $ row перед вашим циклом while, и посмотрите, сможете ли вы выяснить, что с этим не так. Если это не показывает ничего полезного, возможно, var_dump внутри вашего цикла while с хорошим


между каждой итерацией? Это должно дать вам полное представление о том, что именно возвращается из вашего запроса в полном объеме. Кроме того, если var_dump слишком много информации для вас, проверьте:
print_r($var)

print_r документация

0 голосов
/ 20 апреля 2009

Используйте атрибут 'value' входного тега.

First name: <input type=\"text\" name=\"name\" value=\"$checkFirstName\"/><br />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...