Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Problem z sesją i zapytaniem sql
Forum PHP.pl > Forum > Przedszkole
wojciechu
Hej,

Żeby nie mieszać w poprzednim moim temacie zadam 2 pytania tutaj:

#1
Chciałbym wysłać do bazy sql nazwę zalogowanego użytkownika, którego nazwa jest w sesji. Jeżeli wywołuję jego nazwę następującym kodem, to jest ok:
  1. echo '<h1>Hello, '.$_SESSION['usr'].'! Jesteś zalogowany!</h1>';


ale jak chcę przesłać do SQL to już mam problem - co robię nie tak? Zdefiniowanie zmiennej jest niewłaściwe?:
  1. $uzytkownik = $_SESSION['usr'];
  2.  
  3. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  4. or die('Brak połączenia z serwerem MySQL');
  5. $db = @mysql_select_db('xxx', $connection)
  6. or die('Nie mogę połączyć się z bazą danych');
  7.  
  8. // dodajemy rekord do bazy
  9. $ins = @mysql_query("INSERT INTO tabela VALUES (NULL, '$uzytkownik')");
  10.  
  11. if($ins) echo "Rekord został dodany poprawnie";
  12. else echo "Błąd nie udało się dodać nowego rekordu. Zaloguj się ponownie lub skontaktuj z administratorem!";
  13.  
  14. mysql_close($connection);


#2
Mając tabelę SQL:
  1. id || uzytkownik || dokument || numer


jak zadać następujące zapytanie w php:
-mając zmienną dokument znaleźć największy (ostatni) numer id dla dokumentu
-ze znalezionego rekordu odczytać numer (numer ma budowę mieszaną, czyli XX-0001, XY-0003, XYZ-0003, zawsze 4 cyfry na końcu)
-pobrać cały numer i wydzielić w nim ostatnie 4 znaki/cyfry
-dodać do nich 1
-dołączyć resztę numeru
-przesłać do bazy nowy numer/zmienną

Czyli taki przykład:
jeżeli ostatnim numerem było XYZ-0003, to kolejny numer powinien być XYZ-0004.
CuteOne
1. Nie tłum błędów..
$ins = mysql_query("INSERT INTO tabela VALUES (NULL, '$uzytkownik')") or die(mysql_error());

2.
-
  1. SELECT * FROM xxx WHERE dokument = 'yyy' ORDER BY id DESC LIMIT 1


- nie wiem o co chodzi
- poczytaj o operacjach na stringach - to są podstawy jak mnożenie i dzielenie w podstawówce (substr(), trim(), znak . , mysql INSERT)
wojciechu
#1
no ok, ale to nie wyjaśnia problemu sad.gif
nospor
Jak to nie wyjaśnia? Jak zrobisz jak ci kazano to zobaczysz błąd bazy, który bardzo dużo wyjaśnia...
Kshyhoo
Cytat(wojciechu @ 20.09.2012, 09:56:33 ) *
Chciałbym wysłać do bazy sql nazwę zalogowanego użytkownika, którego nazwa jest w sesji. Jeżeli wywołuję jego nazwę następującym kodem, to jest ok:

  1. $ins = mysql_query("INSERT INTO tabela VALUES (NULL, '{$_SESSION['usr']}')") or die(mysql_error());


#2.
1. Do zwrócenia ostatnio dodanego rekordu, w przypadku, gdy w tabeli istnieje pole ID, które ma włączone AUTO_INCREMENT wystarczy zapytanie:
  1. SELECT ... FROM ... ORDER BY id DESC LIMIT 1 ;

Jeżeli chcesz pobrać ID ostatnio dodanego rekordu wystarczy inne zapytanie:
  1. SELECT LAST_INSERT_ID();

Albo też:
  1. SELECT COUNT(*) FROM tabela

2. Pobrany numer musisz "wyciągnąć". Różnie można to zrobić, np. tak:
  1. $numer = sprintf("%04s",$numer);

3. Dodajesz do tego jeden. Może być tak:
  1. ++$numer;

4. Dodajesz swój przedrostek.
5. Zapisujesz...
redeemer
Cytat(Kshyhoo @ 20.09.2012, 11:02:46 ) *
...
Jeżeli chcesz pobrać ID ostatnio dodanego rekordu wystarczy inne zapytanie:
  1. SELECT LAST_INSERT_ID();

Albo też:
  1. SELECT COUNT(*) FROM tabela

...

Drugie zapytanie nie zwraca ID ostatnio dodanego rekordu (w niektórych przypadkach "liczba" rekordów będzie się pokrywać z ostatnim ID, ale nie zawsze). Jak już to:
  1. SELECT MAX(id) FROM tabela
wojciechu
hmm...no kurcze, jestem jużblisko tego co bym chciał osiągnąć tylko nie wiem jak:

użyłem polecenia
  1. SELECT numer FROM tabela WHERE dokument = 'yyy' ORDER BY id DESC LIMIT 1

ale jak w zapytaniu wskazać na wiersz numer?? i potem jeszcze poleceniem sql SELECT RIGHT wybrać 4 ostatnie znaki z numeru?
Kshyhoo
Poprawna składnia to:
  1. SELECT ... FROM ... WHERE RIGHT(fname,2) = 'rd';


  1. SELECT MAX(id), RIGHT(id,4) FROM tabela
wojciechu
Mam już całość kodu napisaną, tylko do bazy nie wstawia mi nowego numeru, a wyświetla takie coś: Resource i1

zmienna $formularze jest przesyłana przez formularz i na pewno zwraca poprawną wartość.

  1. <?php
  2. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  3. or die('Brak połączenia z serwerem MySQL');
  4. $db = @mysql_select_db('xxx', $connection)
  5. or die('Nie mogę połączyć się z bazą danych');
  6.  
  7.  
  8. $wyciaganie = @mysql_query("SELECT numer FROM tabela WHERE formularz = '$formularze' ORDER BY id DESC LIMIT 1") or die(mysql_error());
  9. ?>
  10.  
  11. <?php
  12. $numer = $wyciaganie;
  13. $wycinek = substr($numer, -4);
  14. $nowy = $wycinek + 1;
  15. $podmiana = str_replace($wycinek, $nowy, $numer);
  16. ?>

nospor
Dane z mysql_query odbiera się przy pomocy mysql_fetch_array()... wypadałoby się zapoznać wpierw z podstawami baz a dopiero się potem za nie brać.
wojciechu
Zmieniłem na fetch_array i nie pobiera dalej danych... Dzięki Wam i temu forum przyswajam dużo wiedzi php/sql smile.gif

  1. <?php
  2. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  3. or die('Brak połączenia z serwerem MySQL');
  4. $db = @mysql_select_db('xxx', $connection)
  5. or die('Nie mogę połączyć się z bazą danych');
  6.  
  7.  
  8. $wyciaganie = @mysql_fetch_array("SELECT numer FROM tabela WHERE formularz = '$formularze' ORDER BY id DESC LIMIT 1") or die(mysql_error());
  9. ?>
  10.  
  11. <?php
  12. $numer = $wyciaganie;
  13. $wycinek = substr($numer, -4);
  14. $nowy = $wycinek + 1;
  15. $podmiana = str_replace($wycinek, $nowy, $numer);
  16. ?>
nospor
Przecież napisałem: mysql_fetch_array() z mysql_query() a nie zamiast mysql_query().
Zajrzyj łaskawie do manuala. Tam masz napisane jak używać mysql_fetch_array(). Jak nie będziesz korzystać z manuala, to w magiczny sposób twoje tematy będą zamykane.
Dominator
Ty w ogóle czytałeś manual albo jakiś poradnik ?

Nosporze, zamknij ten temat.
pamil
A i tak nadal używa @ w swoim kodzie.
Kshyhoo
Ludzie, nie każdy jest tak błyskotliwy jak Wy. @wojciechu, nie używaj "@" do tłumienia błędów, bo niczego się nie nauczysz. Lepiej wyłapywać błędy i je eliminować. Poszukaj w Google, jak się to robi. To co napisał @nospor:
  1. $wyciaganie = mysql_query(mysql_fetch_array("SELECT numer FROM tabela WHERE formularz = '$formularze' ORDER BY id DESC LIMIT 1")) or die(mysql_error());


PS. Jak wkleisz jeszcze raz jakąkolwiek małpę, własnoręcznie skopię Ci d... i nasadzę bratków ;p
pamil
Cytat(Kshyhoo @ 21.09.2012, 18:53:33 ) *
Ludzie, nie każdy jest tak błyskotliwy jak Wy. @wojciechu, nie używaj "@" do tłumienia błędów, bo niczego się nie nauczysz. Lepiej wyłapywać błędy i je eliminować. Poszukaj w Google, jak się to robi. To co napisał @nospor:
  1. $wyciaganie = mysql_query(mysql_fetch_array("SELECT numer FROM tabela WHERE formularz = '$formularze' ORDER BY id DESC LIMIT 1")) or die(mysql_error());


PS. Jak wkleisz jeszcze raz jakąkolwiek małpę, własnoręcznie skopię Ci d... i nasadzę bratków ;p

Chyba te funkcje na odwrót.
wojciechu
Proszę nie jeździć po mnie, czytam tutoriale i manuale - ale to chyba logiczne, że sami od razu nie mieliście wiedzy o wszystkim smile.gif mam luki w podstawach, ale dzięki wam je nadrabiam smile.gif

po zmianie kodu, tak jak opisywaliście wyskakuje błąd 'array'... uprościłem kod i powyrzucałem inne rzeczy, żeby zobaczyć gdzie konkretnie błąd się pojawia.

przy wpisaniu w PHPmyadmin polecenia
  1. SELECT numer FROM zapisy WHERE formularz = 'xxx-002' ORDER BY id DESC LIMIT 1

wyskakuje wartość PPP-0002, czyli poprawna.

  1. <?php
  2.  
  3. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  4. or die('Brak połączenia z serwerem MySQL');
  5. $db = @mysql_select_db('xxx', $connection)
  6. or die('Nie mogę połączyć się z bazą danych');
  7.  
  8. $wyciaganie = mysql_fetch_array(mysql_query("SELECT numer FROM zapisy WHERE formularz = 'xxx-002' ORDER BY id DESC LIMIT 1")) or die(mysql_error());
  9.  
  10. ?>
  11.  
  12. <?php
  13. echo $wyciaganie;
  14. ?>
nospor
Cytat
po zmianie kodu, tak jak opisywaliście wyskakuje błąd 'array'...
To nie żaden błąd.....

Cytat
ale to chyba logiczne, że sami od razu nie mieliście wiedzy o wszystkim
Nie, niemieliśmy, ale też nie lataliśmy z każdą pierdułą na forum. Od takich pytań masz dokumencję (manual) która wyjaśnia te podstawy :/

Tak jak ten Twój nieszczęsny "błąd array".... Mowiłem byś zajrzał do manuala jak używać mysql_fetch_array. Nie zrobiłeś tego bo jakbyś zrobił to byś nie pisał takich rzeczy. zamykam. Gdy łaskawie zajrzysz do manuala i nadal będziesz miał jakiś problem - zapraszam na PW
Ponadto w internecie jest masa kursów po polsku jak używać w php baz danych - zapoznaj sie też z nimi. Forum naprawdę nie służy od tego by każdemu z osobna wyjaśniać ogólno dostępne podstawy.


edit: po raz kolejny widać, że na niektórych działa tylko zamknięcie tematu. Po tym kroku autor tematu w końcu zajrzał do manuala i rozwiązał "problem" smile.gif
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.