A very simple insert function, and yet. It gives some nasty errors...
Like:
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
And this is the code:
<?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>";
}
}
?>
And don't worry about the MySQL-injection. Adding as we speak. Any thought about the error? And yes I'm sure the data for connection to the database are correct.
UPDATE 1
This is my inc.php
-file, included on top of the index.php file.
<?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);
?>
UPDATE 2
This is my dbconnections.php
-file
<?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);
}
}
?>
UPDATE 3
The error I get when replacing the thins suggested below
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
As per our discussion in the comments on your question, try changing things up so that inc.php is required in btw.php; btw.php is required in index.php rather than inc.php; and 'btw.php` is not required in inc.php. From reading php.net/manual/en/function.include.php, I think this might have to do with scope.
EDIT:
First off, the setup you have creates a custom database object class (DBConnection
) which is used to interface with the database and execute queries. When you used mysql_query
by itself, it did not have a database connection identifier from which to execute the query, since the DBConnection object abstracts that functionality in object methods. That is why you needed to use if (!$_DB->insert($insert))
.
Secondly, and I'm not 100% on this, but essentially core the problem seems to have to do with the code in btw.php
not "seeing" the database setup code. This could have been because of two things. First, the $_DB
variable was defined after the btw.php
code was required, and as a result, when the PHP interpreter parsed btw.php
, $_DB
had not yet been defined. The order if the requires and the database object definition matter. Secondly, and this is where I am a bit unsure, but I think there is a variable scope/access issue when requiring btw.php
from within inc.php
(where $_DB
is defined) rather than requiring the database setup within btw.php
. In other words, you had the code that uses the database object required in the script that defines it, rather than the database setup script (including the database object declaration) required within the code that uses it.
I hope that makes sense, please let me know if it is still confusing. I tend to have a problem explaining things concisely.
It doesn't seem that you are using your DBConnection class to make the query. Of course, it's in that class that the connection is made. By calling mysql_query() directly, PHP is using localhost, the web server account and no password when attempting the query. So you need to do something like
if($_DB->insert($insert) > 0)
{
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With