I’m trying to use Ajax together with jQuery to make a little window pop up when you click on a username in my custom forums.
My current code for the script:
$(document).ready(function () {
$('#profile_link').click(function () {
$.ajax({
type: 'POST',
url: 'viewuser.php',
dataType: 'html',
contentType: 'text/html',
data: {
username: $('#username').val()
},
success: function (html) {
$('#message').addClass('success');
$('#message').hide().append(html).fadeIn();
}
});
return false;
});
});
I tried using html(), but that didn’t work at all, as it didn’t even display the response, even though I could see the response in Firebug.
Here’s the code to viewuser.php:
<?php
$docRoot = getenv("DOCUMENT_ROOT");
require_once $docRoot.'/settings.php';
loginMySQL();
selectDatabase();
$user = $_POST['username'];
$sql = mysql_query ("SELECT `UserName`,`Avatar`,`Biography`,`Birthday`,`UserLevel`,`BanStatus` FROM users WHERE `UserName` = '$user'");
$UserInfo = mysql_fetch_array($sql);
$UserAvatar = $UserInfo['Avatar'];
$UserBio = $UserInfo['Biography'];
$UserBirth = $UserInfo['Birthday'];
$UserLevel = $UserInfo['UserLevel'];
$BanStatus = $UserInfo['BanStatus'];
// additional code
...
?>
<div class="nav_space">
</div>
// additional code
<div class="user_profile_wrapper">
Hello
<?=$BanStatus;?>
<i>Username / Power level:</i>
<div class="user_profile_name" <?=$LevelColour;?>>
<?=$user;?> <i><?=$UserLevel;?></i>
</div>
<i>User avatar:</i>
<div class="user_profile_avatar">
<?
if (strlen($UserAvatar) > 1) {
?>
<img/ src="<?=$UserAvatar;?>" alt="" width="100" />
<?
}
?>
</div>
<i>Biography:</i><br />
<div class="user_profile_bio">
<?=$UserBio;?>
</div>
<i>Birthdate:</i>
<div class="user_profile_birthdate">
<?=$UserBirth;?>
</div>
<?=$AUserLevel;?>
</div>
<div class="nav_space">
</div>
And the problem is, when it returns the code, it doesn’t actually display any of the variables ($BanStatus, $UserLevel, anything).
Any ideas?
Ideally you shouldn’t change between
<?phpand<?as I believe support for short tags is being dropped.Also, you haven’t sanitised your user name
Updated 1
The code below is a working example, I have cleaned up your code a little bit. However with your original code changing
username : $('#username').val()
tousername : $('#username').html()should work for you.Code for so.html
Code for viewuser.php
Output:
Updated 2
Code for so.html
I’ve updated it once again for you. We use $(this).children(“.username”) to ensure that we return the username from the selected link. We’ve changed to to use classes as there are more than one instance of each element now, and I’ve changed the html to use a span tag as it’s a bit more appropriate.