2015-07-29 3 views
-2

На странице http://www.immocorbati.be/tehuur.php функции фильтра не работают должным образом. Только «Prijsklasse» (цена) работает. Однако, если вы фильтруете на «Gemeente» (область) Boom, например, он должен вернуть 1 домой, но он говорит, что ни один не найден. То же самое с студией «Тип» должно возвращать 3, но ничего не возвращает, а «Slaapkamer» (спальни). 3 slaapkamers должны возвращать 1 домой, но опять же ничего не показывают.mysql_real_escape_string работает отлично в локальном хосте, не работает онлайн

Что я не понимаю, так это то, что он отлично работает на localhost, и он работает наполовину и наполовину онлайн, потому что это означает, что функция достигнута. Вот файлы. Может быть, у кого-то есть некоторые указатели, почему это происходит? Возможно ли, что это связано с базой данных? Но все остальные функции в бэкэнд и т. Д. Работают так, как должны.

class Pand 
{ 

    //DB settings - Don't worry these are correct 
    private $m_sHost = "??????"; 
    private $m_sUser = "????????"; 
    private $m_sPassword = "??????"; 
    private $m_sDatabase = "????????";  

    public function GetToonPandenHuurFilter() 
    { 
    //de panden worden op pagina getoond volgens filter 
      if ($link = mysqli_connect($this->m_sHost, $this->m_sUser, $this->m_sPassword, $this->m_sDatabase)) 
      { 

        $b = $_POST['typewoning']; 
        $p = $_POST['plaats']; 
        $s = $_POST['slaapkamers']; 
        $k = $_POST['prijsklasse']; 


        $sSql = "select * from tblpand WHERE PandVerkoopstype='Te huur' AND PandOnline='Ja'"; 
        if ($b !== 'all') { 
          $sSql .= " AND PandBebouwing='" . mysql_real_escape_string($b) . "'"; 
        }      
        if ($p !== 'all') { 
          $sSql .= " AND PandPostcodeGemeente='" . mysql_real_escape_string($p) . "'"; 
        } 
        if ($s !== 'all') { 
          $sSql .= "AND PandSlaapkamers='" . mysql_real_escape_string($s) . "'"; 
        } 
        if ($k == '0') { 
          $sSql .= ""; 
        } 
        if ($k == '1') { 
          $sSql .= "AND PandPrijs <'" . 301 . "'"; 
        } 
        if ($k == '2') { 
          $sSql .= "AND PandPrijs <'" . 501 . "'"; 
        } 
        if ($k == '3') { 
          $sSql .= "AND PandPrijs <'" . 701 . "'"; 
        } 
        if ($k == '4') { 
          $sSql .= "AND PandPrijs <'" . 701 . "'"; 
        } 


        $rResult = mysqli_query($link, $sSql); 
        return $rResult; 
      } 
      else 
      { 
        // er kon geen connectie gelegd worden met de databank 
        throw new Exception('Ooh my, something terrible happened to the database connection'); 
      }  
      mysqli_close($link); 
    } 
} 

Я добавил сообщений об ошибках и говорит обратная связь:

mysql_real_escape_string(): Access denied for user ''@'10.246.64.177' 
(using password: NO) in /customers/e/a/b/immocorbati.be/httpd.www/classes/Pand.class.php on line 1086 

Линия 1086 является:

$sSql .= " AND PandBebouwing='" . mysql_real_escape_string($b) . "'"; 
+1

Прошу сделать еще несколько отладочных операций. Вставляйте отладочные операторы, переменные 'var_dump', узкие, где именно он начинает терпеть неудачу. У нас нет лучшей позиции, чтобы сделать это, чем вы. – deceze

+0

При тестировании кода вам необходимо убедиться, что у вас включен display_errors. Если на сервере что-то не удается, PHP, скорее всего, сможет его детализировать. В верхней части вашего скрипта 'error_reporting (E_ALL); ini_set ('display_errors', 1); 'затем отключите это позже при развертывании в живой среде. –

+0

Хорошо, я начну с этого. –

ответ

2

mysql_real_escape_string требует соединения с базой данных, чтобы сделать свою работу. mysql_real_escape_string принадлежит к API mysql. Вы устанавливаете соединение с помощью mysqli. mysql и mysqli - это два совершенно разных API баз данных; соединение mysqli бесполезно для mysql_ *. У mysql есть плохая привычка неявно (пытаться) установить соединение при необходимости. На вашем локальном хосте работает неявное соединение, которое пытается установить (имя пользователя по умолчанию, пароль и т. Д.). На вашем хосте это не так.

Не используйте mysql_real_escape_string при использовании mysqli. Используйте mysqli's parameter binding API или, по крайней мере, mysqli_real_escape_string.

+0

Это ответ. Я счастлив, что тоже понял это. Глупо, но также крайне нелогично, что сочетание mysql и mysqli работает в localhost. Теперь я реализую API привязки. Спасибо. –

+0

Правда, это одна из причин, по которой mysql устарел и не должен быть затронут, даже с десятифутовым полюсом. – deceze

+0

Я узнал свой урок;) –

Смежные вопросы