класс - Твитнуть - 0 - to_do


Этот класс отправляет "твит" данные клиенту в виде специального языка разметки. Как его можно улучшить?

Он используется в AJAX-вызов и в предыдущем посте предлагали не повторить результат..но это мое основное средство общения с сервером через responseText "Аякс".

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

поле 1 | поле 2 | поле 3 | 4 поле || поле 1 | поле 2 | поле 3 | поле 4 ||

Это называется так -

new tweet();

Клиент знает, как превратить это в XHTML, как только он ее получает.

/*tweet*/

class tweet extends post
  {
  function __construct()
    {
    parent::__construct();
    $email=$_SESSION['email'];
    $flname=$_SESSION['name'];
    $message=$this->_protected_arr['f4b'];
    $time=time();
    database::query("INSERT INTO tw VALUES ('$time','$flname','$message','$email')");        
    $query_return = database::query("SELECT * FROM tw ORDER BY time DESC LIMIT 7");
    $b=0;
    $c='<tw_p>';
    while($a=mysqli_fetch_assoc($query_return))
      {  
      if($b==0)
        {
        $c = $c . $a['email'] . "|" .  $a['fname'] . "|" . $a['time'] . "|" . $time . "|" . $a['message'];
        }
      else
        {
        $c = $c . "||" . $a['email'] . "|" .  $a['fname'] . "|" . $a['time'] . "|" . $time . "|" . $a['message'];
        }
      $b++;
      }
    echo $c;
    }
  }


237
1
задан 2 октября 2011 в 11:10 Источник Поделиться
Комментарии
2 ответа

Я согласен с ответом @Павел. Некоторые дополнения ниже.


  1. Возможные SQL-инъекции:

    $email=$_SESSION['email'];
    $flname=$_SESSION['name'];
    $message=$this->_protected_arr['f4b'];
    $time=time();
    database::query("INSERT INTO tw VALUES ('$time','$flname','$message','$email')");

    Если ваше имя и адрес электронной почты сессии переменные проходят проверку, прежде чем положить их в сессии, и они не содержат каких-либо опасных персонажей-это нормально. Если они могли бы содержать, вы должны избежать их. (Изображение имя с '. Он бы сломал запрос.) В любом случае, побег-это хорошая практика, это почти ничего не стоит и делает код более надежным и безопасным. Я бы избежать этого.


  2. Я бы переписать цикл while, если вы останетесь с исходным кодом вместо JSON:

    $first = true;
    while($row = mysqli_fetch_assoc($query_return)) {
    if (!$first) {
    $c .= "||";
    }
    $tw = $row['email'] . "|";
    $tw .= $row['fname'] . "|";
    $tw .= $row['time'] . "|";
    $tw .= $time . "|";
    $tw .= tw_escape($row['message']);
    $c .= $tw;
    first = false;
    }

    В $ТВТ переменной удаляет ненужное дублирование кода. Изменение в логическое ($первый) делает легче читать.


  3. Вы должны бежать по крайней мере сообщение (это tw_escape функции) в случае, если сообщение содержит |. Считают, спасаясь от $строки['имени'] тоже. Не забудьте раскодировал на стороне клиента. Может быть, JSON и делает это из-коробки.

2
ответ дан 11 ноября 2011 в 09:11 Источник Поделиться

Так, это PHP, который приводит к Ваш 'БОД' обработка здесь.

Я думаю, что люди, должно быть, спутал тебя, сказав, что не Эхо. Вы правы, вам придется общаться на что-то распечатать. Лучший способ общения с JavaScript является использование JSON. JSON означает нотация объектов JavaScript.

Вы должны также проверить для успеха или неудачи из запроса к базе данных. Ниже это непроверенного кода (я не понимаю, что базы данных::запрос возвращает, так что мои ошибки не могут быть уместным):

$query_return = database::query("SELECT * FROM tw ORDER BY time DESC LIMIT 7");

if ($query_return === false)
{
echo json_encode(array('Success' => false));
return;
}

$results = array('Data' => array(),
'Success' => true);

while($row = mysqli_fetch_assoc($query_return))
{
$results['Data'][] = $row;
}

echo json_encode($results);

Так что теперь вы получите массив строк из базы данных, что код JavaScript может справиться с красиво. Это будет действительный объект JavaScript, так что вы можете проверить его с:

if (response.Success)
{
// Do stuff with response.Data here. Probably a loop over the results.
}

2
ответ дан 11 ноября 2011 в 03:11 Источник Поделиться