Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łączenie sie z bazą
pejot
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.02.2008

Ostrzeżenie: (0%)
-----


Witam zostałem poproszony o pomoc w modyfikacji projektu, chodziło o to aby zrobić oddzielny plik z parametrami do bazy. Na postgresql sie nie znam manuale mi nie pomogły, proszę was o pomoc.

tak wygląda moj plik config.inc.php
  1. <?
  2. // Baza danych
  3. $host = '111.111.111.111';
  4. $port = '5432';
  5. $dbname = 'systemkontaktowy';
  6. $user = 'abc';
  7. $password = '123456789';
  8. ?>


A tak wygląda moj plik index.php
  1. <?php
  2. ?php
  3. //Config
  4. require('config.inc.php');
  5. $polaczenie = pg_connect("host=$host port=$port user=$user password=$password dbname=$dbname");
  6. //wyciąłem zbedne linijki
  7. function zaloguj($aAutor){
  8.        $db = $polaczenie
  9.        or die($this->blad("Blad polaczenia z baza danych " . pg_last_error($db))); <-- TO JEST 463 LINIJKA
  10.        $zapytanie =
  11.        sprintf("    SELECT a.id, a.idgrupa, \"login\", 123456789, a.aktywny, g.rodzaj "
  12.        . " FROM systemkontaktowy.autorzy a "
  13.        . " LEFT JOIN systemkontaktowy.grupy g "
  14.        . " ON g.id = a.idgrupa "
  15.        . "WHERE login = '%s' AND 123456789 = '%s' AND aktywny = true "
  16.        ,$aAutor->fLogin,$aAutor->f123456789);
  17.        $wynik = pg_query($db,$zapytanie);
  18.        if(!$wynik){
  19.            die("Blad polaczenia przy logowaniu. Prosze sprobowac pozniej");
  20. ?>


W rezultacie dostaje:
Warning: pg_last_error(): supplied argument is not a valid PostgreSQL link resource in /var/www/test/index.php on line 463
<h3 class="blad">BLAD: Blad polaczenia z baza danych </h3>
Proszę o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




nie wiem czy tu ma to znaczenie ale zobacz czy masz poprawną kolejność podawanych argumentów.
Go to the top of the page
+Quote Post
blooregard
post
Post #3


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Używasz zmiennej $polaczenie w f-cji, czyli poza jej zakresem widoczności. Musisz ją przekazać do f-cji zaloguj() jako parametr.
  1. <?php
  2. or die($this->blad("Blad polaczenia z baza danych " . pg_last_error($db))); <-- TO JEST 463 LINIJKA
  3. ?>

No i będzie błąd, bo f-cja zaloguj() nie wie, co to jest $db.
Go to the top of the page
+Quote Post
pejot
post
Post #4





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.02.2008

Ostrzeżenie: (0%)
-----


Zrobiłem tak:

$db($polaczenie)

I dostaje to:

Fatal error
: Function name must be a string in /var/www/test/index.php on line 462
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A zasięg zmiennych...?
  1. <?php
  2. $db = $polaczenie
  3. ?>
Go to the top of the page
+Quote Post
blooregard
post
Post #6


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Czytaj ze zrozumieniem.

Funkcja zaloguuj() potrzebuje argumentu $polaczenie, żeby móc go używać jako swoją zmienną.
Jak przekazujemy argumenty do funkcji?

Ano tak:
funkcja($argument1, $argument1, ... , $argument_n)

Wtedy zmienne $argument1 i kolejne mogą być używane w f-cji i tylko tam (to się nazywa zasięg zmiennej - w tym przypadku zasięg dotyczy tylko funkcji).

Łączymy nową wiedzę w całość:

Skoro w f-cji zaloguj() wykorzystujesz uchwyt do połączenia $polaczenie, f-cja musi jakoś ten uhwyt dostać. Więc przekazujemy go jako argument:
  1. <?php
  2. zaloguj($polaczenie) {
  3. ...
  4. or die($this->blad("Blad polaczenia z baza danych " . pg_last_error($polaczenie))); <-- TO JEST 463 LINIJKA
  5. }
  6. ?>

I jeśli reszta jest OK, w linijce 463 błędu nie będzie.

Teraz popatrzmy, co Ty zrobiłeś i jaki to dało efekt.

Cytat
$db($polaczenie)

I dostaje to:

Fatal error: Function name must be a string in /var/www/test/index.php on line 462




$db($polaczenie) - zadziałałoby tylko wtedy, jeśli wcześniej zmiennej $db przypisałbyś nazwę jakiejś f-cj:
  1. <?php
  2. function jakas( $tekst ) {
  3.  echo $tekst;
  4. }
  5.  
  6. $polaczenie = 'alamakota';
  7. $db = 'jakas';
  8.  
  9. $db($polaczenie); -> wyswietli 'alamakota'
  10. ?>

Ale ta konstrukcja językowa nie ma teraz nic do rzeczy w temacie.

Teraz komunikat błędu:
Fatal error: Function name must be a string in /var/www/test/index.php

Jedziemy:
Fatal error: - błąd kompilacji, powodujący nie wykonanie skryptu.
Function name must be a string - bierzemy słowniczek i tłumaczymy:
nazwa funkcji musi być tekstem...

A u Ciebie jest czym ?
$db($polaczenie)

Odpowiedź: zmienną.

Podsumowanie:
- czytamy ze zrozumieniem komunikaty błędów
- czytamy dokumentację na php.net
- uczymy się podstaw, czyli: tworzenia funkcji, przekazywania do niej parametrów i korystania z nich w funkcjach

Ten post edytował blooregard 25.06.2009, 21:28:35
Go to the top of the page
+Quote Post
pejot
post
Post #7





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.02.2008

Ostrzeżenie: (0%)
-----


Dzięki za rady. Ale problem nie rozwiazany jest do końca:( Teraz mam tak:

  1. <?php
  2. //Config
  3. require('config.inc.php');
  4. $polaczenie = "host=$host port=$port dbname=$dbname user=$user password=$password";
  5. //wyciety tekst
  6. function zaloguj($aAutor){
  7.        $db = pg_connect($polaczenie)
  8.        or die($this->blad("Blad polaczenia z baza danych " . pg_last_error($db)));
  9.        $zapytanie =
  10.        sprintf("    SELECT a.id, a.idgrupa, \"login\", 123456789, a.aktywny, g.rodzaj "
  11.        . " FROM systemkontaktowy.autorzy a "
  12.        . " LEFT JOIN systemkontaktowy.grupy g "
  13.        . " ON g.id = a.idgrupa "
  14.        . "WHERE login = '%s' AND 123456789 = '%s' AND aktywny = true "
  15.        ,$aAutor->fLogin,$aAutor->f123456789);
  16.        $wynik = pg_query($db,$zapytanie);
  17.        if(!$wynik){
  18.            die("Blad polaczenia przy logowaniu. Prosze sprobowac pozniej");
  19. ?>


I w rezultacie dostaje:

Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: FATAL: Ident authentication failed for user "www-data" in /var/www/test/index.php on line 462

Warning: pg_last_error(): supplied argument is not a valid PostgreSQL link resource in /var/www/test/index.php on line 463
<h3 class="blad">BLAD: Blad polaczenia z baza danych </h3>
Dlaczego loguje sie na user'a "www-data"?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
blooregard
post
Post #8


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
Dzięki za rady. Ale problem nie rozwiazany jest do końca:(

Dziekujesz za rady, do których sie nie stosujesz.

  1. <?php
  2. $polaczenie = "host=$host port=$port dbname=$dbname user=$user password=$password";
  3. //wyciety tekst
  4. function zaloguj($aAutor){
  5.       $db = pg_connect($polaczenie)
  6.       or die($this->blad("Blad polaczenia z baza danych " . pg_last_error($db)));
  7. ?>


nadal nie przekazujesz danych do połączenia z bazą do funkcji zaloguj(), tylko jakiegoś autora.
Powinno być tak:
  1. <?php
  2. function zaloguj($polaczenie) {
  3.   $db = pg_connect($polaczenie);
  4. ...
  5. ?>


a nie, jak u Ciebie:
  1. <?php
  2. function zaloguj($aAuthor) {
  3.   $db = pg_connect($polaczenie);  <- sk&#261;d f-cja zaloguj() ma wiedzieć, co to jest $polaczenie ?
  4. ...
  5. ?>

//EDIT $db - tu jest ok, teraz to ja juz się zamotałem

Komunikaty błędów:
Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: FATAL: Ident authentication failed for user "www-data" in /var/www/test/index.php on line 462
Nie mogę połączyć się z serwerem PostgreSQL. Autentykacja nie powiodła się (czyli coś masz zje....ne w parametrach połączenia)

Warning: pg_last_error(): supplied argument is not a valid PostgreSQL link resource in /var/www/test/index.php on line 463
<h3 class="blad">BLAD: Blad polaczenia z baza danych </h3>
Spodziewany argument nie jest prawidłowym zasobem PostgreSQL.


1. Manual.
2. Angielski.
3. Myślenie.

Ten post edytował blooregard 25.06.2009, 22:29:50
Go to the top of the page
+Quote Post
pejot
post
Post #9





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 3.02.2008

Ostrzeżenie: (0%)
-----


Ja tego projektu nie tworzyłem to jest znajomego na uczelnie ja się troszkę lepiej od niego znam i dlatego staram sie jemu pomóc.
Go to the top of the page
+Quote Post
blooregard
post
Post #10


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Poprawiłem poprzedniego swojego posta. Przekaż $polaczenie do f-cji zaloguj() i powinno być ok.
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




~blooregard, weź Ty się wyśpij:
  1. <?php
  2. $polaczenie = "host=$host port=$port dbname=$dbname user=$user password=$password";
  3. //wyciety tekst
  4. function zaloguj($aAutor){
  5.      $db = pg_connect($polaczenie)
  6. ?>

(IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Jak będzie funkcja widziała tę zmienną, to ja pochodzę z Chin.

Ja bym się nie męczył i zamiast:
  1. <?php
  2. $polaczenie = "host=$host port=$port dbname=$dbname user=$user password=$password";
  3. //wyciety tekst
  4. function zaloguj($aAutor){
  5.       $db = pg_connect($polaczenie)
  6.       or die($this->blad("Blad polaczenia z baza danych " . pg_last_error($db)));
  7. ?>

Zrobił tak:
  1. <?php
  2. $polaczenie = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
  3. //wyciety tekst
  4. function zaloguj($aAutor, $db){
  5. ?>

i wywoływał tak:
  1. <?php
  2. zaloguj('jakaszmienna', $polaczenie);
  3. ?>
Go to the top of the page
+Quote Post
cojack
post
Post #12





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Ciekawe jak Ty chcesz mieć dostęp w funkcji do zmiennej z zewnątrz...
Go to the top of the page
+Quote Post
Pawel_W
post
Post #13





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


zawsze możesz przesłać zmienną w parametrze funkcji ;o
Go to the top of the page
+Quote Post
cojack
post
Post #14





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Ale tego nie robi. Więc stąd ten błąd.
Go to the top of the page
+Quote Post
erix
post
Post #15





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jak nie robię? [;

Popatrz na drugi parametr funkcji.
Go to the top of the page
+Quote Post
cojack
post
Post #16





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Ale ja nie mówię tego erix do Ciebie ;] Ty się nie liczysz, chodzący manual ;/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 08:38