Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sprawdzanie czy rekord istnieje
Forum PHP.pl > Forum > Przedszkole
youngen
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ę biggrin.gif). Czy da się coś takiego zrobić? Nie mam zupełnie pomysłu co i jak.
SmokAnalog
  1. SELECT count(1) FROM tabela WHERE warunek
Shido
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. }
youngen
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. ?>

SmokAnalog
Wywoływanie zapytania tylko po to, żeby sprawdzić czy rekord istnieje to bardzo zły pomysł. Poczytaj o tym count(1).
youngen
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?
Rysh
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. }
youngen
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. ?>
IProSoft
Sprawdź:
Kod
`points`=`points`+1

lub
Kod
points=points+1
youngen
No, udało mi się już biggrin.gif

Dałem:
  1. mysql_query("UPDATE users SET points=251 WHERE user=1")or die(mysql_error());
i śmiga 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
djgarsi
Podaj 7 linie.
youngen
7 linia:
  1. $User = $User['user']
emkej
Podstawy! Brakuje ";"
  1. $User = $User['user'];
youngen
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. ?>
redeemer
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());
youngen
Czyli mam złą zmienną, bo wyskakuje UPDATE users SET points=points+1 WHERE nick=``

Bardzo ciekawy sposób mi podałeś biggrin.gif Tylko dlaczego ta zmienna nie działa?
redeemer
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?
youngen
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.
redeemer
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().
youngen
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...
redeemer
To nie wina mysql, ale złego projektu. Prawdopodobnie gubisz gdzieś sesję, albo w ogóle coś przekombinowałeś 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
youngen
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. $ID = questionmark.gifquestionmark.gif?
  3.  
  4.  
  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. echo("UPDATE users SET points=points+1 WHERE user=`$ID`");//or die(mysql_error()); or die(mysql_error());
  15. }
  16.  
  17.  
  18. }
  19.  
  20. ?>
  21.  
  22. [...]
  23. </tr>
  24. <tr style="position:absolute; left:430px; top:330px;z-index:1;">
  25. <td></td>
  26. <td><input type='text' name='$ID' /></td>
  27. </tr>
  28. [...]


Co wpisać zamiast pytajników w pierwszej linijce? I czy ma szanse to działać?
Rysh
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.
youngen
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 smile.gif
b4rt3kk
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.
youngen
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 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łą :/
b4rt3kk
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!
Rysh
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 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!)
SmokAnalog
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.
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.