Skocz do zawartości
Puchacz1

znów problem z bazą...

Rekomendowane odpowiedzi

a więc:

$haslo = MD5("qwerty");
$connect = mysql_connect();
$dbname = 'users';
$query ='CREATE DATABASE '.$dbname;
mysql_query($query);
mysql_select_db('users');
$zapytanie = 'CREATE TABLE nba (id int NOT NULL AUTO_INCREMENT, nick char(30), imie char(30), nazwisko char(15), email char(25), haslo char(30), PRIMARY KEY(id))';
$zapytanie2 = "INSERT INTO `nba` (`id`, `nick`, `imie`, `nazwisko`, `email`, `haslo`) VALUES ('','Puchacz', 'Kelly', 'Bundy', 'Bundy@interia.pl', '".$haslo."')";
mysql_query($zapytanie);
mysql_query($zapytanie2);
mysql_close($connect);

 

tak stworzyłem bazę danych => wszystko działa, sprawdzone poleceniem SELECT * FROM xxx

teraz chcę porównać wpisane hasło i login z tymi z bazy danych:

$dana = $_POST['password'];
$pw = MD5($dana);
$connect_db = mysql_connect('localhost', 'root');
mysql_select_db('users');
$quest = "SELECT `nick`, `haslo` FROM nba WHERE `nick` = '{$_POST['login']}' AND `haslo` = '{$pw}'";
echo($quest);
$query = mysql_query($quest);
$check = mysql_fetch_row($query);
mysql_close($connect_db);
echo $check[0][1];

jednak tak się nie da. To co zapisane w bazie danych różni od tego co kodowałem MD5. Wygląda to tak:

qwerty = d8578edf8458ce06fbc5bb76a58c5ca4

to co w bazie: d8578edf8458ce06fbc5bb76a58c5c

nie rozumiem dlaczego tak się dzieje i przede wszystkim nie wiem czy dobrze stworzyłem tą bazę danych i czy poprawnie się do niej odwołuję. Jak to odczytać i porównać...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

$dana = $_POST['password'];
$pw = MD5($dana);
$connect_db = mysql_connect('localhost', 'root');
mysql_select_db('users');
$quest = "SELECT `nick`, `haslo` FROM nba WHERE `nick` = '{$_POST['login']}' AND `haslo` = '{$pw}'";
echo($quest);
$query = mysql_query($quest);
$check = mysql_fetch_row($query);
mysql_close($connect_db);
echo $check[0][1];

 

A jak ktoś wpisze złe hasło to nie zwróci wyniku i klops :P

IMO najpierw dobrze jest sprawdzić czy użytkownik jest w bazie (SELECT * FROM nba WHERE 'nick' = '{$_POST['login']}'). Dostaniesz jeden wiersz lub żadnego w zależności od tego czy jest w bazie czy nie (w tym miejscu komunikat, że nie ma takiego użytkownika). Potem wybierasz z zapytania pole z hasłem i sprawdzasz czy się zgadzają. Przy błędzie - komunikat.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

echo $check[0][1];
Wyświetliło "u"? Wywal [1], dostaniesz "Puchacz".

Albo lepiej, zamień tę linijkę na

print_r($check);
...i zobacz co wypisze. Przy błędnym loginie/haśle nie powinno być nic, przy poprawnym wszystko,co pobierałeś z bazy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

mar, działa - już wczoraj to odkryłem :). Mimo to dzięki.

inny problem:

 

1.problem jest taki. Za pomocą funkcji glob() pobieram nazwy obrazków które są od teraz tablicą. Jak zrobić by po naciśnięciu nast/poprzedni dodało lub odjęło wartość od klucza tablicy

 

o coś takiego chodzi:

$zmienna[$klucz] = nazwa_obrazka // przy czym $klucz jest liczbą!. //

jeśli nacisnę dodaj do $klucz zostanie dodane 1

 

2.dlaczego glob('nazwa_pliku.jpg) nie odczytuje plików o rozszerzeniu JPG. Domyślam się, że winna jest tutaj wielkość liter, jak więc to pominąć.

 

nie szukam gotowego rozwiązania, chciałbym abyście mi podpowiedzieli jak się za to zabrać.

Edytowane przez Puchacz1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ad. 1.

Robisz dodatkową zmienną 'obecny', przesyłasz ją w $_GET, a potem zwiększasz o 1 dla następnego i zmniejszasz o 1 dla poprzedniego. Nie chcesz gotowca, więc przez grzeczność (:lol:) go nie podam.

Link "poprzedni" przesyła do kolejnej podstrony z tą zmienną zmniejszoną o 1, link "następny" do podstrony z tą zmienną zwiększoną o 1.

Jeżeli zmienne są:

  • poprzednia - mniejsza od 0
  • następna - większa od ilości elementów w tablicy -1
...nie tworzysz linków "poprzedni", albo "następny". Chyba tyle.

 

Przykładowe linki dla zmiennej "obecny=3": <a href="?obecny=2">poprzedni</a> <a href="?obecny=4">następny</a>

 

Ad. 2.

Ktoś w manualu php napisał, że glob pod windowsem ma problem przy rozpoznawaniu dużych i małych liter, kiedy jest użyte coś w stylu glob('*.jpg');

Jak to obejść? Najprościej pewnie przetestować na linuxie, albo zmienić wszystkie rozszerzenia na małe. Ewentualnie pobierać listę plików w katalogu czymś innym.

Edytowane przez m4r

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1.m4r - przede wszystkim nie rozumiem jak miałaby się odbywać to dodawanie lub odejmowanie. Bo jak do zmiennej dodać lub odjąć jakąś wartość bez definiowania np. name=dodaj lub odejmij i użycia if do wybierania i dodawania lub odejmowania wartości.

 

2.Niemniej jednak po Twoich słowach wpadłem na pewien tor jednak nie jest on do końca poprawny a ja nie potrafię go rozbudować. Cały czas mam wrażenie, że czegoś nie umiem, czegoś nie rozumiem. Do rzeczy, napisałem coś takiego - teoretycznie działa jednak wyświetla stronę -1 oraz przy "następnie" następnie przeskakuje od razu do strony pierwszej.

 

<?php
if(isset($_GET['obecny']) && $_GET['obecny'] >= 0)
{
 $obecny = $_GET['obecny'];
}
else 
{
 $obecny = 0;  
}
?>
<a href="galeria.php?obecny=<?php echo($obecny - 1); ?>">poprzedni</a> 
<a href="galeria.php?obecny=<?php echo($obecny + 1); ?>">następny</a>

 

powiedzcie mi w kilku słowach dlaczego mój tok myślenia jest zły i jak go naprawić.

 

EDIT:

napisałem jeszcze coś takiego jednak nie rozumiem działania tego co napisałem (czy to możliwe? :P). Teoretycznie działa, jednak brak mu ogranicznika.

 

<?php 
if(isset($obecny) && $obecny = -1 || $obecny = 1)
{
 $obecny=0;
}
else
{
 $obecny = $_GET['obecny'];
}
?>
<a href="galeria.php?obecny=<?php echo($obecny - 1); ?>" name="add">poprzedni</a> 
<a href="galeria.php?obecny=<?php echo($obecny + 1); ?>" name="odejmij">następny</a>

 

teraz spróbuję wytłumaczyć co to robi wg. mnie.

1. Jeśli jest ustawiona zmienna obecny i zmienna obecny jest równa -1 lub 1 ustawiamy zmienną obecną równą 0 => właśnie, dlaczego to działa tak, że jak jest ustawiona zmienna 1 lub -1 to nie ustawia $obecny na 0 tylko zostawia zmienna obecny przy swojej wartości.

2. Jeśli zmienna obecna różna od -1,1 to pobiera zmienną obecny z formularza.

Edytowane przez Puchacz1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Eee... pierwszy skrypt działa prawie dobrze, drugi też.

 

Dlaczego pierwszy działa tak a nie inaczej?

Jeżeli mamy zmienną $_GET['obecny'] i jest większa lub równa 0, to przypisujemy nowej zmiennej $obecny jej wartość

Jeżeli nie- nowa zmienna $obecny dostaje wartość 0.

I teraz są schody, jeżeli zmienna obecny w _GET jest równa -1

Bo- jeżeli ma -1, to z automatu nie spełnia warunku >=0, a więc zmienna $obecny ma wartość 0. Przez to w linkach będziesz miał wartości -1 i 1 (od razu- bez zera, bo takie się dodają/odejmują w echo).

 

A dlaczego drugi działa jak powinien, chociaż bez ograniczeń?

Bo cały if ma niemożliwy do spełnienia warunek- po prostu- zmienna nie jest wcześniej zadeklarowana co już na starcie spowoduje wstawienie pod nią zera, a później przejście do else (bo warunek dla 0 będzie akurat tutaj fałszem). Efekt będzie innymi słowy taki, jakbyś po prostu wywalił wszystko, z wyjątkiem "$obecny = $_GET['obecny'];"

 

Jeżeli zmodyfikujesz warunki do pierwszego skryptu (albo dopiszesz do drugiego po uprzednim wywaleniu całego if - else, z wyjątkiem przypisania $obecny = $_GET...), powinno ruszyć.

 

Warunek 1, dla linka "poprzedni":

if($obecny <= 0)   echo $obecny;else   echo $obecny - 1;

Warunek 2 - dla linka "następny" (na przyszłość)

// tutaj kod zabezpieczający dla ostatniego elementu tablicy (a.k.a. maksymalnej wartości $obecny), czyli coś w stylu:echo $obecny < count($aPliki)-1 ? $obecny+1 : $obecny; //sorry za short if

Aha, jest deko późno i chce mi się spać, więc jest szansa, że coś nakręciłem. Jeżeli coś będzie niejasne, to jest równie spora szansa, że gdzieś tak koło południa poprawię ten tekst, jeżeli mi się nie spodoba.

 

Btw.

 

 

Bo jak do zmiennej dodać lub odjąć jakąś wartość bez definiowania np. name=dodaj lub odejmij i użycia if do wybierania i dodawania lub odejmowania wartości.

 

eee... nie wiem, chodziło mi właśnie o to: echo($obecny - 1); echo($obecny + 1);

 

 

Edytowane przez m4r

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

m4r wszystko działa jak należy, trochę inaczej zapisałem warunek drugi ale jest ok :).

 

może mi ktoś powiedzieć dlaczego nie jest nic dodawane do bazy prócz jej utworzenia?

 

 $connect = mysql_connect('127.0.0.1','root');
 mysql_query("CREATE DATABASE `produkty`");
 mysql_select_db("produkty");
 $sql[0] = mysql_query("CREATE TABLE '".$kategoria."' (idkat int NOT NULL AUTO_INCREMENT, firma text(30), produkt text(20), zdjecie text(20), opis text(255), opis_kr text(50), popularnosc int, ocena int, PRIMARY KEY(idkat))");
 $sql[1] = mysql_query("INSERT INTO '".$kategoria."' (`idkat`, `firma` `produkt`, `zdjecie`, `opis`, `opis_kr`, `popularnosc`, `ocena`) VALUES ('', '".$firma."', '".$produkt."', '".$zdjecie."', '".$opis."', '".$opis."', '".$opis_kr."', '".$popularnosc."', '".$ocena."')");
 mysql_close($connect);
 echo('Wykonano'.$sql[0].':'.$sql[1]);

Edytowane przez Puchacz1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

 $sql[1] = mysql_query("INSERT INTO '".$kategoria."' (`idkat`, `firma` `produkt`, `zdjecie`, `opis`, `opis_kr`, `popularnosc`, `ocena`) VALUES ('', '".$firma."', '".$produkt."', '".$zdjecie."', '".$opis."', '".$opis."', '".$opis_kr."', '".$popularnosc."', '".$ocena."')");

 

"INSERT INTO '".$kategoria."'..."
zamień na
"INSERT INTO `".$kategoria."`..."
albo wywal stamtąd całkiem te ciapki.

 

Poza tym masz jeszcze 2x zmienną '$opis'.

Edytowane przez m4r

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

pozmieniałem co kazałeś zamienić i nadal to samo. Pokażę wobec tego cały plik:

 

<form  action="" method="POST">
Kategoria:<input name="kategoria" type="text" /><br  />
Firma:<input name="firma" type="text" /><br  />
Produkt:<input name="produkt" type="text" /><br  />
Zdjecie:<input name="zdjecie" type="text" /><br  />
Opis:<input name="opis" type="text" /><br  />
Krótki Opis<input name="opis_kr" type="text" />
<input  type="submit" value="wyślij" />
</form>
<?php
$kategoria = trim(addslashes(strip_tags($_POST['kategoria'])));
echo($kategoria);
$firma = trim(addslashes(strip_tags($_POST['firma'])));
$produkt = trim(addslashes(strip_tags($_POST['produkt'])));
$zdjecie = trim(addslashes(strip_tags($_POST['zdjecie'])));
$opis = trim(addslashes(strip_tags($_POST['opis'])));
$opis_kr = trim(addslashes(strip_tags($_POST['opis_kr'])));
$popularnosc = trim(addslashes(strip_tags($_POST['popularnosc'])));
$ocenta = trim(addslashes(strip_tags($_POST['ocena'])));
 $connect = mysql_connect('127.0.0.1','root');
 mysql_query("CREATE DATABASE `produkty`");
 mysql_select_db("produkty");
 $sql[0] = mysql_query("CREATE TABLE '".$kategoria."' (idkat int NOT NULL AUTO_INCREMENT, firma text(30), produkt text(20), zdjecie text(20), opis text(255), opis_kr text(50), popularnosc int, ocena int, PRIMARY KEY(idkat))");
 $sql[1] = mysql_query("INSERT INTO `".$kategoria."` (`idkat`, `firma` `produkt`, `zdjecie`, `opis`, `opis_kr`, `popularnosc`, `ocena`) VALUES ('', '".$firma."', '".$produkt."', '".$zdjecie."', '".$opis."', '".$opis_kr."', '".$popularnosc."', '".$ocena."')");
 mysql_close($connect);
 echo('Wykonano'.$sql[0].':'.$sql[1]);
?>

Edytowane przez Puchacz1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W create table, przy nazwie tabeli też masz nie takie cudzysłowy.

Odpalaj sobie zapytania najpierw w phpmyadmin, będziesz mógł "na żywo" podejrzeć błędy i poprawić co trzeba. Dopiero potem wstawiaj poprawne zapytania do skryptu php i podmieniaj odpowiednie dane zmiennymi.

 

btw... do debugu mysql_query("...") or die(mysql_error()) w takim pliczku jest jak znalazł. Potem możesz wyrzucić funkcje zdychania.

Edytowane przez m4r

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

m4r,zabij mnie ale ja mam stałe problemy z tymi bazami :). Tym razem przetestowałem wszystko w phpmyadmin i nie działa. Do rzeczy, w phpmyadmin

 

SHOW TABLES FROM `produkty`

 

zwraca dwie tabele(prawidłowo)[karty graficzne oraz zasilacze] natomiast jak to samo robię już w kodzie php przez mysql_query to zwraca mi tylko tabele karty graficzne. Google mi nie pomógł, więc pytam tutaj - dlaczego tak jest i jak to naprawić.

Edytowane przez Puchacz1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Na pewno masz dobrze zapytania? Nigdy się nie spotkałem z czymś takim, żeby w PMA wyświetlało jedno, a w skrypcie - drugie.

 

Aczkolwiek...

to zwraca mi tylko tabele karty graficzne.

 

A czy "show tables..." wywołujesz przed, czy już po utworzeniu tabeli "zasilacze" w skrypcie?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...