Nie mogę połączyć się z bazą danych pomimo faktu iż z pliku testowego pokazuje się komunikat iż połączenie istnieje


(sebkor96) #1

Tak jak w temacie.Utworzyłem sobie skrypt rejestracji(listing poniżej) o nazwie registration_action.php:

<?php

/*Include translating module,database settings,
functions needed to prepare data from form, 
to insert them into database and user interface header.*/

include 'modules/translator.php';
include 'includes/database.php';
include 'includes/functions.php';
include 'includes/header.php';

/*Variables including data from registration.php form.*/

$name=$_POST['name'];
$surname=$_POST['surname'];
$nickname=$_POST['nickname'];
$email=$_POST['email'];
$password=$_POST['pass'];
$rpassword=$_POST['rpass'];

/*Variable used to count errors occured during registration process.*/

$errorcounter=0;

/*Variables used to display errors that occured during registration process.*/

$errornameset='';
$errorname='';
$errornamelength='';
$errorsurnameset='';
$errorsurname='';
$errorsurnamelength='';
$errornicknameset='';
$errornickname='';
$errornicknamelength='';
$erroremailset='';
$erroremail='';
$errorpasswordset='';
$errorpassword='';
$errorpasswordlength='';
$errorpasswordcomparison='';
$registrationset1='';
$registrationset2='';
$errordbconnection='';


if(empty($name)){
	 
	 $errorcounter++;
	 $errornameset='&#8226' . $LANG['ERR_REG_NAME_SET'] . '<br>';
	 
	 }
elseif(!preg_match('/^[A-ZĄĆĘŁŃÓŚŹŻ][a-ząćęłńóśźż]{2,}$/', $name)){
	 
	 $errorcounter++;
	 $errorname='&#8226' . $LANG['ERR_REG_NAME_CHAR'] . '<br>';
	 
}
elseif(strlen($name)<3 || strlen($name)>16){
	 
	 $errorcounter++;
	 $errornamelength='&#8226' . $LANG['ERR_REG_NAME_LENGTH'] . '<br>';
	 
	 }

if(empty($surname)){
	
	 $errorcounter++;
	 $errorsurnameset='&#8226' . $LANG['ERR_REG_SURNAME_SET'] . '<br>';
	 
	 }
elseif(!preg_match('/^[A-ZĄĆĘŁŃÓŚŹŻ][a-ząćęłńóśźż]{2,}$/', $surname)){
	 
	 $errorcounter++;
	 $errorsurname='&#8226' . $LANG['ERR_REG_SURNAME_CHAR'] . '<br>';
	 
}
elseif(strlen($surname)<3 || strlen($surname)>32){

	 $errorcounter++;
	 $errorsurnamelength='&#8226' . $LANG['ERR_REG_SURNAME_LENGTH'] . '<br>';
	 
	 }

if(empty($nickname)){
	
	 $errorcounter++;
	 $errornicknameset='&#8226' . $LANG['ERR_REG_NICKNAME_SET'] . '<br>';
	 
	 }
elseif(!preg_match('/^[A-Za-z0-9]{6,}$/', $nickname)){
	 
	 $errorcounter++;
	 $errornickname='&#8226' . $LANG['ERR_REG_NICKNAME_CHAR'] . '<br>';
	 
}
elseif(strlen($nickname)<3 || strlen($nickname)>12){
	 
	 $errorcounter++;
	 $errornicknamelength='&#8226' . $LANG['ERR_REG_NICKNAME_LENGTH'] . '<br>';
	 
	 }

if(empty($email)){
	
	 $errorcounter++;
	 $erroremailset='&#8226' . $LANG['ERR_REG_EMAIL_SET'] . '<br>';
	 
	 }
elseif(!preg_match('/^[A-Za-z0-9\.\-\_]{2,}\@[A-Za-z0-9\.\-\_]+\.[a-z]{2,4}$/', $email)){
	 
	 $errorcounter++;
	 $erroremail='&#8226' . $LANG['ERR_REG_EMAIL_CHAR'] . '<br>';
	 
}

if(empty($password) || empty($rpassword)){
	
	 $errorcounter++;
	 $errorpasswordset='&#8226' . $LANG['ERR_REG_PASSWORD_SET'] . '<br>';
	 
	 }
elseif(!preg_match('/^[A-Za-z0-9\.\-_@#]{6,}$/', $password)){
	 
	 $errorcounter++;
	 $errorpassword='&#8226' . $LANG['ERR_REG_PASSWORD_CHAR'] . '<br>';
	 
}
elseif(strlen($password)<6 || strlen($password)>32){
	
	 $errorcounter++;
	 $errorpasswordlength='&#8226' . $LANG['ERR_REG_PASSWORD_LENGTH'] . '<br>';
	 
	 }
elseif($password !== $rpassword){
	 
	 $errorcounter++;
	 $errorpasswordcomparison='&#8226' . $LANG['ERR_REG_PASSWORD_COMPARISON'] . '<br>';
	 
}

if($errorcounter==1){
	 
	 echo '<div class="warning"><div class="wimg"><img src="theme/original/images/warning.png"/></div><div class="wheaderc"><span class="wheader">'. $LANG['ERR_REG_COUNT_MESSAGE'] . $errorcounter . $LANG['ERR_REG_COUNT_1'] . '</span></div><div class="wspacer"></div><div class="errors">' .
			 $errornameset . 
			 $errorname . 
			 $errornamelength . 
			 $errorsurnameset . 
			 $errorsurname . 
			 $errorsurnamelength . 
			 $errornicknameset . 
			 $errornickname . 
			 $errornicknamelength . 
			 $erroremailset . 
			 $erroremail . 
			 $errorpasswordset . 
			 $errorpassword . 
			 $errorpasswordlength . 
			 $errorpasswordcomparison . 
			 '</div><div class="aspacer"></div><a href="registration.php" class="reglink">' . $LANG['REG_FIX'] . '</a></div>';
	 
}
elseif($errorcounter>1 && $errorcounter<5){
	 
	 echo '<div class="warning"><div class="wimg"><img src="theme/original/images/warning.png"/></div><div class="wheaderc"><span class="wheader">'. $LANG['ERR_REG_COUNT_MESSAGE'] . $errorcounter . $LANG['ERR_REG_COUNT_1_5'] . '</span></div><div class="wspacer"></div><div class="errors">' .
			 $errornameset . 
			 $errorname . 
			 $errornamelength . 
			 $errorsurnameset . 
			 $errorsurname . 
			 $errorsurnamelength . 
			 $errornicknameset . 
			 $errornickname . 
			 $errornicknamelength . 
			 $erroremailset . 
			 $erroremail . 
			 $errorpasswordset . 
			 $errorpassword . 
			 $errorpasswordlength . 
			 $errorpasswordcomparison . 
			 '</div><div class="aspacer"></div><a href="registration.php" class="reglink">' . $LANG['REG_FIX'] . '</a></div>';
	 
}
elseif($errorcounter>4){
	 
	 echo '<div class="warning"><div class="wimg"><img src="theme/original/images/warning.png"/></div><div class="wheaderc"><span class="wheader">'. $LANG['ERR_REG_COUNT_MESSAGE'] . $errorcounter . $LANG['ERR_REG_COUNT_4'] . '</span></div><div class="wspacer"></div><div class="errors">' .
			 $errornameset . 
			 $errorname . 
			 $errornamelength . 
			 $errorsurnameset . 
			 $errorsurname . 
			 $errorsurnamelength . 
			 $errornicknameset . 
			 $errornickname . 
			 $errornicknamelength . 
			 $erroremailset . 
			 $erroremail . 
			 $errorpasswordset . 
			 $errorpassword . 
			 $errorpasswordlength . 
			 $errorpasswordcomparison . 
			 '</div><div class="aspacer"></div><a href="registration.php" class="reglink">' . $LANG['REG_FIX'] . '</a></div>';
	 
}
else{

	 $pname=formdata($name);
	 $psurname=formdata($surname);
	 $pnickname=formdata($nickname);
	 $pemail=formdata($email);
	 $ppassword=sha1($password);
	 $group=1;
	 $token=uniquetoken();
	 $connection=mysqli_connect(db_server,db_user,db_password,db_name);
	 $regquery= "INSERT INTO users (name, surname, nickname, e-mail, password, group, token) VALUES ('$pname', '$psurname', '$pnickname', '$pemail', '$ppassword', '$group', '$token')";

	 if(mysqli_query($connection, $regquery)){
		 
		 echo '<div class="alert"><div class="wimg"><img src="theme/original/images/alert.png"/></div><div class="aheaderc"><span class="aheader">'. $LANG['REG_COMPLETED_HEADER'] .'</span></div><div class="wspacer"></div><div class="alertm">' .
			 $registrationset1=$LANG['REG_COMPLETED_MESSAGE_1'] . $email . "." . $registrationset2=$LANG['REG_COMPLETED_MESSAGE_2'] .
			 '</div><div class="aspacer"></div><a href="index.php" class="mainlink">' . $LANG['REG_MAIN'] . '</a></div>';
			 
		 mysqli_close($connection);
		 
		 }
	 else{
		 
		 echo '<div class="warning"><div class="wimg"><img src="theme/original/images/warning.png"/></div><div class="wheaderc"><span class="wheader">'. $LANG['DB_ERR_HEADER'] . '</span></div><div class="wspacer"></div><div class="errors">' .
			 $errordbconnection = $LANG['DB_ERR_CONNECTION'] .
			 '</div><div class="dbspacer"></div><a href="registration.php" class="reglink">' . $LANG['REG_FIX'] . '</a></div>';
		 
		 }

}
	 
include 'includes/footer.php';

?>

A w pliku testowym zbudowałem prosty moduł sprawdzający czy prawidłowo próbuję łączyć się z bazą:

<?php
$link = mysqli_connect('serwer', 'uzytkownik', 'haslo', 'nazwa_bazy');
if (!$link) {
    die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully';
mysqli_close($link);
?>

W powyższym pliku mam komunikat  Connected successfully. Co jest nie tak z moim skryptem registration_action.php?Oczywiście skrypt jest wywoływany po właściwym uzupełnieniu formularza na poprzedniej stronie.Dodam że dane mało że są sprawdzane, to specjalne znaki są konwertowane w htmlspecialchars(),dodatkowo stripslashes() i trim().Do połączenia z bazą zrobiłem tymczasową własną obsługę błędu w HTML(pokazuje się ładnie wystylizowany komunikat w CSS'ie).Sprawdzałem czy przypadkiem rekrody mimo to nie są dodawane do bazy ale nic nie ma.Może przyda się jeszcze informacja, iż jak w registration_action.php parametry funkcji mysqli_connect dam w pojedyncze cudzysłowy to mam komunikat 502 Bad Gateway.Proszę o pomoc bo może coś odwaliłem głupiego tylko jestem już tak tym zmęczony że tego nie widzę.


(Wojsmol) #2

Według mnie na linii 214 zamiast

$connection=mysqli_connect(db_server,db_user,db_password,db_name);

powinno być

$connection=mysqli_connect($db_server,$db_user,$db_password,$db_name);

(sebkor96) #3

Nawet jeśli te parametry zapisałem przy użyciu define(db_server, tutaj nazwa serwera)?

 

To samo nawet ze zmianami, pokazuje mi komunikat który sam zakodowałem gdy coś jest nie tak z wpisaniem danych do bazy.


(Wojsmol) #4

zamień

define(db_server, tutaj nazwa serwera)

na

define("db_server", "tutaj nazwa serwera");

oraz zamiast stylizowanego komunikatu błędu daj tymczasowo prosty w stylu tego z pliku testowego.


(sebkor96) #5

Dziękuję za zainteresowanie moim problemem, niestety odpinając stylizowanie dzieje się to samo.Nie wiem co robić, myślałem że skończę w krótkim czasie implementować system rejestracji i zabiorę się za kolejne moduły projektu ale nie za bardzo mi to idzie jak widać.  :-( Próbowałem różnych metod, osadzałem dane bazy SQL bezpośrednio w pliku registration_action.php ale to samo, zresztą to chyba nie to bo wiele stron includuje plik z danymi za pomocą których można się łączyć z bazą, prawda?Jeżeli trzeba to udostępnię FTP abyś mógł podejrzeć co nawyrabiałem w tych plikach, co do danych bazy SQL jestem w 100% pewien bo używałem już ich wielokrotnie dla gotowych CMS’ów na hostingu cba.pl.


(Wojsmol) #6

Jaki błąd zwraca mysqli_error() po podpięciu go w mole rejestracji?


(Pablo_Wawa) #7

Aby przetestować wartości dopisz przed wierszem

$connection=mysqli_connect(db_server,db_user,db_password,db_name);

dodatkowy wyświetlający wartości przekazywanych parametrów:

echo db_server ."<br>". db_user ."<br>". db_password ."<br>". db_name ."<br>";

(sebkor96) #8

Żadnego błędu nie ma.Zrobiłem plik testowy w którym dodałem linijkę kodu tak jak radzi Pablo_Wawa i php drukuje oczekiwane dane do połączenia z bazą danych.Chyba wszystko jest ok z połączeniem.


(Wojsmol) #9

W pliku testowym dołączasz plik z danymi do bazy czy je jeszcze raz definiujesz? Próbowałeś w module zamiast Twojej obsługi błędów dać mysqli_error()?


(sebkor96) #10

Dokładnie tak, w pliku testowym dołączam plik konfiguracyjny bazy danych, kod wygląda teraz tak:

<?php

include 'includes/database.php';

$link = mysqli_connect(db_server, db_user, db_password, db_name);
if (!$link) {
    die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully';
echo db_server . " " . db_user . " " . db_password . " " . db_name;
mysqli_close($link);
?>

Drukuje mi pozytywny wynik a także takie dane, jakie ma używać każdy skrypt na mojej stronie do którego dołączę plik konfiguracyjny includes/database.php.


(Pablo_Wawa) #11

Że skrypty testowe działają, to wiemy. Ale sprawdź w tym głównym skrypcie registration_action.php, jak to jest naprawdę, bo wygląda na to, że jednak jest tam coś nie tak, skoro skrypt zgłasza błąd. Dopisz stosowny tekst w kodzie tego skryptu, żeby być w 100% pewnym, że błąd następuje dokładnie w tym danym wierszu (linia 214 z pierwszego listingu), a wywołanie połączenia do bazy zawiera (w tych zdefiniowanych stałych) poprawne wartości. Literówka (jak jakaś jest), często jest trudna do wyłapania przy przeglądaniu kodu.


(sebkor96) #12

Przepraszam za zabrany czas.Błąd popełniłem w pliku registration_action.php.Otóż w tablicy POST znajdowały się zmienne o takich samych nazwach jak nadałem im na nowo w owym pliku.Przeciążyłem nazwy zmiennych i nie było danych wejściowych i dlatego cały czas skrypt pokazywał mi błąd.Dziękuję za poświęcony czas i pozdrawiam.Każdy dostaje +. :slight_smile: