Un lien vers le serveur n'a pas pu être établie
Très simple d'insérer une fonction, et encore. Il donne quelques vilaines fautes...
Comme:
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
Et c'est le 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>";
}
}
?>
Et ne vous inquiétez pas à propos de la base de données MySQL-injection. L'ajout que nous parlons.
Toute pensée sur l'erreur?
Et oui, je suis sûr que les données pour la connexion à la base de données sont correctes.
Mise à JOUR de 1
C'est mon inc.php
-fichier inclus sur le dessus de la index.php fichier.
<?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);
?>
Mise à JOUR 2
C'est mon dbconnections.php
-fichier
<?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);
}
}
?>
Mise à JOUR 3
L'erreur que j'obtiens lorsque le remplacement de la amincit proposé ci-dessous
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
- Avez-vous correctement initialiser une connexion mysql à l'aide de
mysql_connect
(php.net/manual/en/function.mysql-connect.php) le passage d'un mot de passe? L'erreur semble indiquer aucun mot de passe n'a été adoptée ou une connexion n'a pas été trouvé à utiliser pour la requête. Si vous avez une connexion identifiant de lien, les faire passer comme deuxième paramètre demysql_query
- - Je inclure un
inc.php
fichier où la connexion est faite, si c'est ce que tu veux dire? - Avez-vous un
include 'inc.php'
dans le fichier de l'extrait ci-dessus est à partir de? Toute chance vous pouvez coller leinc.php
code tout en veillant à dissimuler tous les mots de passe ou d'autres informations de chemin d'accès? - L'erreur vient inc.php si c'est là que la connexion est établie. pas dans ce bout de code. Et c'est soit vous r'db connexion est incorrecte, ou de l'insuffisance des privilèges de connexion à la db.
- J'ai pensé au premier abord, mais l'erreur extrait dit un serveur n'a pas pu être établi pour la
mysql_query
appel dans son code. - Ok, merci pour l'aide! J'ai inclus mon
inc.php
fichier dans le code d'origine... C'est étrange, la cause presque le même code a très bien fonctionné sur un autre site. C'est peut-être mon hébergeur? - Votre
DBConnection
ne fournit pas de mot de passe pour le serveur MySQL, il répond avecAccess denied for user
bla bla(using password: **NO**)
- Mais il ne
define('MYSQL_PASSW', '***');
pas? - Il pourrait être quelque chose à voir avec le " dbconnections la classe que vous utilisez, et je ne suis pas sûr de savoir comment cette classe fonctionne (peut-être n'importe quoi, vraiment, je suis en supposant que vous avez défini vous-même?).
- Oui, je le fais. Si vous le souhaitez, je peux le poster aussi...
- Oui, ça aiderait. Je ne suis pas sûr de savoir comment la classe définit la connexion, puis vous peut-être référence comme
$_DB->connection
ou quelque chose commemysql_query($insert, $DB->connection)
. - et votre classe DBConnection fait quoi? la racine est l'endroit où vous faites mysql_connect(host,user,pass)
- J'ai ajouté le
dbconnection.php
fichier. A-t-elle être à la racine (c'est pas...) - Donc, il semble que plutôt que de
mysql_query($insert)
, vous devez utiliser$_DB->insert($insert)
. Donner un coup de feu et voir si cela fonctionne. (EDIT: je faisait référence à la " index.php code, btw. réalisé qu'il peut porter à confusion) - Ok, fait sens. Mais pour quelque raison il y a un nouveau message d'erreur
Fatal error: Call to a member function insert() on a non-object in
étrange. Il ressemble à lainc.php
fichier n'est pas inclus, après tout. Ou je me suis trompé? (EDIT: sur laindex.php
absence d'une telle requête... Tu veux les remplacerif (!mysql_query($insert))
avecif (!$_DB->insert($insert))
droit? - Pouvez-vous vérifier le
inc.php
fichier est inclus dans leindex.php
fichier (vous dites que vous n'êtes pas sûr si elle est?). Et c'est le remplacement que je voulais dire. - Ok, juste testé. Le
inc.php
fichier est inclus dans leindex.php
fichier. Pas de doute à ce sujet. Mais il semble que la connexion à ladbconnections.php
est un échec... (bien que, il est inclus dans deindex.php
-fichier ainsi, pour sûr.) - viens de remarquer quelque chose...et tu vas me haïr :)...mais pouvez-vous poster le 'btw.php" classe ainsi? L'erreur d'origine des références de fichiers trop. Êtes-vous toujours obtenir l ' "erreur Fatale: Appel à un membre de la fonction insert() sur un non-objet dans l'erreur" (et, si oui, pouvez-vous s'il vous plaît poster le message d'erreur aussi)?
- Ok, je n'ai pas l'esprit de la publication, tant que vous n'avez pas l'esprit à la lecture de mon code de merde 🙂 Mais le
btw.php
fichier que vous visez, est déjà posté. C'est la première. - aha! Ok, donc ne nécessitent pas de 'db.inc' dans 'btw.php'. Et, en db.inc, essayez de mettre
require_once 'classes/btw.php';
après le $_DB=.... dansdb.inc
au lieu d'avant. - Eum, pas sûr de ce que vous voulez dire avec votre premier sentense... Et dans
inc.php
estbtw
indiqué dernier et dansdbconnections.php
il n'y a rien compris... (EDIT: nevermind, vous avez votre idée. Permettez-moi de voir) - Encore la
Undefined variale....
trucs - Je pense que le problème est que dans la db.inc, les btw.php le fichier est inclus avant le $_DB variable est même créé, donc les références btw.php pour $_DB retour de l'erreur que vous avez posté en réponse à @steve (ce commentaire est juste une sorte de résumé de ce que les étapes que j'ai écrit essayaient de résoudre)
- désolé de continuer à tirer sur vous dans des directions différentes, mais je suis de vous aider en passant par les choses de la façon dont je le ferais si c'était mon code. Cela dit, essayez de changer les choses afin que
db.inc
est nécessaire dansbtw.php
;btw.php
est nécessaire dansindex.php
plutôt quedb.inc
; et "btw.php" n'est pas nécessaire dansdb.inc
. À la lecture de php.net/manual/en/function.include.php, je pense que cela pourrait avoir à faire avec la portée - Je pense que vous avez raison,
$_DB = new DBConnection ...
doit être déplacé au-dessus de la tva.inc à la ligne. - D'accord. Si votre btw fichier est le tout premier jeu de code sur ce post, alors vous devriez créer votre connexion db avant, y compris btw depuis btw veut utiliser la requête.
- votre dernier commentaire a été ma réponse! Hoera 🙂 le problème a été en effet avec la db.inc! Merci!! (Si vous répondez à la question, je ne peux accepter l'est)
- bon à entendre! Est-il sensé pourquoi la solution a fonctionné?
Vous devez vous connecter pour publier un commentaire.
Que notre discussion dans les commentaires sur votre question, essayez de changer les choses afin que inc.php est nécessaire dans btw.php; btw.php est nécessaire dans index.php plutôt que de inc.php; et "btw.php" n'est pas nécessaire dans inc.php. À partir de la lecture php.net/manual/en/function.include.php je pense que cela pourrait avoir à faire avec la portée.
EDIT:
Tout d'abord, la configuration que vous avez crée une base de données personnalisée de la classe d'objet (
DBConnection
) qui est utilisé pour l'interface avec la base de données et exécuter des requêtes. Lorsque vous avez utilisémysql_query
par elle-même, elle n'a pas une base de données identifiant de connexion à partir de laquelle l'exécution de la requête, depuis le DBConnection objet de résumés, les fonctionnalités dans les méthodes de l'objet. C'est pourquoi vous avez besoin d'utiliserif (!$_DB->insert($insert))
.Deuxièmement, et je ne suis pas 100% sur, mais en gros cœur du problème semble avoir à faire avec le code de la
btw.php
pas "voir" la base de données de code de configuration. Ce pourrait être parce que de deux choses. Tout d'abord, le$_DB
variable a été définie après labtw.php
code a été nécessaire, et comme un résultat, quand l'interprète PHP analysébtw.php
,$_DB
n'avait pas encore été défini. L'ordre l'exige et la base de données définition de l'objet de la matière. Deuxièmement, et c'est là que je suis un peu largué, mais je pense qu'il y est une variable de portée/problème d'accès lorsque vous avez besoin d'btw.php
de l'intérieurinc.php
(où$_DB
est défini) plutôt que d'exiger l'installation de base de données dansbtw.php
. En d'autres termes, vous avez eu le code qui utilise l'objet de base de données requis dans le script, qui la définit, plutôt que de la base de données de script d'installation (y compris la base de données de l'objet de la déclaration) requis dans le code qui l'utilise.J'espère qu'un sens, s'il vous plaît laissez-moi savoir si il est encore confuse. J'ai tendance à avoir un problème d'expliquer les choses de façon concise.
Il ne semble pas que vous êtes en utilisant votre DBConnection la classe pour faire la requête. Bien sûr, c'est dans cette classe que la connexion est établie. En appelant le mysql_query() directement, PHP utilise localhost, le serveur web de compte et pas de mot de passe lors de la tentative de la requête. Si vous avez besoin de faire quelque chose comme
if (!mysql_query($insert)) {
dans ton premier code ciselée avec ce que j'ai posté.Notice: Undefined variable: _DB in /customers/***.be/***.be/httpd.www/belastingen/classes/btw.php on line 13 Fatal error: Call to a member function insert() on a non-object in /customers/***.be/***.be/httpd.www/belastingen/classes/btw.php on line 13
$_DB
et pas_DB
. L'erreur suggère que vous êtes absent le signe de dollar, qui est nécessaire pour toutes les variables en PHP.