Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP] Sprawdzanie czy rekord istnieje
youngen
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Uporałem się z poprzednim problemem, zaczął się drugi niestety :/

Jak zrobić, aby sprawdzało mi jakoś czy dany rekord istnieje? Chodzi mi o to, że użytkownik wpisuje jakieś dane i jeśli byłyby w bazie to pojawia się jakiś napis (z napisem sobie poradzę (IMG:style_emoticons/default/biggrin.gif) ). Czy da się coś takiego zrobić? Nie mam zupełnie pomysłu co i jak.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


  1. SELECT count(1) FROM tabela WHERE warunek
Go to the top of the page
+Quote Post
Shido
post
Post #3





Grupa: Zarejestrowani
Postów: 121
Pomógł: 22
Dołączył: 22.06.2012

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


Ja sprawdzam czy wykona się zapytanie.
  1. public function onbase($baza, $wyk)
  2. {
  3. global $dbprefix;
  4. $baza = $dbprefix.''.$baza;
  5. $jest = false;
  6. $sql = "SELECT * FROM `$baza` WHERE $wyk LIMIT 1";
  7. $wykonaj0 = mysql_query ($sql);
  8. while($wiersz0=mysql_fetch_array ($wykonaj0))
  9. {
  10. $jest = true;
  11. }
  12. if($jest)
  13. {
  14. return true;
  15. }
  16. else
  17. {
  18. return false;
  19. }
  20. }


Ten post edytował Shido 5.07.2012, 12:57:43
Go to the top of the page
+Quote Post
youngen
post
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Udało mi się samemu wykombinować:
  1. <?php
  2. if(!empty($_POST['costaml']) && !empty($_POST['costam1'])){
  3.  
  4.  
  5. $jest = mysql_fetch_array(mysql_query("select * from tabela where (costam) ='".($_POST['costam'])."' and costam1 ='".($_POST['costam1'])."' limit 1"));
  6. if(empty($jest)){
  7. $error[1] = "Podales bledny";
  8. } else {
  9. echo ("podałeś poprawny");
  10. }
  11.  
  12.  
  13. }
  14.  
  15. ?>


Tylko tutaj problem, bo w else chciałbym zrobić tak, aby użytkownikowi dodało np. ID + 1. Tylko w jaki sposób sprawić, aby moja strona wiedziała któremu użytkownikowi dodać +1?


Próbowałem tak, ale nie działa
  1. <?php
  2. if(!empty($_POST['costaml']) && !empty($_POST['costam1'])){
  3.  
  4.  
  5. $jest = mysql_fetch_array(mysql_query("select * from tabela where (costam) ='".($_POST['costam'])."' and costam1 ='".($_POST['costam1'])."' limit 1"));
  6. if(empty($jest)){
  7. $error[1] = "Podales bledny";
  8. } else {
  9. mysql_query("UPDATE users SET costam=‘costam+1’ WHERE users=‘$user`");
  10. }
  11.  
  12.  
  13. }
  14.  
  15. ?>

Go to the top of the page
+Quote Post
SmokAnalog
post
Post #5





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Wywoływanie zapytania tylko po to, żeby sprawdzić czy rekord istnieje to bardzo zły pomysł. Poczytaj o tym count(1).
Go to the top of the page
+Quote Post
youngen
post
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Możliwe, że zły. Jednak narazie wystarczy mi takie, żeby było. Później gdy będe miał czas na poprawki to pozmieniam, żeby było lepiej. Narazie szczerze mówiąc umiem tylko w ten sposób, który ja napisałem. Czy da się moim sposobem zrobić tak, żeby to działało?

if(!empty($_POST['email']) && !empty($_POST['nick'])){


$jest = mysql_fetch_array(mysql_query("select * from tabela where (nick) ='".($_POST['nick'])."' and email ='".($_POST['email'])."' limit 1"));
if(empty($jest)){
$error[1] = "Podales bledny kod";
} else {
mysql_query("UPDATE users SET user=‘ziemniaki’ WHERE id<2");
}


}


Gdy dodam or die to wywala błąd unexpected ';'.
Co jest źle w tym?

Ten post edytował youngen 5.07.2012, 14:01:04
Go to the top of the page
+Quote Post
Rysh
post
Post #7





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Twój sposób jest tragiczny.

  1. $sql = mysql_query("SELECT count(id) AS istnieje FROM tabela WHERE kolumna = 'częstochowa'") or die(mysql_error());
  2. $ile = mysql_fetch_assoc($sql);
  3. if($ile['istnieje'] > 0) {
  4. //istnieje
  5. } else {
  6. //nie istnieje
  7. }
Go to the top of the page
+Quote Post
youngen
post
Post #8





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Rysh, dzięki że chcesz mi pomóc, ale zauważ że akurat to co ty podałeś to mi działa. Na innym sposobie, ale działa. Nie działa mi tylko ta linijka:
  1. mysql_fetch_array(mysql_query("UPDATE users SET points=`points+1` WHERE user=`$User`")or die(mysql_error));

cały kod wygląda tak:
  1. <?php
  2. require('laczeniebazy.php');
  3.  
  4. $User = fgracz($_SESSION['user']);
  5.  
  6.  
  7. if(!empty($_POST['email']) && !empty($_POST['nick'])){
  8.  
  9.  
  10. $jest = mysql_fetch_array(mysql_query("select * from tabelakodow where (nick) ='".($_POST['nick'])."' and email ='".($_POST['email'])."' limit 1"));
  11. if(empty($jest)){
  12. $error[1] = "Podales bledny kod";
  13. } else {
  14. mysql_fetch_array(mysql_query("UPDATE users SET points=`points+1` WHERE user=`$User`")or die(mysql_error));
  15. }
  16.  
  17.  
  18. }
  19.  
  20. ?>


Ten post edytował youngen 6.07.2012, 08:24:10
Go to the top of the page
+Quote Post
IProSoft
post
Post #9





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Sprawdź:
Kod
`points`=`points`+1

lub
Kod
points=points+1
Go to the top of the page
+Quote Post
youngen
post
Post #10





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


No, udało mi się już (IMG:style_emoticons/default/biggrin.gif)

Dałem:
  1. mysql_query("UPDATE users SET points=251 WHERE user=1")or die(mysql_error());
i śmiga (IMG:style_emoticons/default/smile.gif)

Edit: za wcześnie się ucieszyłem. Niby jest wszystko ok, ale ja muszę w user= mieć zmienną $User. Niestety wtedy wywala błąd: Parse error: syntax error, unexpected T_STRING on line 7

Ten post edytował youngen 6.07.2012, 09:19:26
Go to the top of the page
+Quote Post
djgarsi
post
Post #11





Grupa: Zarejestrowani
Postów: 459
Pomógł: 26
Dołączył: 1.06.2009

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


Podaj 7 linie.
Go to the top of the page
+Quote Post
youngen
post
Post #12





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


7 linia:
  1. $User = $User['user']
Go to the top of the page
+Quote Post
emkej
post
Post #13





Grupa: Zarejestrowani
Postów: 48
Pomógł: 5
Dołączył: 18.06.2012

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


Podstawy! Brakuje ";"
  1. $User = $User['user'];
Go to the top of the page
+Quote Post
youngen
post
Post #14





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Ech... No tak.

Teraz nie wywala żadnego błędu, ale co z tego gdy pointsów nie dodaje :/ Wcześniej gdy nie miałem zmiennej to działało, ze zmienną która jest mi bardzo potrzebna nie działa :/

  1. <?php
  2. require('laczeniebazy.php');
  3.  
  4.  
  5. $User = $User['user'];
  6.  
  7. if(!empty($_POST['email']) && !empty($_POST['nick'])){
  8.  
  9.  
  10. $jest = mysql_fetch_array(mysql_query("select * from tabelakodow where (nick) ='".($_POST['nick'])."' and email ='".($_POST['email'])."' limit 1"));
  11. if(empty($jest)){
  12. $error[1] = "Podales bledny kod";
  13. } else {
  14. mysql_query("UPDATE users SET points=points+1 WHERE nick='{$User}'")or die(mysql_error());
  15. }
  16.  
  17.  
  18. }
  19.  
  20. ?>
Go to the top of the page
+Quote Post
redeemer
post
Post #15





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Wyświetl sobie jakie zapytanie przesyłasz do bazy danych:
  1. echo("UPDATE users SET points=points+1 WHERE nick='{$User}'");//or die(mysql_error());
Go to the top of the page
+Quote Post
youngen
post
Post #16





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Czyli mam złą zmienną, bo wyskakuje UPDATE users SET points=points+1 WHERE nick=``

Bardzo ciekawy sposób mi podałeś (IMG:style_emoticons/default/biggrin.gif) Tylko dlaczego ta zmienna nie działa?
Go to the top of the page
+Quote Post
redeemer
post
Post #17





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


W linii 6 przypisujesz do zmiennej $User wartość z tablicy asocjacyjnej $User (klucz 'user'). Co to właściwie jest ta tablica $User? Gdzie definiujesz tą zmienną? W laczeniebazy.php?
Go to the top of the page
+Quote Post
youngen
post
Post #18





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


W łączeniu bazy mam:
  1. $User = fgracz($_SESSION['user']);

Zresztą kombinowałem też tak, żeby dać to w pliku, a nie w łaczeniebazy.php, ale też nie działa. na wszystkie sposoby próbowałem i nic :/
Gdy $User = fgracz($_SESSION['user']); mam w pliku, w ktorym teraz "pracuję" to zamiast pustego '' mam 'array'

Gdy dam echo to normalnie wyświetla mi się nick, więc myślę że to jest dobre.

Ten post edytował youngen 6.07.2012, 11:09:50
Go to the top of the page
+Quote Post
redeemer
post
Post #19





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


W pliku laczeniebazy.php odwołujesz się do sesji. Masz tam session_start()? Masz w pliku w którym wkleiłeś, jednak jest to już po fakcie odwołania się. Po require('laczeniebazy.php') wstaw var_dump($User);exit; i zobacz co tak naprawdę zmienna $User zawiera. Poza tym, nie wiemy co zwraca funkcja fgracz().
Go to the top of the page
+Quote Post
youngen
post
Post #20





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Hah... Jest null. O co biega z tym mysqlem to ja nie wiem...

Dałem teraz: if(empty($User['nick'])) header('location: wyloguj.php'); żeby sprawdzić czy jestem zalogowany i okazało się, że nie...

No dobra, to zrobiłem to na innej podstronie, tzn. przekopiowałem to co teraz napisałem i wrzuciłem na tamtą podstronkę. I co się okazało? Gdy kliknę, aby dodało pointsa to mnie wylogowywuje. To jest dziwne...
Go to the top of the page
+Quote Post
redeemer
post
Post #21





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


To nie wina mysql, ale złego projektu. Prawdopodobnie gubisz gdzieś sesję, albo w ogóle coś przekombinowałeś (IMG:style_emoticons/default/smile.gif) Wszystkie wskazówki, które mogłem Ci udzielić już udzieliłem, więc proponuję przeczytać http://pl.wikibooks.org/wiki/PHP/Sesje
Go to the top of the page
+Quote Post
youngen
post
Post #22





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Dzięki, że mi pomogłeś, bo tak to bym pewnie tydzień się z tym bawił i nic by z tego nie było.

Wpadłem na inny pomysł, że użytkownik podaje swoje ID i przesyła point leci do tego ID. Nie wiem za bardzo jak to zrobić (no jak zwykle).
  1. [...]
  2.  
  3.  
  4.  
  5.  
  6. if(!empty($_POST['email']) && !empty($_POST['nick'])){
  7.  
  8.  
  9. $jest = mysql_fetch_array(mysql_query("select * from tabelakodow where (nick) ='".($_POST['nick'])."' and email ='".($_POST['email'])."' limit 1"));
  10. if(empty($jest)){
  11. $error[1] = "Podales bledny kod";
  12. } else {
  13. echo("UPDATE users SET points=points+1 WHERE user=`$ID`");//or die(mysql_error()); or die(mysql_error());
  14. }
  15.  
  16.  
  17. }
  18.  
  19. ?>
  20.  
  21. [...]
  22. </tr>
  23. <tr style="position:absolute; left:430px; top:330px;z-index:1;">
  24. <td></td>
  25. <td><input type='text' name='$ID' /></td>
  26. </tr>
  27. [...]


Co wpisać zamiast pytajników w pierwszej linijce? I czy ma szanse to działać?
Go to the top of the page
+Quote Post
Rysh
post
Post #23





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Twój kod jest tak durny, że aż głupi.

Przykład:
  1. $jest = mysql_fetch_array(mysql_query("select * from tabelakodow where (nick) ='".($_POST['nick'])."' and email ='".($_POST['email'])."' limit 1")); //1
  2. if(empty($jest)){ //2

Wytłumacz proszę nam co robi //1 i //2.
Kiedy wykona się if, a kiedy nie.
Go to the top of the page
+Quote Post
youngen
post
Post #24





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


1// wysyła zapytanie do bazy
2// pokazuje błąd jeśli wprowadzono zły kod

A to, że mój kod jest durny to wiem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #25





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Skoro ma podawać swoje ID to może?

  1. $ID = $_POST['id'];


Sposób w jaki realizujesz zapytania:

  1. $jest = mysql_fetch_array(mysql_query("select * from tabelakodow where (nick) ='".($_POST['nick'])."' and email ='".($_POST['email'])."' limit 1"));


nie wystarczy SELECT COUNT? skoro chcesz tylko sprawdzić czy taki rekord istnieje?

W ten sposób zwróci wartość 0 lub 1 zamiast całej listy pól. No i od razu przetwarzasz wyniki zapytania, a co jeśli się nie wykona? Nie sprawdzasz w ogóle błędów, w takim wypadku użytkownikowi wyskoczy cała lista errorów.
Go to the top of the page
+Quote Post
youngen
post
Post #26





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.07.2012

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


Szczerze mówiąc to nie wiem za bardzo na jakiej zasadzie count mogłoby mi zadziałać. Wiem, jestem ciemny, ale cóż.

Najpierw chcę napisać, że to nie jest tak, że ja tylko czekam na wasze odpowiedzi i nic nie próbuję sam. Udało mi się jakoś poprawić te sesje, że mnie nie wylogowywuje za każdym razem. Prawie cały dzień próbuję coś wykombinować i nic :/

Największym problemem jest chyba deklaracja zmiennej w MySQL, czyli albo źle deklaruję zmienną albo mysql ją źle czyta (IMG:style_emoticons/default/tongue.gif) . Dobra, w każdym razie:
  1. <p style="position: absolute; left: 460px; top:208px;"> <b><?php echo $User['nick'] ?></b><br></p>
-> to działa dobrze

  1. echo("UPDATE users SET points=points+1 WHERE nick=$User");//OR die(mysql_error()); OR die(mysql_error());
-> to działa źle, nie widzi nic w tej zmiennej.

Tylko kurde czemu? Z tego co widzę to w mysql nie można dać zwyczajnie $User['nick'], więc na początek kodu dodałem: $User = $User['nick']. Niby działa, ale zmiennej nie widzi.

B4rt3kk - twój sposób też niestety nie działą :/

Ten post edytował youngen 6.07.2012, 16:43:53
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #27





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Twoja zmienna $User to tablica, nie możesz w ten sposób porównywać stringa z tablicą. Przypisz inną zmienną.

  1. $nick = $User['nick'];
  2. $query = "UPDATE users SET points=points+1 WHERE nick='$nick'";


Tak powinno wyglądać zapytanie, nie zapominaj o apostrofach!

Ten post edytował b4rt3kk 6.07.2012, 17:17:02
Go to the top of the page
+Quote Post
Rysh
post
Post #28





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Cytat(youngen @ 6.07.2012, 13:59:24 ) *
1// wysyła zapytanie do bazy
2// pokazuje błąd jeśli wprowadzono zły kod

A to, że mój kod jest durny to wiem (IMG:style_emoticons/default/smile.gif)

A ja tam widzę:
//1 - przypisuje wartość do zmiennej
//2 - wykonuje się jeśli puste (a nigdy nie jest puste, bo zawsze przypisujesz do zmiennej!)
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #29





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Cytat(youngen @ 6.07.2012, 12:52:29 ) *
Wpadłem na inny pomysł, że użytkownik podaje swoje ID i przesyła point leci do tego ID. Nie wiem za bardzo jak to zrobić (no jak zwykle).

Rzeczywiście, szalenie intuicyjne i przyjazne dla użytkownika.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 26.09.2025 - 16:58