Как обновить в базе данных после изменения выбора в HTML выберите в Zend

0

У меня есть раскрывающийся список html select в моем представлении

    <?php $level = $this->escapeHtml($user->level); ?>

    <?php if ($level == 1): ?>
         <option value="1" selected ="selected">Administrator</option>
         <option value="2" <?php IsSelected($level,2); ?>> Manager</option>
         <option value="3" <?php IsSelected($level,3); ?>>HR Staff</option>
     <?php elseif ($level == 2): ?>
         <option value="1" <?php IsSelected($level,1); ?>>Administrator</option>
         <option value="2" selected ="selected">Manager</option>
         <option value="3" <?php IsSelected($level,3); ?>>HR Staff</option>
       <?php elseif ($level == 3): ?>
         <option value="1" <?php IsSelected($level,1); ?>>Administrator</option>
         <option value="2" <?php IsSelected($level,2); ?>>Manager</option>
         <option value="3" selected ="selected">HR Staff</option>
        <?php endif; ?>
    </select>

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

Я попытался использовать onchange событие javascript

 <script type='text/javascript'>


function changeLevel(level){
    var user_id = level.value; 
    $.ajax({
            type: 'GET',
            url: '/editLevel/'+user_id,
            cache: false,
            success: function(response) {
                    $("#test").html(response);
                }
        });
    alert(user_id);
}

</script>

но он терпит неудачу при вызове родительского URL-адреса. это выводит http://localhost/ijm/public/% 7B% 7BURL()% 7D% 7D/editLevel/2 вместо http://localhost/ijm/public/user/editLevel/2

кроме этого, как я могу обновить свою пользовательскую таблицу из этой функции javascript?

это моя функция в userController

public function editLevelAction()
    {
        //return $this->$view;
        $id = (int) $this->params()->fromRoute('id', 0);
        $data = array(
                'level' => $level
        );
        $this->update('user', $data, 'id = ' .'39');

         //return $this->redirect()->toRoute('user');


    }

что мне нужно сделать для этого? Заранее спасибо.

Вот теперь весь код.

<?php
$title = "Manage Users ";
$this->headtitle($title);

$identity = $this->identity()->level;
?>
<!-- these should be between the <head> tags, but make sure they are at least after the head if they can't be in the head-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
<div class="page-header">
    <h1><?php echo $this->escapeHtml($title); ?><small>User list</small></h1>
</div>

<ul class="nav nav-tabs">
    <li class="pull-right"><a href="<?php echo $this->url('user/add'); ?>"><i class="icon-plus"></i>&nbsp;Add new user</a></li>
</ul>
<?php if (count($users)): ?>
    <table class="table table-hover">
    <thead>
    <tr>
        <th>Name</th>
        <th>E-mail</th>
        <th>Level</th>
        <th></th>
      </tr>
    </thead>
    <?php foreach ($users as $user): ?>
   <tr>
        <td><a href="<?php echo $this->url('user/edit', array('id' => $user->id)); ?>"><?php echo $this->escapeHtml($user->first_name . ' ' . $user->last_name); ?></a></td>
        <td><?php echo $this->escapeHtml($user->email); ?></td>
        <td>
            <div id="test"></div>
            <?php $level = $this->escapeHtml($user->level); ?>
            <select name="level" id= "level" onchange="changeLevel(this)">
                 <option value="1" <?php IsSelected($level,1); ?>>Administrator</option>
                 <option value="2" <?php IsSelected($level,2); ?>> Manager</option>
                 <option value="3" <?php IsSelected($level,3); ?>>HR Staff</option>
            </select>
        </td>
        <td style="text-align: right;">
            <a href="<?php echo $this->url('user/delete', array('id' => $user->id)); ?>" class="btn btn-mini btn-danger" rel="tooltip" title="Delete this user"><i class="icon-remove icon-white"></i></a>
        </td>
    </tr>
    <?php endforeach; ?>
    </table>
<?php else: ?>
<h3>There are no registered users available.</h3>
<?php endif; ?>

<script type='text/javascript'>
    function changeLevel(level){
        var user_id = level.value; 
        $.ajax({
                type: 'GET',
                url: '/editLevel/'+user_id,
                cache: false,
                success: function(response) {
                        $("#test").html(response);
                        alert(user_id);
                    }
            });

      }
</script>
  • 0
    "{{URL()}}/editLevel/" в javascript не является допустимым синтаксисом для вызова функции и вставки возвращаемого значения в строку. Если у вас действительно есть метод «URL ()», определенный где-то в Javascript, попробуйте следующий синтаксис: URL()+"/editLevel/" (так же, как вы сделали с user_id ). Если вы нигде не определили эту функцию, вам нужно будет опубликовать более полный пример, чтобы мы могли его увидеть. Кроме того, вам, вероятно, стоит взглянуть на использование ajax вместо изменения расположения окна.
  • 0
    Поставить alert(user_id); внутри success: function(response) { alert(user_id); }
Показать ещё 12 комментариев
Теги:
onchange
zend-framework

1 ответ

1

Попробуйте использовать AJAX (здесь jQuery). Это просто быстрый пример, основанный на вашем:

jQuery Hosted Libraries

<!-- jQUERY Libraries -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>

Форма: выберите

<!-- Just a div to display results if you want to -->
<div id="test"></div>

<form>
    <?php
        // Here is just a quick function to help fix your redundant 
        // select check. This could probably be done better, but you
        // don't need to echo out all 3 sets of options 3 times 
        function IsSelected($value = 1,$level = 1) {
                echo ($value == $level)? 'selected="selected"':"";
            }

        $level = $this->escapeHtml($user->level); ?>

    <select name="level" id= "level" onchange="changeLevel(this)">  
         <option value="1"<?php IsSelected($level,1); ?>>Administrator</option>
         <option value="2"<?php IsSelected($level,2); ?>>Manager</option>
         <option value="3"<?php IsSelected($level,3); ?>>HR Staff</option>
    </select>
</form>

jQuery AJAX

<script type='text/javascript'>

    function changeLevel(level){
        var user_id = level.value; 
        $.ajax({
                type: 'GET',
                url: '/editLevel/'+user_id,
                cache: false,
                success: function(response) {
                        $("#test").html(response);
                    }
            });

      }
</script>
  • 0
    Привет, Дэйв, пара вещей, на которые стоит обратить внимание, ты должен убедиться, что url: address правильный, и убедиться, что php в конце этой страницы работает нормально. Приведенный код работает, гарантировано. Я проверил это перед публикацией.
  • 0
    Привет спасибо! но извините, это не сработало. когда я пытаюсь изменить свой выбор, он ничего не делает. Я обновлю свой вопрос, чтобы опубликовать весь мой код. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню