Code voegt telkens %20 (space) toe
Ik zit echt al uren te peinzen over iets heel vreemds. Ik ben
met een ajax scriptje bezig die om de seconden kijkt of de gebruiker
nieuwe priveberichten heeft. En zo ja, hij het aantal nieuwe berichten
automatisch veranderd op de website. Werkt allemaal perfect, alleen het
vreemde is dat hij telkens %20 (een spatie dus) aan het aantal toevoegd.
Ik heb alles geprobeert in het php script om het weg te krijgen, maar het
blijkt daar niet vandaan te komen.
Google kan me er ook niet mee verder helpen, dus misschien ziet hier iemand de
fout.
De code van het .js bestand. (Het is met jQuery gedaan):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var my_interval = 1000; // om de zoveel milliseconden checken
var local_num = 0;
$(document).ready(function() {
local_num = $("#pb_new_msgs").val();
pb_ping();
});
function pb_ping() {
$.ajax({
type: "GET",
url: 'ajax.php?ajax=pb_ping&local='+local_num, // op deze url peil je enkel naar de laatste id
success: pb_response
});
}
var number = 0;
function pb_response(data) {
number = data;
if(number > 0) {
$("#new_pm_msg_place").html(number);
local_num = number;
}
setTimeout("pb_ping()", my_interval);
}
var local_num = 0;
$(document).ready(function() {
local_num = $("#pb_new_msgs").val();
pb_ping();
});
function pb_ping() {
$.ajax({
type: "GET",
url: 'ajax.php?ajax=pb_ping&local='+local_num, // op deze url peil je enkel naar de laatste id
success: pb_response
});
}
var number = 0;
function pb_response(data) {
number = data;
if(number > 0) {
$("#new_pm_msg_place").html(number);
local_num = number;
}
setTimeout("pb_ping()", my_interval);
}
Het php script stuurt, als er dus nieuwe pb's zijn, het nieuwe getal terug.
Dankjewel alvast.
Groetjes,
Mik
Gewijzigd op 06/09/2012 14:59:49 door Mik PHP
Twee opties: die spatie houden daar goed mee omgaan: zie (php's) urlencode() en urldecode().
Andere optie: die spatie weghalen. Zie trim().
Gewijzigd op 06/09/2012 15:02:11 door Eddy E
Edit:
Helaas, nog steeds een spatie voor het nummer..
Edit:
En het ligt ook niet aan de var local_num. Ik heb die via het js bestand
op dezelfde plek gezet als dat het aantal nieuwe moet komen, en daar zit dan
geen spatie bij. Echter als ik local_num update met het nieuwe aantal pb berichten
zit er wel een spatie in.. Dus op een een of andere manier word er in data een spatie
toegevoegd ergens.. :S
Toevoeging op 06/09/2012 15:16:46:
Naja het blijkt toch ergens uit het php script te komen.. Want
als ik direct na de success via een functie data echo op de pagina
staat er ook een spatie voor...
Dit is de php code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
session_start();
ob_start();
include('include/config.php');
if($_SERVER["HTTP_X_REQUESTED_WITH"] == 'XMLHttpRequest' && !empty($_GET['ajax'])) {
if(isset($_SESSION['hc_userid'])) {
$uid = $_SESSION['hc_userid'];
switch($_GET['ajax']) {
case "pb_ping":
$query = mysql_query("SELECT id FROM private_messages WHERE fid = '{$uid}' AND status = 0");
$i = urlencode(mysql_num_rows($query));
if($i > 0) {
$a = urlencode($_GET['local']);
if($i > $a) {
echo $i;
} else {
echo '0';
}
} else {
echo '0';
}
break;
default:
echo 'none1';
break;
}
} else {
echo'none2';
}
} else {
echo'none3';
}
ob_end_flush();
?>
session_start();
ob_start();
include('include/config.php');
if($_SERVER["HTTP_X_REQUESTED_WITH"] == 'XMLHttpRequest' && !empty($_GET['ajax'])) {
if(isset($_SESSION['hc_userid'])) {
$uid = $_SESSION['hc_userid'];
switch($_GET['ajax']) {
case "pb_ping":
$query = mysql_query("SELECT id FROM private_messages WHERE fid = '{$uid}' AND status = 0");
$i = urlencode(mysql_num_rows($query));
if($i > 0) {
$a = urlencode($_GET['local']);
if($i > $a) {
echo $i;
} else {
echo '0';
}
} else {
echo '0';
}
break;
default:
echo 'none1';
break;
}
} else {
echo'none2';
}
} else {
echo'none3';
}
ob_end_flush();
?>
Toevoeging op 06/09/2012 15:28:46:
Ah ik heb gevonden waar het vandaan kwam, alleen is het nog steeds vreemd..
Het komt uit de config.php die geinclude word en die enkel connectie maakt met mijn database..
Erg vreemd..
Gewijzigd op 06/09/2012 15:09:48 door Mik PHP
Mik tH op 06/09/2012 15:02:54:
Ah ik heb gevonden waar het vandaan kwam, alleen is het nog steeds vreemd..
Het komt uit de config.php die geinclude word en die enkel connectie maakt met mijn database..
Erg vreemd..
Ah ik heb gevonden waar het vandaan kwam, alleen is het nog steeds vreemd..
Het komt uit de config.php die geinclude word en die enkel connectie maakt met mijn database..
Erg vreemd..
Waar je op moet letten bij config files, zijn leading en trailing spaties. Die mogen er niet zijn.
Je begint je file met <?php . Er mag geen spatie, tab of nieuwe regel voor staan.
Er mag ook geen enkele spatie, tab of nieuwe regel staan na ?>.
De simpelste techniek is om de sluitende php haakjes gewoon weg te laten.
------------------------
Dit gezegd zijnde... toch maar even posten wat ik aan het schrijven was.
Een paar dingen die me onmiddellijk opvallen:
- (js) lijn 17:
Daar moet je dit doen:
Het is me trouwens niet duidelijk waarom je number declareert buiten de functie.
- (php) lijn 13 en 15:
Die urlencode's staan daar niets nuttig te doen.
urlencode gebruik je om iets veilig in de url-balk te steken.
Dus bv.
Wanneer $row['page'] karakters bevat die actief zijn in een url, worden die omgezet. Karakters zoals "&" , "?" , "="
En o ja: urlencode genereert onder andere het karakter "%20".
Begin al eens met daar bv. dit van te maken
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$res = mysql_query("SELECT id FROM private_messages WHERE fid = '{$uid}' AND status = 0"); // o ja, ik heb $query hernoemd. Dit is verwarrend.
$i = mysql_num_rows($res);
if($i > 0) {
$a = (int) $_GET['local'];
?>
$res = mysql_query("SELECT id FROM private_messages WHERE fid = '{$uid}' AND status = 0"); // o ja, ik heb $query hernoemd. Dit is verwarrend.
$i = mysql_num_rows($res);
if($i > 0) {
$a = (int) $_GET['local'];
?>
Gewijzigd op 06/09/2012 15:48:38 door Kris Peeters
Kris Peeters op 06/09/2012 15:47:29:
En o ja: urlencode genereert onder andere het karakter "%20".
Hoe?
Dit geeft ==>+<== oftewel een spatie wordt een +
Heeft javascript niet ook een urlencode functie?
Er is in elk geval een verschil, terwijl de tekens hetzelfde betekenen.
Misschien doet PHP er een + van maken en javascript een %20
- SanThe - op 06/09/2012 16:05:46:
... Hoe? ...
Ik moet het nog eens deftig nagaan. Tijdje geleden ...
Kris Peeters op 06/09/2012 16:34:55:
Ik moet het nog eens deftig nagaan. Tijdje geleden ...
- SanThe - op 06/09/2012 16:05:46:
... Hoe? ...
Ik moet het nog eens deftig nagaan. Tijdje geleden ...
http://php.net/manual/en/function.rawurlencode.php
Dankjewel voor alle tips! Ik had inderdaad de urlencode er al uitgehaald. Ook heb ik je andere aanpassingen toegepast.. Ik wist niet dat ik een variable ook binnen een functie kan declareren omdat het tussen $(document).read() niet kon..
Achja weer wat geleerd! Bedankt voor de tips in ieder geval!
Gewijzigd op 01/10/2012 13:55:51 door Mik PHP