Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP i MySql] Szybki start
Forum PHP.pl > Forum > PHP
julia
Witam wszystkich
Przeczytałam uważnie regulamin i przestudiowałam forum, po czym zdecydowałam się umieścić post.
Zdaję sobie sprawę, że zapewne mnie odeślecie do manuala itp. ale nim to zrobicie spróbujcie mi pomóc.
Sprawa dotyczy mojego damskiego honoru, a wszystko zaczęło się od utarczki z moim kolegą z pracy (informatykiem). Nosi nos wyżej chmur i myśli, że pozjadał wszystkie rozumy. Stanęło na tym, że mam tydzień czasu na to by mu udowodnić, że jestem w stanie przyswoić sobie "tajemną wiedzę" jego ukochanej dziedziny. no i dał mi za zadanie napisać w php "skrypt logujący do jego bazy". powiedział mi, że poda mi wszystkie dane jakie będę potrzebowała (chyba chodzi mu o nazwę serwera, bazy i tabeli z hasłami i userami - bo tyle doczytałam na forum a na pewno wiem, że zainstalowane są Windowsy 2000, Apache php i MySql)
Nie proszę Was o napisanie skryptu, chodzi mi o to, byście w prostych, zwięzłych słowach podali mi punkty które muszę spełnić, by napisać krypt i żeby on zadziałał.
O informatyce i programowaniu nie wiem kompletnie nic, w moim zawodzie jest to kompletnie niepotrzebne, więc jeżeli ktoś się zgodzi udzielić mi pomocy, to musi pamiętać o tym, że posługiwanie się skrótami oraz terminologią wyjętą żywcem z manuala może stanowić dla mnie bełkot, tak samo odsyłanie mnie do żródeł anglojęzycznych nie do końca ma sens.

Z góry dziękuję, za ewentualne chęci pomocy w imieniu swoim i zapewne innych, którzy stają przed podobnymi problemami

(nota bene - w jednym z postów czytałam propozycji utworzenia działu dla zupełnie zielonych (lame ?) i uważam, że to świetny pomysł stwożyć coś na kształt żłobka. Osobom, które chcą dołączyć do grona ludzi parających się programowaniem znacznie ułatwiłoby to życie.

Julia

P.S.
Sprawa jest o tyle poważna, że usłyszałam, że jstem tak głupia, że nawet stripteasu nie potrafiłabym zrobić, no i stanął zakład, będzie to stripteas mój albo naszego informatyka !!!
Project
he he ale fajnie!
szczerze mowiac to chetnie zobaczyl bym ten twoj stripteas smile.gif
A tak na powaznie to mozesz sprobowac zajrzec na strone hotscripts.com
Tam w dziale php sa juz gotowe skrypty logowania oparte na bazach danych.
moze okazac sie ze wcalnie nie bedziesz musiala pisac tego od nowa tylko lekko zmodyfikowac smile.gif

W razie czego napewno znajdziesz tu zyczliwych ludzi chetnych do pomocy smile.gif (miedzy innymi mnie - mam dzisiaj dzien wolny od pracy)

POZDRAWIAM
kwiateek
Dowiedz sie jaka jest struktura tabeli z uzytkownikami ktora bedziesz wykorzystywala przy logowaniu. Chodzi o konkretnie o to czy hasla sa zaszyfrowane czy tez nie.
Ponizej przedstawiam przykladowy plik html.

login.html
Kod
<form ACTION="login.php">

    Login:  <input TYPE="text" name="login"><BR>

    Haslo:  <input TYPE="password" name="haslo"><BR><BR>

    <input TYPE="submit" name="loguj" value="Zaloguj">  

</FORM>

Teraz bedzie tylko trzeba stworzyc plik login.php na podstawie dostarczonych przez Ciebie danych.
julia
Dziękuję, za link, znalazłam mnóstwo skryptów, ale chyba nie o to mi chodziło. (Nie mówiąc o tym, że opisy są po angielsku sad.gif )
Ja muszę go napisać sama, analizowanie tamtych nie na wiele mi się w tej chwili przyda, bo jak na razie nie rozumiem o co w nich chodzi. Liczę na to, że za pomocą tego forum zrozumiem i będę potrafiła sama zastosować swoją wiedzę nie tylko posługując się "ctr-c" i "ctrl-v".
Niech nasz informatyk sobie tworzy, kopiując wszystko co mu potrzebne, ale w końcu to żadna wiedza, a jedynie umiejętność smile.gif
Wiem, że marudzę .... sad.gif
Może więc powiem, do czego doszłam sama:

1) muszę mieć plik index.htm
2) w nim odwołanie do pliku nazwa.php
3) w nazwa.php powinien być wpis:
- łączący z mysql i bazą
- tworzący pole do wprowadzenia loginu i hasła
- sprawdzający, czy istnieje w bazie login i czy hasło wprowadzone jest takie samo jak odpowiadające loginowi zawarte w bazie
-rozłączający w przypadku błędnych danych
- wykonujący kolejne zadanie w przypadku prawidłowych danych (w moim przypadku ma otworzyć kolejną stronę html)

I tu ma się moja praca zakończyć ( niewiele tego, ale dla mnie to ogromna góra)
Czy to co napisałam to poprawny sposób rozumowania ? Może o czymś zapomniałam ?

PS.
te skrypty, które przejrzałam, to w większości jakieś zaawansowane maszyny, a dla mnie potrzeba tylko faktu zalogowania, bez żadnych zabezpieczeń, i innych wodotrysków. No i muszę to zrobić sama (umieć zrobić, czyli rozumieć to co robię)

Julia
julia
biggrin.gif
Struktura jest prosta, jedna tabela, dwa pola: login i user, żadnych szyfrów. To miało być zadanie dla "blondynki"

skrypcik html zaraz sobie spróbuję przeanalizować< a potem zapytam< czy dobrze pojęłam
Project
no to ten plik index.html masz juz napisany (podziekuj kwiatkowi) smile.gif
W pliku nazwa.php musisz:
1) nawiazac polaczenie z baza danych (musisz znac rodzaj bazy danych)
2) Wybrac baze
3) Wykonac zapytanie
4) Odebrac wyniki
5) Zinterpretowac wyniki i wyswietlic cos uzytkownikowi (zalogowany lub blad logowania)

i to na tyle (tak w skrocie)

POZDRAWIAM
DeyV
A ja powiem tyle: Julio - jak na razie idzie Ci świetnie.
Mało kto, po paru godzinach spędzonych na studiowaniu tegoż forum, bez żadnych podstaw programowania potrafiłby stworzyć choćby fragment scenariusza, któy podałać. Tym bardziej, że jest w pełni poprawny.

Teraz spróbuję pokazać Ci, jak to działa.
Jak już wiesz, tworzysz plik html, który musi zawierać pola do wpisywania danych. Dane te, po naciśnięciu przycisku wyśłij bedą musiały 'pójść' do pliku nazwa.php, i tam coś z nimi musimy zrobić.
Być możę już do tego doszłaś, (jesli tak to sorki winksmiley.jpg ) ale do tego by to działało, potrzebne jest dokładnie to, co napisał kwiatek.
Tylko treraz o co tam chodziło....
<form ACTION="nazwa.php"> - to ujest początek naszego formularza, (choć to wcale nie oznacza, ze początek strony html, nic nie stoi na przeszkodzie, by przed nim dodać jeszcze jakieś napisy itp, ale to już pokaże ci później.
Login: <input TYPE="text" name="login"> pole pierwsze, o nazwie login, (co oznacza, że do pliku php 'pójdzie' zmienna o nazwie 'login'
<BR> - znak przejścia do nowej lini - ma znaczenie tylko dla wyglądu
Haslo: <input TYPE="password" name="haslo"> - podpis i nazwa pola drugiego, o nazwie 'hasło'. Możę już zauważyłaś, że różni się ono odrobinę od pola wyżej, mówię dokładnie o fragmencie type="password" . Oznacza on, ze w trakcie wpisywania jakichkolwiek danych do tego pola, nie bedą one widoczne na stronie, (zobaczymy gwiazdki)
<input TYPE="submit" name="loguj" value="Zaloguj"> - przycisk, który należy nacisnąć, po podaniu danych
</FORM> - koniec naszego formularza, który jednak nie oznacza wcale końca strony
members_of_mayday
a może to :

plik add.html ten plik słurzy do dodawania użytkowników do bazy
Kod
<FORM METHOD="post" ACTION="add.php">





<P><STRONG>Login:</STRONG><BR>

<INPUT TYPE="text" NAME="username" SIZE=25 MAXLENGTH=25></p>



<P><STRONG>Hasło:</STRONG><BR>

<INPUT TYPE="text" NAME="password" SIZE=25 MAXLENGTH=25></p>





<P><INPUT TYPE="SUBMIT" NAME="submit" VALUE=" dodaj >> "></P>





</FORM>




plik loguj.html ten plik słurzy do dodawania logowania itp
Kod
<FORM METHOD="post" ACTION="loguj.php">



<P><STRONG>Login:</STRONG><BR>

<INPUT TYPE="text" NAME="username" SIZE=25 MAXLENGTH=25></p>



<P><STRONG>Hasło:</STRONG><BR>

<INPUT TYPE="text" NAME="password" SIZE=25 MAXLENGTH=25></p>





<P><INPUT TYPE="SUBMIT" NAME="submit" VALUE="Login"></P>





</FORM>


plik loguj.php dzieki niemu sie logujemy sprawdzamy błedy itp

[php:1:21fe34e288]

<?

if ((!$username) || (!$password)) {
header("index.html");
exit;
}


$db_name = "nazwa bazy";
$table_name = "nazwa tabeli";

$connection = @mysql_connect("host", "nazwa usera", "haslo")
or die("brak polaczenia.");

$db = mysql_select_db($db_name, $connection)
or die("brak polaczenia.");

$sql = "SELECT * FROM $table_name
WHERE username = "$username" AND password = password("$password")
";

$result = mysql_query($sql)
or die ("brak polaczenia.");

$num = mysql_numrows($result);

if ($num != 0) {

$msg = "<P>Witaj jestes autoryzowany!</p>";

} else {

header("Location: index.html");
exit;
}




echo "$msg";


?>[/php:1:21fe34e288]

plik add.php dodajemy do bazy
[php:1:21fe34e288]<?php


if ((!$username) || (!$password)) {
header("Location: add.html");
exit;
}

$db_name = "nazwa bazy";
$table_name = "bazwa tabeli";

$connection = @mysql_connect("host", "user", "haslo")
or die("brak polaczenia.");

$db = mysql_select_db($db_name, $connection)
or die("brak polaczenia.");

$sql = "INSERT INTO $table_name
(username, password)
VALUES
("$username",password("$password"))
";

$result = mysql_query($sql,$connection)
or die("brak polaczenia.");


<br><br>Uzytkownik dodany.
<P><a href="add.html">dadaj innego</a></p>

</BODY>
</HTML>

?>[/php:1:21fe34e288]

to tyle powinno zadzialac
uboottd
"... a teraz pan uwazaj, bedzie trudne: do metalu"...

Wiec po kolei plik login.php:

Kod
<?php


Kazdy plik jest przekazywany przez serwer www do klienta tak jak jest zapisany w pliku, chyba ze zaznaczymy ze w tym miejscu zaczyna sie kod phpowy (wlasnie takim zapisem) wtedy zostanie uruchomiony interpreter php-a, i dalej do przegladarki bedzie przekazywane dokladnie to co wytworzy nasz skrypt.

Kod
$login = $_GET['login'];

$password = $_GET['password'];


W phpie nazwy wszystkich zmiennych zaczynaja sie od znaku $. Zmienne pochodzace z plikow ktore nas wywolaly (jak ten html od kwiatka) dostajemy w tablicy nazwanej _GET lub _POST w zaleznosci od uzytej metody przekazywania zmiennych, kwiatek jej nie podal wiec domyslnie jest w _GET. Tablica to taki worek z wartosciami, gdzie kazda wartosc ma jeszcze hmmm powiedzmy nazwe. w naszym przypadku interesuja nas wartosc dla login i password, i je przepisujemy sobie dla wygody do naszych zmiennych.

Kod
mysql_connect('nazwa serwera z baza','nazwa uzytkownika','haslo');


Teraz nawiazujemy polaczenie z baza danych przygotowana przez tego informatyka. Wszystko co wyglada mniej wiecej jak jakis wyraz z nawiasem otwierajacym zaraz za nim czyms w srodku i nawiasem zamykajacym jest wywolaniem funkcji, w nawiasach podane sa argumenty tej fukcji rozdzielone przecinkami. Jesli chcemy podac jakis tekst to musimy to zaznaczyc zamykajac go albo w cydzyslowie albo w apostrofach. Oczywiscie zastap podane przeze mnie teksty wlasciwymi ktore ma ci podac ten informatyk.

Kod
mysql_select_db('nazwa bazy');


Na podanym serwerze bazodanym na pewno istnieje wiele roznych baz danych, nam chodzi o pewna szczegolna, wiec tutaj podajemy ja nazwe. Od tej pory wszystkie zapytania beda kierowane wlasnie do niej.

Kod
$res = mysql_query("select login from tabela where login='$login' and password='$password'");


Tu dwie nowe rzeczy:
1. Zwykle funkcja zwraca jakas wartosc, czasem jej pozniej potzrebujemy, czasem nie. W tym przypadku potrzebujemy, wiec to co zwroca nam funckja mysql_query zapisujemy sobie w zmiennej $res
2. argumentem funkcji mysql_query jest zapytanie do bazy danych, ktore powinno nam wyciagnac dane o ktore nam chodzi. Zyjac w swiece mysqla mamy tak: Baza danych (wybrana juz przez nas w poprzednim punkcie) sklada sie z pewnej liczby tabel. Tutaj zalozylem ze ta o ktora nam chodzi nazywa sie 'tabela', jesli jest inaczej to zmien. kazda tabela sklada sie z column ktore maja swoje nazwy i wiersze ktore zawieraja dane w tych kolumnach. Wpisane przeze mnie zapytanie mozna przetlumaczyc mniej wiecej tak:
SELECT login (PODAJ nam zawartosc kolumny o nazwie login) FROM tabela (Z tabeli o nazwie tabela) WHERE login='$login' and password='$password' (Z TYCH WIERSZY dla ktorych zachodzi warunek ze w kolumnie login jest taka sama zawartosc co w zmiennej $login i jednoczesnie w kolumnie password jest taka sama zawartosc jak w zmiennej $password)
Wiec jesli podamy login i password ktore sa w tej tabeli to dostaniemy wiersz w ktorym one sa wpisane, jesli nie to dostaniemy wynik pusty.

Kod
$jest = mysql_num_rows($res);


Tutaj sprawdzamy ile wierszy nam zwrocilo to zapytanie ktore chcwile temu zapodalismy do bazy i:

Kod
if ($jest>0)

  print "Witamy w systemien";

else

  print "Brak dostepun";


instrukcja warunkowa if sprawdzamy czy warunek $jest>0 jest spelniony czy nie. print "tekst" wysyla nam tekst do przegladarki. Wiec jesli zapytanie do bazy zwrocilo nam jakies wiersze (nie interesuje nas w zasadzie jakie, tylko czy w ogole jakies byly) to oznacza ze podana para login/password jest zapisana w tej tabeli wiec wypisujemy powitanie. w przeciwnym przypadku (czyli jak warunek jest nie spelniony) wykonuj sie instrukcja zapisana po slowie else, w naszym przypadku print "brak dostepu"

Kod
?>


Pozostalo nam jeszcze tylko zakonczyc skrypt i juz.

PS. Wzielas pod uwage ze ten Twoj informatyk moze czytac to forum ? smile.gif

PS2. http://pl.php.net - wiekszosc manuala jest juz spolszczona

PS3. member_of_costam: troche przekombinowales winksmiley.jpg
members_of_mayday
czemu
tak jak byś niewiedział

members of mayday = imreza techno
DeyV
a teraz dalej - tu już zaczyna sie prawdziwy kod php. to brzmi dumnie, choć wcale nie jest trudniejsze od html. Tylko nie zapomnij, by ostatecznie usunąć komentarze z pliku, bo by się ten informatyk zdziwił smile.gif
[php:1:a8b1c7c41d]<?php //zaczynamy kod php
// ps. wszystko napisane tym kolorkiem to komentarze //

## konfiguracja połącznia z bazą danych
## ! przy wprowadzaniu danych pamiętaj, by pomiedzy " " nie było zbednych spacji ! ##
$user = "nazwa użytkownika"; //pomiędzy " " podajesz nazwę użytkownika bazy danych (musisz otrzmać ją od informatyka
$hasło = "hasło do bazy";
$nazwa_bazy = "nazwa_bazy";
$host = "localhost"; //adres komputera, na którym jest MySQL (najczęściej właśnie localhost

## łączymy sie z MySQL ##
mysql_connect($host,$user,$haslo) or die('brak połaczenia z bazą danych');
## wybieramy bazę danych ##
mysql_select_db($nazwa_bazy) or or die('NIe mogę wybrać bazy danych');

?>[/php:1:a8b1c7c41d]
koledzy nieco mnie wyprzedzili.... Ale nie bedę tego kasował... Może też się przyda
uboottd
Cytat
czemu

Bo dales kawal grzyba bez zadnego komentarza winksmiley.jpg

Cytat
tak jak byś niewiedział

members of mayday = imreza techno

YUCK!
julia
Spóźniona odpowiedź, bo musiałam się zająć swoimi zawodowymi obowiązkami.

Dziękuję wam wszystkim smile.gif

Nie spodziewałam się takiego odzewu, a o napisaniu przez Was skryptów, to nawet nie marzyłam. Teraz pozostanie mi tylko przyswoić sobie zasady działania tego co napisaliście, (czyli przełożyć z polskaiego na nasze hihihi) i już będę mogła samodzielnie spłodzić skrypcik.


Cytat
PS. Wzielas pod uwage ze ten Twoj informatyk moze czytac to forum ?  


Niech sobie czyta, w końcu wiedzę trzeba gdzieś zdobywać, no nie questionmark.gif Tym bardziej, że nie mam zamiaru kopiować waszych dzieł, tylko napisać samodzielnie (ze zrozumieniem tego co piszę - bo może się mnie zapytać jakie działanie ma dowolny fragment)

Cytat
... a teraz pan uwazaj, bedzie trudne: do metalu"...

smile.gif świetny kawał, jak go usłyszałam po raz pierwszy, to aż się popłakałam ze śmiechu

Cytat
A ja powiem tyle: Julio - jak na razie idzie Ci świetnie.  
Mało kto, po paru godzinach spędzonych na studiowaniu tegoż forum, bez żadnych podstaw programowania potrafiłby stworzyć choćby fragment scenariusza, któy podałać. Tym bardziej, że jest w pełni poprawny.


Dziękuję za uznanie, a co do tego forum, to chyba zostanę tu na dłużej, powoli zaczyna mi się podobać zabawa klawiszkami i logiką , a szef powiedział, że jak wykonam zadanie, to zrówna moją pensję z pensją informatyka, (zawsze to parę groszy więcej)

... !!! ... Noooo !!! .... wrzuciło mi ten post pomiędzy inne !!
hihihih ... już wiem dlaczego biggrin.gif :oops:
scanner
Cytat
Dziękuję za uznanie, a co do tego forum, to chyba zostanę tu na dłużej, powoli zaczyna mi się podobać zabawa klawiszkami i logiką , a szef powiedział, że jak wykonam zadanie, to zrówna moją pensję z pensją informatyka, (zawsze to parę groszy więcej)


Miło będzie zobaczyć kolejna damska twarz w naszym towarzystwie.
A swoją drogą zazdroszczę szefa. gdybym mial takiego, to moze sam bym spokojnie robil to co moj "informatyk", ktory kiedys chcial odemnie (WinNT) skopiowac kernel32.dll na inny komputer (win95), bo jakis blad tam wywalalo...
DeyV
Przy takim nastawieniu widzę, że czeka Was bardzo nieprzyjemne przeżycie...
Oglądanie stripteas'u zszokowanego informatyka... laugh.gif rolleyes.gif biggrin.gif
julia
fajna będzie widownia, siedem bab i dwudziestu dwu chłopa wraz z szefem (a on mu nie popuści gdyby się chciał wycofać )
julia
Cytat
 
[php:1:8a1d2452c6]
<?php
$res = mysql_query("select login from tabela where login='$login' and password='$password'");
?>
[/php:1:8a1d2452c6]

o ile dobrze rozumiem, to: skoro tabela stworzona dla mnie nazywa się "julia" i składa się z dwóch pól - "User" oraz "ID", gdzie ID ma stanowić hasło i jest auto_incerment (autonumeracja rosnąco ?) oznacza to, że powinnam zapisać powyższe w sposób następujący:

[php:1:8a1d2452c6]
<?php
$res = mysql_query("select login from julia where login='$User' and password='$ID'");
?>
[/php:1:8a1d2452c6]

Muszę niestety ćwiczyć "na sucho", bez dostępu do serwera i krorzystam z edytora na tutejszym forum aby sprawdzać składnię, bo notepad nie koloruje tekstu. (szkoda, edytor forum że nie numeruje wierszy : ))
Jeszcze byłoby fajnie wiedzieć jak interpretować kolory, ale do tego powoli dojdę sama
DeyV
Niestety, muszę zwrócić uwagę na pewny błąd w założeniu.
Zazwyczaj prosta struktra tabeli użytkowników wyglaa tak:
id | nazwa | hasło
dzięki temu każdy użytkownik może mieć dowlnie hasło - nadawanie hasła metodą autoincrement chyba nie byłoby zbyt rozsądne, bo na ile było by bezpieczne hasło 3, albo 4?

Co do edytorków - polecam Edit + http://www.editplus.com/download.html , jest wersja trial, bardzo miły programik, i świetnie koloruje.
julia
Cytat
Zazwyczaj prosta struktra tabeli użytkowników wyglaa tak:  
id | nazwa | hasło  
dzięki temu każdy użytkownik może mieć dowlnie hasło - nadawanie hasła metodą autoincrement chyba nie byłoby zbyt rozsądne, bo na ile było by bezpieczne hasło 3, albo 4?


Cóż, myślę, że nie chciało się informatykowi wstukiwać kolejnego pola, a ponieważ to tylko dla zakładu, więc względy bezpieczeństwa nie mają znaczenia.

Tymczasem dorwałam się do serwera, skorzystałam z okazji aby sprawdzić Wasze podpowiedzi, rezultat dość dziwny. Otóz, kiedy skrypt logowania wygląda tak:

[php:1:1a99d2a4ae]<?php
$user = $_GET["Login"];
$ID = $_GET["Haslo"];
$connection = mysql_connect("localhost", "admin", "");
$db = mysql_select_db("localbase", $connection);
$szukane = mysql_query("select * from julia where user='$user'and ID='$ID'");
$wynik = mysql_num_rows($szukane);
if ($wynik>0)

print "Zalogowanyn";
else
print "Loguj ponownien";
?>[/php:1:1a99d2a4ae]
to niezależnie od tego czy wpiszę dane istniejące w bazie, czy nie, logowanie jest odrzucone
jeżeli zmodyfikuję linię:
[php:1:1a99d2a4ae]<?php
$szukane = mysql_query("select * from julia where user='$user'");
?>[/php:1:1a99d2a4ae]
to nie ma znaczenia co wpiszę, i czy w ogóle coś wpiszę tak czy tak jestem zalogowana. Pomieszałam coś questionmark.gif
Idę grzebać w manualu (chyba od mysql'a)
uboottd
Moze troszeczke. Nikt ci nie powiedzial ze wielkosc liter w nazwach zmiennych gra role, tak wiec $user = $_GET['login'] i $user = $_GET['Login'] to nie jest to samo. Uzyj w dokladnie takiej pisowni jaka uzylas w pliku z formularzem.

Na podstawie objawow mam nastepujace przypuszczenie: w bazie jest wiersz w ktorym jest jakies ID i pusty ciag jako nazwa uzytkownika. Mozesz dla sprawdzenia wlozyc na chwile takie dwie linijki:

Kod
$row = mysql_fetch_array($szukane);

print_r($row);

zaraz po
Kod
$szukane = mysql_query("select * from julia where user='$user' and ID='$ID'");


pierwsza linijka pobierze pierwszy z brzegu wiersz zworocony przez zapytanie, natomiast funkcja uzyta w drugiej linijce sluzy do wypisywania wszytkich informacji o zmiennej podanej jako argument. W tym przypadku powinna ci napisac ze jest to tablica i poda jej zawartosc na stronce ktora tworzysz - oczywiscie jak juz zobaczysz o co chodzi po prostu usun te linijki. Wynik moze miec postac np:
Kod
Array ( [user] => test [ID] => 65 )

i to juz powinno ci wyjasnic co za kwiatki masz w bazie.

PS. Musze przyznac ze ambicji Ci nie brakuje winksmiley.jpg

PS2. Scenka bedzie musiala byc niezla: zszokowany zaambarasowany informatyk rozbierajacy sie na stole (bo chyba scene mu przygotujecie ?) a na widowni siedem piszczacych bab, 22 zawiedzionych chlopa i szef z szerokim usmiechem na twarzy popedzajacy delikwenta winksmiley.jpg Tylko moze powstrzymajcie przed wtykaniem mu banknotow za gumke bo na to nie zasluzyl winksmiley.jpg
julia
Cytat
Na podstawie objawow mam nastepujace przypuszczenie: w bazie jest wiersz w ktorym jest jakies ID i pusty ciag jako nazwa uzytkownika. Mozesz dla sprawdzenia wlozyc na chwile takie dwie linijki:

Kod
$row = mysql_fetch_array($szukane);

print_r($row);

zaraz po  
Kod
$szukane = mysql_query("select * from julia where user='$user' and ID='$ID'");


Zrobiłam jak radziłeś ale ku mojemu zdumieniu (zdurnieniu) nie dostałam żadnej odpowiedzi. Żadnej! Próbowałam również wstawiać print_r($row); tuż przed i tuż za komunikatem, króry mi się dotychczas wyświetla (!!) no i nic, żadnej zmiany.
Tymczasem podglądnęłam tabelę na serwerze (MySQL-Front) okazuje się, że miałeś rację są puste pola, tabela składa się z trzech (nie dwóch pól) ID (autonumeracja) User i Kod. wypełnione są trzy pola w kolumnie User i pięć pól w kolumnie Kod. tymsamym otrzymaliśmy puste pola User.
Czyżby kolega się zabezpieczał na wypadek, gdybym chciała jednak dać sobie radę ze skryptem (wadliwie działający się przecież nie liczy )
Zostaję dziś w biurze na noc aby w spokoju popracować nad tym zadaniem. Mam nadzieję, że mnie nie przerośnie smile.gif

PS. Duże i małe literki sprawdzałam są tak jak powinny być !
uboottd
Spokojnie, to oznacza dokladnie tyle, ze badana zmienna jest pusta, czyli zapytanie nie zwraca z bazy zadnych wierszy, mysql_num_rows daje wtedy 0 i odrzuca probe zalogowania. Czyli "kasa gra, tylko pieniedzy nie ma" smile.gif

Dobra, skoro wyglad tabel juz nie jest owiany tajemnica to tu juz jest uwaga: szukaj w tablei po kolumnach user i kod a nie user i ID - taka konstrukcja tabeli jest juz mniej wiecej typowa. Zwykle wystepuje jakies ID ktore jest po prostu numerem uzytkownika (w skryptach najczesciej jest o wiele latwiej operowac numerem uzytkownika niz jego loginem), jego login i haslo zwane tutaj 'kod'. W normalnych zastosowaniach moga jeszcze wystapic dane uzytkownika (jego imie, nazwisko, adres, email itp.) oraz status (aktywny/zablokowany..)

Zmiana warunkow w szukaniu powinna juz pomoc, jesli nie to mozesz sprobowac jeszcze czegos takiego:

jak masz linijke:
Kod
$szukane = mysql_query("select * from julia where user='$user' and ID='$ID'");


to mozesz ja skopiowac tak zeby miec dwie takie same pod rzad i jednej zminic poczatek na:

Kod
print("select * from julia where user='$user' and ID='$ID'");

$szukane = mysql_query("select * from julia where user='$user' and ID='$ID'");


wtedy po odpaleniu skryptu zobaczysz dokladnie zapytanie jakie dajesz do bazy - to pozwoli Ci wylapac czy przekazujesz w zapytaniu odpowiednie wartosci do porownania, czy np. masz tam ciag pusty. Co prawda sam nie uzywam mysql-fronta, ale zakladam ze ma on mozliwosc puszczenia zapytania do bazy. Majac wypisane Twoje zapytanie ze skryptu mozesz skopiowac je do mysql-fronta i badac co ono zwraca, poprawiac je i wersje ostateczna uzyc w skrypcie, zamieniajac tylko wartosci porownywane odpowiednimi zmiennymi.

Tak w ogole to trzymam kciuki - jestes coraz blizej smile.gif
julia
Witaj Uboocik smile.gif

Testowanie zapytań w MySQL-Front, to był dobry pomysł, dziękuję smile.gif
ale oto jakie mam wyniki:
- założyłam sobie sama bazę i tabelkę o nazwach odpowiednio julia i test
-utworzyłam trzy pola: autonumerację, user i haslo a potem wpisałam przykładowy login i hasło
po pierwsze, kiedy we froncie podałam zapytanie w postaci:
Kod
select * from test where user='julia' and haslo='nova'

(składnia przekopiowana żywcem z podsuniętych na forum skryptów)
to okazało się, że user wyświetliło mi się na ciemnogranatowo co jak domyśliłam się stanowi znak, że jest to wyraz zarezerwowany w mysql-u do jakichś "wyższych celów. Zmieniłam więz nazwę kolumny na user1 i wtedy się okazało, że nie istnieje kolumna julia więc zamieniłam miejscami żądane i kolumny do postaci:
Kod
select * from test where 'julia'=user1 and 'nova'=haslo

Problem ustąpił (chyba składnia "mojego" mysql-a nie może się różnić od innych? Może to Front udaje dziwaka ?) baza zwróciła mi wiersz z moimi danymi - sukces biggrin.gif

wkomponowałam powyższe zmiany do skryptu logowania a wtedy (interpreter/parser/debugger... co to jest questionmark.gif ) odpowiedział mi komunikatem:
Cytat
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:usrapachehttpdhtmlplog.php on line 7

jako wynik działania:
[php:1:d5151fccff]<?
$wynik = mysql_num_rows($szukane);
?>
[/php:1:d5151fccff]

(znowu składnia ?)

Pozdrawiam i życzę miłego dnia (byle do piątku smile.gif )

edit:

Uporałam się z ostatnim błędem (mysql_num_rows() ) poeksperymentowałam z poleceniem echo i podglądnęłam zawartość zmiennej zwróconej przez mysql_query() nieodmiennie i stale, bez zależności co wypisuję zwraca komunikat Resource id #3
chyba pójdę się przespać, bo chyba nic mądrego nie wymyślę kiedy powieki mi opadają smile.gif
uboottd
Hejka winksmiley.jpg

Wiec po kolei:

Z tymi kolumnami to totalne zaskoczenie 8O ...
Nie ma znaczenia kolejnosc przy porownywaniu (znaczy user='julia' czy 'julia' = user to jest to dokladnie to samo), natomiast skoro powiedzial ze nie zna kolumny julia to wedlug mnie przyczyna moze byc albo to ze nie napisalas apostrofow wokol slowa julia (czyli bylo user1 = julia ) albo uzylas odwrotnego apostrofu (czyli bylo user1 = `julia`), oba te zapisy oznaczaja porownanie dwoch kolumn i mysql mial racje twierdzac ze nie ma kolumny julia.

Slowo user faktycznie jest zastrzezone w mysql-u. Ogolnie w sql-u mozna uzywac pewnego zestawu fukcji ( np. sin(kat) - zwraca sinusa z wartosci w kolumnie kat) i wszystkie slowa bedace nazwami takich funcji sa zastrzezone. Jesli ktos juz musi uzyc slowa zastrzezonego to wtedy moze ujac go wlasnei w odwrotne cudzyslowy i wtedy mysql traktuje to jako na pewno nazwe kolumny nie muszac sie domyslac czy mas zna mysli kolumne czy funkcje.

php jest jezykiem interpretowanym (znaczy tekst skryptu jest analizowana i wykonywana jednoczesnie), wiec to co to robi sie nazywa sie interpreterem (ale zaskoczenie, nie ? smile.gif ), natomiast interpreter sklada sie z kilku czesci, m.in. z parsera, ktorym rozbija tekst programu na zrozumiale dla niego kawalki. Natomiast debuger to jest takie zwierzatko co bierze skrytpt/program i umozliwia wykonywanie go linia po lini, podgladanie na biezaco zmien w zmiennych itp.

Ten "Warning:" jest bardzo typowym objawem. Oznacza on dokladnie tyle, ze funkcji mysql_query ktorej dotyczy ta instrukcja ktora ten blad wygenerowala (czyli u Ciebie ten jedyny mysql_query jaki masz) nie udalo sie wykonac tego zapytania poprawnie, najczesciej dlatego, ze w zapytaniu jest blad.

W takim razie nastepne dwie przydatne funkcje:
mysql_errno() - zwraca numer bledu jaki wystapil podczas wykonywania zapytania,
mysql_error() - jw. tylko nie numer a tekst.

Dopisz (mozesz nawet na stale w sumie) zaraz po mysql_query...
cos takiego:

Kod
if (mysql_errno())

  print mysql_error();


i teraz jak skrypt bedzia mial klopoty z zapytaniami to od razu Cie o tym grzecznie poinformuje. Strzelam ze przy przenoszeniu zgubil cie sie jakis znaczek i to przez to.
julia
Witam ponownie smile.gif

Tym razem nie będę zanudzać prośbami o wyjaśnianie tajemnic php i MySQL'a smile.gif

Spieszę tylko podzielić się radosną dla mnie nowiną: Nie będę musiała robić streap'a, zajmie się tym nasz informatyk smile.gif .. (hihi)
Dzięki Wam i Waszej cierpliwości oraz życzliwości nauczyłam się jak napisać poprawny (acz prosty) skrypt obsługujący proste zapytania do bazy, oraz zdobyłam nowe zainteresowanie smile.gif (co oznacza, że na forum, ku Waszemu utrapieniu, pojawią się kolejne wątki)

Pragnę podziękować wszystkim, którzy postanowili mi pomóc !
Project, DeyV, Kwiateek, members_of_mayday, uboottd, oraz specjalne podziękowania dla scanner'a za gościnne zaproszenie i zachętę do pozostania na forum.

wyspana i uśmiechnięta julia.
scanner
Cytat
Nie będę musiała robić streap'a, zajmie się tym nasz informatyk smile.gif .. (hihi)
Może jakis zapis video? W sam raz do pośmiania się w większym towarzystwie np. na urodzinach babci smile.gif)
Cytat
Dzięki Wam i Waszej cierpliwości oraz życzliwości nauczyłam się jak napisać poprawny (..) oraz zdobyłam nowe zainteresowanie (...) co oznacza, że na forum (...) pojawią się kolejne wątki)
Tutaj jest taka zasada niepisana, że w momencie, gdy osoba pytająca wykazuje choć cień zainteresowania i własnej inicjatywy, to się tej osobie pomaga, czasem nawet wyciągając za uszy. Twoim dodatkowym atutem jest niewątpliwie płeć - mało mamy tutaj "rodzynków",. więc tym bardziej trzeba o nie dbać smile.gif
Cytat
specjalne podziękowania dla scanner'a za gościnne zaproszenie i zachętę do pozostania na forum.
jako przystało na dobrze wychowanego, pochylę głowę w podziękowaniu i odpowiem, iż cała przyjemność po mojej stronie.
uboottd
Hejka winksmiley.jpg

Gratulacje za wygrany zaklad. A juz zaczynalem sie martwic ze jednak informatykowi udalo sie wygrac i siedzisz cicho w jakims kacie nie odzywajac sie do swiata... No ale na szczescie tak nie jest. Choc w zasadzie powinienem dopingowac informatykowi... (w koncu w zasadzie bratnia dusza...) Czekam na przynajmniej opis wydarzenia pt. jego wystep winksmiley.jpg

PS. Tak z ciekawosci: czym sie zajmujesz zawodowo ?
julia
Panowie!
Na zapis video nie ma co liczyć, (ja bym też nie pozwoliła, więc muszę zachować się wyrozumiale), ale opiszę Wam wszystko z detalikami, jak się już pokaz odbędzie smile.gif (czyli po sobocie)
Miło mi, że się o mnie martwiłeś, uboocik:) aluzję zrozumiałam:D (nie dawałeś mi nawet procenta szans ... hihihihihi)
Otóż rozczaruję Cię: WYGRAŁAM CZTERY DNI PRZED TERMINEM !!
Między innymi dzięki Tobie:)
Pytałeś o zawód. Z wykształcenia jestem ekonomistą, a pracuję jako fakturzystka. Tyle, że teraz jestem na najlepszej drodze do zmiany stanowiska pracy (mam trzy miesiące na pojęcie zasad php i MySQL_a .. smile.gif (zdaje się, że popełnię bigamię i poślubię dodatkowo dwa manuale... hihihihihi)
uboottd
No wiesz co, o co Ty mnie posadzasz ? Powinienem kibicowac informatykowi, bo sam z wyksztalcenia jestem informatykiem, ale chyba swoim zaangazowaniem pokazalem komu naprawde kibicuje ?

Powodzenia w nauce winksmiley.jpg
julia
smile.gif
Jeszcze raz ogromne dzięki.
Temat póki co wyczerpany proponuję zamknąć wątek smile.gif

P.S.
Sądząc po ilości odwiedzin tego wątku, to moja propozycja założenia żłobka nie jest chyba bezzasadna. Wątki tego typu, mogłyby być osadzane tam jako coś w rodzaju "php w przykładach dla raczkujących "
smile.gif
KaMeLeOn
Zostałem poproszony przez autorkę tematu, więc spełniam jej życzenie...

EOT
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.