Вход

Просмотр полной версии : Нули перед ответом от PHP скрипта


mihael_p
16.01.2013, 13:50
Есть PHP скрипт, который цепляет с БД данные и отдает их флешке, и вот перед ответом стоят три нуля, выглядит это примерно так:

000score=60&language=0&time=8&firsttime=1



<?php
include "connect.php";
if (!isset($_GET['id']))
{
echo "No id - no data";
exit;
}
$save = false;
$id = $_GET['id'];
$add = "";
$comma = "";
if (isset($_GET['firstname']))
{
$firstname = $_GET['firstname'];
if (!empty($firstname))
{
$add = $add.$comma."firstname = '".$firstname."'";
$comma=", ";
$save = true;
}
}
if (isset($_GET['secondname']))
{
$secondname = $_GET['secondname'];
if (!empty($secondname))
{
$add = $add.$comma."secondname = '".$secondname."'";
$comma=", ";
$save = true;
}
}
if (isset($_GET['score']))
{
$score = $_GET['score'];
if (!empty($score) or $score == "0")
{
$add = $add.$comma."score = ".$score;
$comma=", ";
$save = true;
}
}
if (isset($_GET['language']))
{
$language = $_GET['language'];
if (!empty($language) or $language == "0")
{
$add = $add.$comma."language = ".$language;
$comma=", ";
$save = true;
}
}
if (isset($_GET['time']))
{
$time = $_GET['time'];
if (!empty($time))
{
$add = $add.$comma."time = '".$time."'";
$comma=", ";
$save = true;
}
}
if (isset($_GET['firsttime']))
{
$firsttime = $_GET['firsttime'];
if (!empty($firsttime) or $firsttime == "0")
{
$add = $add.$comma."firsttime = ".$firsttime;
$comma=", ";
$save = true;
}
}

if ($save == true)
{
$usr = $DB->selectRow("SELECT * FROM tablez WHERE id = ?",$id);
?>status=ok&action=<?
if (isset($usr['id']))
{
$DB->query("UPDATE tablez SET ".$add." WHERE id = ?",$id);
echo $add."<br>";
?>Update<?
} else {
$DB->query("INSERT INTO tablez SET id = ?, ".$add,$id);
?>Insert<?
}
} else {
$usr = $DB->selectRow("SELECT * FROM tablez WHERE id = ?",$id);
if (isset($usr['id']))
{
?>score=<?=$usr['score']?>&language=<?=$usr['language']?>&time=<?=$usr['time']?>&firsttime=<?=$usr['firsttime']?><?
} else {
$DB->query("INSERT INTO tablez SET id = ?",$id);
$usr = $DB->selectRow("SELECT * FROM tablez WHERE id = ?",$id);
?>score=<?=$usr['score']?>&language=<?=$usr['language']?>&time=<?=$usr['time']?>&firsttime=<?=$usr['firsttime']?><?
}
}
?>



Где искать проблему, подскажите пожалуйста

ZicoRio
17.01.2013, 00:13
Скорее всего в самом скрипте, еще раз проследите все логические цепочки.
Протестируйте с разными параметрами и т.д.
А вот если со скриптом порядок, то возможно стоит поглядеть в сторону веб сервера.
Когда он отвечает чанками, то в ответ вставляет размер чанка в hex формате
и заканчивает нулем. Но у вас нули в начале... - вобщем информация вам к размышлению...

t4arty
17.01.2013, 13:26
я не ас пхп, но строчки:
$add = "";
$comma = "";
if (isset($_GET['firstname']))
{
$firstname = $_GET['firstname'];
if (!empty($firstname))
{
$add = $add.$comma."firstname = '".$firstname."'";
$comma=", ";
$save = true;
}

и дает в итоге три нуля, т.е 3 нулевых байта. ("")

iflamberg
17.01.2013, 16:06
2t4arty: нет, это не правда, нет там никаких нулевых байтов. Другое дело, что вся эта конструкция с $add, $comma нафик не нужна, потому что есть implode(", ",$arr); Но ошибка с нулями в начале - не в этом. Я бы начал с того, что посмотрел бы, а нет ли символов перевода строки в неправильной кодировке в начале скрипта перед <?php

mihael_p
17.01.2013, 16:44
Всем спасибо - решил. Оказалось была не правильная кодировка