Не удалось установить ссылку на сервер - PullRequest
6 голосов
/ 11 мая 2011

Очень простая функция вставки, и все же. Это дает некоторые неприятные ошибки ...

Как:

Warning: mysql_query(): Access denied for user '***.'@'***.one.com' (using password: NO) in /customers/***.be/***.be/httpd.www/belastingen/classes/btw.php on line 24 Warning: mysql_query(): A link to the server could not be established in /customers/***.be/***.be/httpd.www/belastingen/classes/btw.php on line 24

А это код:

<?php

    if(isset($_POST['submit'])){

    $naam = $_POST['name'];
    $email = $_POST['email'];
    $kind1 = $_POST['kind1'];
    $kind2 = $_POST['kind2'];
    $kind3 = $_POST['kind3'];
    $kind4 = $_POST['kind4'];
    $kind5 = $_POST['kind5'];
    $captcha = $_POST['captcha'];

        if ($captcha == 2){
            if (!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['kind1'])) {
                    $insert = "INSERT INTO belastingen (ouder, email, kind1, kind2, kind3, kind4, kind5) VALUES (
                            '".$naam."',
                            '".$email."',
                            '".$kind1."',
                            '".$kind2."',
                            '".$kind3."',
                            '".$kind4."',
                            '".$kind5."')";
                if (!mysql_query($insert)) {
                    echo "<div class=\"feedback\">query invoeren faalt</div>";
                } else { 
                    echo "<div class=\"feedback\">Uw registratie werd goed geregistreerd</div>";
                }


                }    else {
                echo "<div class=\"feedback\">falen, niveau 2</div>";
            }
        } else {
            echo "<div class=\"feedback\">captcha probleem</div>";
        }
    }   
?>

И не беспокойтесь о MySQL-инъекции. Добавление, как мы говорим. Есть мысли об ошибке? И да, я уверен, что данные для подключения к базе данных верны.

ОБНОВЛЕНИЕ 1 Это мой inc.php -файл, включенный в начало файла index.php.

<?php
  define('MYSQL_HOST',  '***.be.mysql');
  define('MYSQL_DB',    '***');
  define('MYSQL_USER',  '***');
  define('MYSQL_PASSW', '***');

  require_once 'classes/dbconnections.php';
  require_once 'classes/btw.php';
  $_DB = new DBConnection(MYSQL_HOST, MYSQL_DB, MYSQL_USER, MYSQL_PASSW);
?>

ОБНОВЛЕНИЕ 2 Это мой dbconnections.php -файл

<?php

class DBConnection {

  public  $host;
  public  $db;
  public  $user;
  public  $password;

  private $_connection;

  public function __construct($host = null, $db = null, $user = null, $password = null) {
    $this->host     = $host;
    $this->db       = $db;
    $this->user     = $user;
    $this->password = $password;
    $this->connect();
  }

  private function connect(){
    $this->_connection = mysql_connect($this->host, $this->user, $this->password);
    if(!$this->_connection) {
      die("An error occured---- while connecting to the database: ".mysql_errno()." - ".mysql_error());
    } else{
      $selected = mysql_select_db($this->db, $this->_connection);
      if(!$selected) {
        die("An error occured while connecting to the database: ".mysql_errno()." - ".mysql_error());
      }
    } 
  }

  public function listing($sql) {
    $result = mysql_query($sql, $this->_connection);
    while($row=mysql_fetch_array($result)) {
      $return[] = $row;
    }
    return $return;
  }

  public function select($sql) {
    $result = mysql_query($sql, $this->_connection);
    return mysql_fetch_array($result);
  }

  public function insert($sql) {
    mysql_query($sql, $this->_connection);
    return mysql_affected_rows($this->_connection);
  }

  public function delete($sql) {
    mysql_query($sql, $this->_connection);
    return mysql_affected_rows($this->_connection);
  }

  public function escape($value) {
    return mysql_real_escape_string($value);
  }

}

?>

ОБНОВЛЕНИЕ 3
Ошибка, которую я получаю при замене тонких, предложенных ниже

Notice: Undefined variable: _DB in /customers/***/***/httpd.www/belastingen/classes/btw.php on line 13 Fatal error: Call to a member function insert() on a non-object in /customers/***/***/httpd.www/belastingen/classes/btw.php on line 13

Ответы [ 2 ]

5 голосов
/ 11 мая 2011

В соответствии с нашим обсуждением в комментариях к вашему вопросу, попробуйте изменить положение так, чтобы в btw.php был необходим файл inc.php;btw.php требуется в index.php, а не в inc.php;и 'btw.php` не требуется в inc.php.Из прочтения php.net/manual/en/function.include.php я думаю, что это может быть связано с областью действия.

РЕДАКТИРОВАТЬ:

Во-первых, ваша настройка создает пользовательскиекласс объекта базы данных (DBConnection), который используется для взаимодействия с базой данных и выполнения запросов.Когда вы сами использовали mysql_query, у него не было идентификатора соединения с базой данных, из которого выполнялся запрос, поскольку объект DBConnection абстрагирует эту функциональность в объектных методах.Вот почему вам нужно было использовать if (!$_DB->insert($insert)).

Во-вторых, и я не на 100% в этом, но, по сути, основная проблема заключается в том, что код в btw.php не «видит»код настройки базы данных.Это могло быть из-за двух вещей.Во-первых, переменная $_DB была определена после того, как потребовался код btw.php, и в результате, когда интерпретатор PHP проанализировал btw.php, $_DB еще не был определен.Порядок, если требуется и определение объекта базы данных имеют значение.Во-вторых, это то, где я немного не уверен, но я думаю, что существует проблема с переменной областью действия / доступом, когда требуется btw.php из inc.php (где определено $_DB), а не требует настройки базы данных в btw.php.Другими словами, у вас был код, который использует объект базы данных, требуемый в сценарии, который его определяет, а не сценарий установки базы данных (включая объявление объекта базы данных), требуемый в коде, который его использует.

Я надеюсь,это имеет смысл, пожалуйста, дайте мне знать, если это все еще сбивает с толку.У меня есть проблема с кратким объяснением вещей.

1 голос
/ 11 мая 2011

Не похоже, что вы используете класс DBConnection для выполнения запроса.Конечно, именно в этом классе соединение установлено.При непосредственном вызове mysql_query () PHP использует localhost, учетную запись веб-сервера и пароль при попытке запроса.Так что вам нужно сделать что-то вроде

if($_DB->insert($insert) > 0)
{
     ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...