一个非常简单的插入功能,但是。它给出了一些令人讨厌的错误......
喜欢:
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
答案 0 :(得分:5)
根据我们在你的问题评论中的讨论,尝试改变一下,以便在btw.php中需要inc.php; index.php中需要btw.php而不是inc.php; inc.php中不需要'btw.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 :(得分:1)
您似乎没有使用DBConnection类进行查询。当然,在该类中进行连接。通过直接调用mysql_query(),PHP在使用localhost,Web服务器帐户并且在尝试查询时没有密码。所以你需要做一些像
这样的事情if($_DB->insert($insert) > 0)
{
...
答案 2 :(得分:-2)
只需确保sql查询正确 当与此操作相关的文件中的mixup mixup mysql和mysql query混合时,可能会发生此错误,或者可能是为mysqliquery提供的参数的错误