Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Dlaczego nie trzyma połączenia MySQL
Forum PHP.pl > Forum > Przedszkole
ttdd
Piszę instalator do swojego skryptu i mam problem z utrzymaniem połączenia z bazą danych MySQL. W instalatorze są trzy etapy instalacji, krok 1 to formularz z polami: host, username, password, database, do nawiązania połączenie z MySQL.

Po wpisaniu poprawnych danych skrypt łączy się z bazą danych i wyświetla komunikat o powodzeniu lub niepowodzeniu. Tak wygląda skrypt ten skrypt:

  1. <?php } elseif ($_GET['step'] == 2) { ?>
  2. html
  3. <?php
  4. if (@mysql_connect($_POST['mysql_host'], $_POST['mysql_username'], $_POST['mysql_password'])) {
  5. echo '<font color="green">.:: Poprawnie nawiązano połączenie z bazą danych MySQL ::.</font><br />';
  6. if (@mysql_select_db($_POST['mysql_database'])) {
  7. echo '<font color="green">.:: Poprawnie wybrano bazę MySQL ::.</font><br />';
  8. }
  9.  
  10. else {
  11. echo '<font color="red">Nie mogę wybrać bazy!</font><br />';
  12. die;
  13. }
  14.  
  15. create_tables();
  16.  
  17. }
  18. else {
  19. echo '<font color="red">Brak połączenia z bazą danych!</font><br />';
  20. die;
  21. }
  22.  
  23. echo '<br />';
  24. ?>

I tu jest wszystko dobrze, po poprawnym wprowadzeniu danych, skrypt łączy się z bazą danych MySQL i tworzy tabele.

Krok 2 to formularz z głównymi ustawieniami skryptu (pola: login administratora, hasło, e-mail, itd). Kod wygląda tak:
  1. <?php } elseif($_GET['step'] == 3) { ?>
  2.  
  3. <?php
  4. if (mysql_query("INSERT INTO `settings` (`setting_name`, `value`) VALUES
  5. ('default_language', 'pl'),
  6. ('admin_email', '".$_POST['contact_email']."')")) {
  7. echo '<font color="green">.:: Poprawnie dodano rekordy do tabeli `settings` ::.</font><br />';
  8. }
  9. else {
  10. echo '<font color="red">.:: Błąd podczas dodawaniu rekordów do tabeli `settings` ::.</font><br />';
  11. die;
  12. }
  13. ?>

I tu jest problem, ponieważ nie dodaje mi tych danych do tabeli `settings`. Wyrzuca takie błędy:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost'
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established

Wiem co te błędy oznaczają, ale nie rozumiem dlaczego występują, skoro połączenie powinno być nawiązane...

Z góry dzięki za pomoc.
krzywy36
albo zapisujesz gdzieś dane do logowania i w każdym formularzu się na nowo łączysz, albo w jakiś sposób przekazujesz "uchwyt" połączenia ($uchwyt = mysql_connect...), chociaż głowy nie dam, że drugi sposób zadziała smile.gif

Edit: no tak, nie zauważyłem, że to ten sam plik... tak jak piszą niżej, przenieś połączenie z bazą przed ifa i będzie działać.
d3ut3r
z twojego kodu wynika, że z bazą łączysz się tylko gdy $_GET['step']==2 więc jeżeli jest równe 3 to już nie wykonujesz mysql_connect, wywal mysql_connect przed blok warunkowy.

Poza tym nie tłum błędów za pomocą @ a najlepiej przenieś to z użyciem PDO które teraz powinno być już standardem w skryptach smile.gif, poczytaj też o mysql injection.
phpion
Połączenie nawiązujesz tylko gdy $_GET['step'] == 2. Dla 3 już go nie ma, więc wywala Ci błąd. Albo połącz się w 3 jeszcze raz, albo przenieś połączenie z bazą przed całego if'a.
ttdd
Dzięki za pomoc.

Cytat(d3ut3r @ 25.06.2012, 11:38:54 ) *
Poza tym nie tłum błędów za pomocą @ a najlepiej przenieś to z użyciem PDO które teraz powinno być już standardem w skryptach smile.gif, poczytaj też o mysql injection.


To jest tylko instalator więc nie ma sensu używać tutaj PDO żeby wykonać 2 proste zapytania. Co do sql injection to wiem, ale po co mam tutaj robić zabezpieczenia skoro to tylko instalator? przecież to jest tylko i wyłącznie dla moich potrzeb, więc bez sensu jest to robić, bo sam sobie raczej nie będę zagrażał biggrin.gif
Mephistofeles
Czemu nie ma sensu? PDO jest tylko do większych projektów? Jak będziesz chciał wywiercić kilka dziur w desce to będziesz wolał ręczną wiertarkę, bo nie ma sensu podłączać elektrycznej?
O SQL injection nie ma co się martwić, ale wypada pisać kod zgodny ze standardami, a takim niepisanym standardem jest używanie PDO.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.