php - заполнение полей формы из значений базы данных - PullRequest
0 голосов
/ 08 января 2012

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

<tr><td>City</td><td><input type="text" name="city" value="<? $city = "usercity"; echo $formValue->location('$city'); ?>"></td>
<td>State</td><td><input type="text" name="state" value="<? $state = "userstate"; echo $formValue->location('$state'); ?>"></td>

Есть ли способ установить значение на основе входных данных (из полей выше)?Если бы это было что-то вроде function location($input), я бы знал, как это сделать, но если в скобках ничего нет, есть ли способ установить значение?

function location(){
        $userid = $_SESSION['userid'];
        $server = 'localhost';
        $user = 'root';
        $password = '';
        $connection = mysql_connect($server, $user, $password) or die(mysql_error());
        mysql_select_db(testdb, $connection) or die(mysql_error());                     
        $result = mysql_query("SELECT '$location' FROM userinfo WHERE userid = '$userid'");
        $user_data = mysql_fetch_array($result);

    if($location =='usercity'){
        $userlocation = $user_data['usercity'];
        return $userlocation;
    }
    else 
        $userlocation = $user_data['userstate'];
        return $userlocation;
    }

Ответы [ 3 ]

0 голосов
/ 08 января 2012

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

Для моего текущего проекта я оставил входные имена такими же, какимена полей mysql.Упрощает отправку и заполнение.

Когда дело доходит до заполнения форм, я использую некоторый ajax (jQuery используется во всем проекте, поэтому с помощью функции jjery ajax ();

FORM

<form>
<input name="field_one" type = "text" >
<input name="field_two" type = "text" >
<input type="button" value="Send">
</form>

Я помещаю условный оператор в верхней части документа по следующим строкам:

<?php if($_POST['update']){ 
    $query=mysql_query("SELECT * FROM table WHERE unique_id='$id' LIMIT 1");
    echo json_encode(mysql_fetch_assoc($query));
    exit;
} ?>

Допустим, у вас есть список элементов, которые вы хотите иметь возможность щелкать и редактировать (заполните форму соответствующими данными.) Я присваиваю ей атрибут data- и заполняю его уникальным идентификатором, обычно AI PRIMARYKEY, например:

while($r=mysql_fetch_assoc($data)){
    echo "<li data-unique_id=\"\">$r[name]<span class="edit">edit</span></li>";
?>

$('.edit').click(function(){
    var toget = $(this).parent().data('unique_id');
    $.ajax({
        url:'here so it sends to itself',
        data:'update='+toget,
        success:function(data){
            for (var key in data) {
        if (data.hasOwnProperty(key)) {
            $('input[name="'+key+'"]').each(function(){
            $(this).val(data[key]);
            });
        }
        }
        }
    });

Для <select>, <textarea>, checkboxes требуется немного больше работы, но применима та же общая идея, (я добавил пару операторов if, но, вероятно, это можно было бы обработать лучше)

Я мог бы объяснить это лучше, но я надеюсь, что вы поняли идею, и ябыла некоторая помощь.

К вашему сведению

мои вставки похожи на ...

foreach($_POST as $k=>$v){
    $v=mysql_real_escape_string($v);
    $fields.=" `$k`,";
    $vals.=" '$v',";
}
$fields=substr($fields,0,strlen($fields)-1);//to get rid of the comma :)
$vals=substr($vals,0,strlen($vals)-1);//and again
mysql_query("INSERT INTO ($fields) VALUES ($vals)");
0 голосов
/ 08 января 2012

Из того, что я вижу в вашем коде, у вас есть переменная в одинарных кавычках:

$city = "usercity"; echo $formValue->location('$city');

удаляет одинарные кавычки, так как она будет передавать $ city как есть, а не значение $ city.Попробуйте

$city = "usercity"; echo $formValue->location($city);

, чтобы прояснить ситуацию:

$city = "usercity";
print ('$city'); // will print $city
print ($city); // will print usercity
0 голосов
/ 08 января 2012

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

Ваша отправная точка (с точки зрения сервера) заключается в том, что запрос HTTP GET поступил от клиента для этой страницы или клиент возвращается на эту страницу после запроса POST. В любом случае сервер обнаружил «ресурс» (сценарий PHP), который должен обработать этот запрос, и отправил его, загрузив интерпретатор PHP с файлом сценария.

Контекст в этой точке находится в первой строке скрипта; в тот момент, когда интерпретатор только что закончил синтаксический анализ и начал выполнять. Задайте себе вопрос: включает ли текущий запрос идентификатор активной сессии? Если у него есть активный сеанс, то проверьте, заполнил ли клиент эту форму раньше, и, если он есть, замените значения формы по умолчанию, которые они ранее отправили, на значения по умолчанию для обычной формы. Если клиент не имеет активного сеанса или не использовал форму ранее, тогда при необходимости отобразите пустую форму со значениями по умолчанию.

Совет: попробуйте использовать эту технику для отладки вашего кода. Выберите строку в своем коде и установите умственную «точку останова» в этом месте. Спросите себя: каков контекст этого сценария на данный момент? Какие переменные определены? Каково состояние сервера? Чего ожидает клиент? Когда у вас есть ответ на эти вопросы, написать код просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...