5

我有一个关于 jQuery UI 对话框和显示数据库中的动态内容的问题。

所以我得到了一个 web 应用程序,我还需要在其中创建一个管理模块来管理所有用户和其他信息。我创建了一个在列表中显示所有用户的页面,在每一行中我还制作了一个编辑按钮。我想这样当您按下用户的编辑按钮时,会打开一个对话框并在对话框中显示所有用户信息和内容。

所以我的问题是,最好的方法是什么?我正在考虑制作一个 PHP 页面,在其中执行 MySQL 查询并在对话框中显示它,但我相信有更好的方法..

编辑:这是现在页面的代码。我添加了一个用于测试目的的小占位符对话框。

Javascript:

script type="text/javascript"> 
    jQuery(document).ready( function(){       
        jQuery(".edit-button").click( showDialog );

            //variable to reference window
            $myWindow = jQuery('#myDiv');

            //instantiate the dialog
            $myWindow.dialog({ height: 600,
                    width: 800,
                    modal: true,
                    position: 'center',
                    autoOpen:false,
                    title:'Bewerk therapeut',
                    overlay: { opacity: 0.5, background: 'black'}
                    });
            }

    );
//function to show dialog   
var showDialog = function() {
    $myWindow.show(); 
    //open the dialog
    $myWindow.dialog("open");
    }

var closeDialog = function() {
    $myWindow.dialog("close");
}

PHP:

<?php
//LEFT OUTER JOIN Vragen ON Vragen.bsn_nummer = Gebruikers.bsn_nummer
include_once 'classes/class.mysql.php';
$db = new Mysql();
$dbUsers = new Mysql();

$db->Query("SELECT * FROM USERS_users ORDER BY username ASC");
$db->MoveFirst();

echo "<table>";
echo "<tr><th> </th><th> </th><th>BSN Nummer</th><th>Gebruikersnaam</th>       <th>Voornaam</th><th>Achternaam</th></tr>";
while(! $db->EndOfSeek()) {
$row = $db->Row();
$dbUsers->Query("SELECT * FROM Gebruikers WHERE user_idnr = '{$row->user_idnr}'");
$rowUser = $dbUsers->Row();
echo "<tr><td><a class='del-button' href='#'><img src='afbeeldingen/edit-delete.png' /></a></td>
    <td><a class='edit-button' href='#'><img src='afbeeldingen/edit.png' /></a>  </td>
    <td>".@$rowUser->bsn_nummer."</td>      
    <td>".@$row->username."</td>
    <td>".@$rowUser->voornaam."</td>
    <td>".@$rowUser->achternaam."</td></tr>";
    }
    echo "</table>";
?>
<div id="myDiv" style="display: none">
<p>Gebruiker bewerken</p>
</div>
4

4 回答 4

6

没有。听起来你做对了。

弹出窗口的占位符 - >

<div id="popup"></div>

jQuery ui 对话框 ->

$('#popup').dialog({
  autoOpen: 'false',
  modal: 'true',
  minHeight: '300px',
  minWidth: '300px',
  buttons: {
    'Save Changes': function(){
      $.ajax({
        url: 'path/to/my/page.ext',
        type: 'POST',
        data: $(this).find('form').serialize(),
        success: function(data){
          //some logic to show that the data was updated
          //then close the window
          $(this).dialog('close');
        }
      });
    },
    'Discard & Exit' : function(){
      $(this).dialog('close');
    }
  }
});

现在已经创建了默认设置,从 php 文件发送数据的 ajax 请求,并更新 'popup' div 中的内容。

$('.edit').click(function(e){
  e.preventDefault();
  $.ajax({
    url: 'path/to/my/page.ext',
    type: 'GET',
    data: //send some unique piece of data like the ID to retrieve the corresponding user information
    success: function(data){
      //construct the data however, update the HTML of the popup div 
      $('#popup').html(data);
      $('#popup').dialog('open');
    }
  });
});

在 PHP 页面中,构造一个要发回的表单 ->

<?php
  if(isset($_GET['id'])){
    //build the query, do your mysql stuff
    $query = mysql_query(sprintf("SELECT * FROM sometable WHERE id = %d", $_GET['id']));
    //construct constant objects outside of the array
?>
  <form>
  <?php
    while($row = mysql_fetch_array($query)){
  ?>
    <tr>
      <td>
        <input type="text" name="<?php echo $row['id']?>" value="<?php echo $row['name'] ?>" />
      </td>
    </tr>   
  <?php 
    }
  ?>
  </form>
<?php
  }    
?>
于 2012-07-17T14:57:48.653 回答
1

我相信有更好的方法..

不,仅此而已。

您将需要一个 PHP 脚本来为您提供用户的当前详细信息,以及您应该结合添加新用户或更新现有用户的第二个脚本。

使用 AJAX 获取用户列表,同样让“当前详细信息”页面发回包含信息的 JSON blob。

使用客户端 Javascript 填充对话框本身。

最困难的部分是确保只有授权用户才能与后端脚本对话。

于 2012-07-17T14:40:08.693 回答
1

这是我要做的:

  1. 创建用户列表时,我知道每个用户的 ID(唯一)。然后为编辑按钮附加一个事件处理程序,该处理程序将向具有该用户 ID 的服务器端脚本发出 ajax 请求,服务器端脚本将以 JSON 格式向您发送用户详细信息。

  2. 有一个模板,例如一个 div,其中包含更新用户详细信息所需的所有字段(带有附加的类或 id,因此您将知道如何使用选择器找到它们)。当您从服务器接收数据时,您将模板中字段的值设置为服务器响应中的数据,然后打开对话框(现在预先填充了您需要的数据)。

  3. 更新用户详细信息也可以通过 ajax 来完成,以保持简单。(获取输入中的值,并向服务器发送请求,同时发送您想要更改详细信息的用户的 ID。

所以……祝你好运!

于 2012-07-17T14:55:46.020 回答
0

最简单的方法是使用 PHP 获取数据库中的信息,然后像这样填充 UI 表。主要的缺点是加载时间。如果您发现页面加载时间过长,那么您可能需要查看 jQuery 的.ajax()

于 2012-07-17T14:40:35.933 回答