[PHP] Kilka pytań oraz problem ze skryptem rejestracyjnym


(Ryan370z) #1
  1. Jaką instrukcję muszę znać, jeśli chciałbym DODAĆ do pola w tabeli wartość? Przykładowo mam w polu 'jeden' i chciałbym dodać do niej ', dwa', co dałoby 'jeden, dwa'?

  2. Jeśli znam już tą instrukcję, chcę to wykorzystać do formularza rejestracyjnego.

skrypt-logowania-sesja-t406308.html jak tam miałem zrobić

Mam tabelę 'users' , a w niej pola

id '1,2'

nick 'larek12','banany'

[...]

lvl ''32,43'

I teraz nowy user o nicku lizaki chce się zarejestrować. Jak miałaby wyglądać taka pętla, w która dodaje do tych pól domyslne wartości (zeby to tak wyglądało):

id '1,2,3'

nick 'larek12','banany','lizaki'

[...]

lvl ''32,43,1'

?


(Damgora) #2

mówimy o dodawaniu do bazy danych?

http://www.sql.info.pl/oracle-sql-insert

http://www.w3schools.com/sql/sql_insert.asp

Drugie pytanie - zapytania do bazy umieszczasz w stringu jako argument funkcji mysql_query() np.

mysql_query('INSERT INTO table_name VALUES (value1, value2, value3,...)');

(Ryan370z) #3

o sql insert akurat wiem. Interesuje mnie jak dodać do istniejącej już wartości w polu kolejną wartość.

http://www.w3schools.com/sql/sql_update.asp Jeśli chcę dodać w którymś polu do 'jeden' ', dwa' to też mam skorzystać z sql update?

PS: tak mówimy o bazie danych i mysql.


(Krzkaczor) #4

Tak -> http://dev.mysql.com/doc/refman/5.0/en/update.html

Najlepiej utwórz sobie zapytanie phpmyadminem a potem skopiuj do programu.


(Sitemaster) #5

Ry4n370z, ale jeżeli dobrze zrozumiałem to był by to beznadziejny pod względem organizacji i wydajności pomysł.

weź jak człowiek zrób tabelę 1 user = 1 rekord


(Grzelix) #6

Dodawania do tej samej komórki drugiej danej jest bardzo nie optymalne w późniejszym zarządzaniu bazą danych. Takie działanie narusza 1NF http://pl.wikipedia.org/wiki/Postać_normalna_(bazy_danych)

A jeśli już na siłę chcesz to zrobić to tak poleceniem UPDATE . Pobierasz obecną wartość i dopisujesz kolejną.


(Krzkaczor) #7

Nie zastanawiałem się co Ty chcesz zrobić ale po przeczytaniu Twojego pierwszego posta to zdecydowanie powinieneś douczyć się projektowania i zarządzania bazą danych :wink:


(Ryan370z) #8

Bo w tym topicu:

skrypt-logowania-sesja-t406308.html

Popradzili mi, aby w jednej tabeli trzymać dane, czyli tak:


'users'


id | 1, 2, 3

login | zenek, laluś, ciota

[..] |

lvl | 22, 33, 23

No taki zarys jest i teraz chcę żeby po wysłaniu danych z formularza rejestracyjnego skrypt dopisywał dane do odpowiednich pól. Dlatego chciałem znać polecenie, dla którego mogę to dodać.

Wszedłem do linka z wikipedii i nic nie kapuje :p. Tam nawet wzór na pole trapeza wyglada jak nie wiem co ;p


(Damgora) #9

W jednej tabeli to nie znaczy w jednym rekordzie (wierszu tabeli)!

Twój przykład w pierwszym poście tamtego wątku zakładał, że każdy user będzie miał osobną tabelę np.

SELECT buty FROM '.$_POST['nick'].';'

za FROM powinna znaleźć się nazwa tabeli, a skrypt podstawia tam nick usera, więc na tej zasadzie każdy user musiałby mieć swoją tabelę.

dodawaj po prostu przez INSERT INTO, ale do jednej tabeli (1 user = 1 rekord)


(Ryan370z) #10

Tak zakładałem, ale mam tak nie robić (dla 1 usera 1 tabela). Tak jest podobno niepraktycznie.


(MaXDemage) #11

@Ry4n370z

Owszem masz nie robić tak że 1 user = 1 tabela.

Masz robić tak:

jest 1 tabela w której jest "jakaś" liczba rekordów. Jak patrzysz na tabele to widzisz kolumny i wiersze, prawda? Więc rekord to wiersz. Każda kolumna to jakaś własność. Tabela jak wspomniałem może mieć wiele wierszy ale określoną wcześniej ilość kolumn.

Stad łatwo dojść, że każdy użytkownik a będzie ich pewnie dużo jest jednym wierszem (rekordem) i posiada ograniczoną liczbę właściwości (kolumn).

1 tabela = wiele userów

1 user = 1 rekord (wiersz) w tabeli

Jak tak stworzysz bazę, to dodawanie nowych userów będzie tak łatwe jak krojenie pokrojonego chleba ;p


(Ryan370z) #12
<?

         #Sprawdź, czy pola są poprawnie wypełnione

        if(!($_POST['Nick'] && $_POST['Pass'] && $_POST['Passpowtorka'] && $_POST['mail']))

         echo(''); 

        elseif($_POST['Pass'] != $_POST['Passpowtorka'])

         echo('');

        else{  

             $lacz=[..];

             mysql_select_db("omegaforce_c0_pl"); #Wybierz bazę

             $pass= md5("$pass");

             $zapytanie= "SELECT 'liczbaid' FROM 'users'";

             $wykonaj= mysql_query($zapytanie);

             $id= mysql_fetch_array($zapytanie);

             $dodaj='

             UPDATE users 

             SET .id = $id.",",

             Nick.='.$_POST['nick'].'.",",

             pass.=$pass.",",

             mail.='.$_POST['mail'].'.",",

             kasa.=1000.",",

             sila.=1.",",

             zrecznosc.=1.",",

             celnosc . = 1.",",

             refleks . = 1.",",

             top . = 1.",",

             arena . = 1.",",

             bron . = 1.",",

             rekawice . = 1.",",

             helm . = 1.",",

             buty . = 1.",",

             kamizelka . = 1.",",

             tarcza . = 1.",",

             lvl . = 1."," ';

             $wykonaj2= mysql_query($dodaj);

             echo('');

            }

        echo('');

        echo(' ');

        echo('');

        echo('');

        echo('');

        echo('');

        echo('');

        echo('');

        echo('');

        echo('');

        $pass= 'lol';

        $pass= md5("$pass");

      ?>[/code]

Poprawiłem kod od skryptu rejestracji. Wpisuje na stronie dane konieczne do rejestracji, lecz w panelu phpadmin nie widzę dodanych danych.

http://img148.imageshack.us/i/beztytuusa.jpg/ Tutaj widać że nic nie jest dodane do tabeli 'users'.

PS: Przepraszam za double posting ale jakbym edytował poprzedni post to by nikt tego nie zauważył i nikt by nie wszedł :D.


(MaXDemage) #13

Pomijając różne inne dziwne błędy dzięki którym to może nie działać....

To polecenie UPDATE zmienia (updejtuje) elementy już istniejących rekordów.

Jeśli chcesz dodać rekord musisz użyć INSERT (i odpowiedniej składni).


(Ryan370z) #14

No tak, ale skrypt ma dodawać dodatkowe dane do istniejących już rekordów (czyli do 'jeden' dodaje 'dwa' i rekordem jest 'jeden dwa'). Więc jak skorzystam z update będzie tak jak pisali mi w tym topicu skrypt-logowania-sesja-t406308.html . INSERT INTO nadpisuje rekord, tak?.

users

id 1,12,23,66,1

sila 2,13,11,55,2

[..]

login a , b, c, d,

(tyle że ja mam jedną tabelę).


(Airborn) #15

Ry4n370z , proszę poprawić tytuł tematu na konkretny, mówiący dokładnie o problemie. W przeciwnym razie temat zostanie usunięty.


(Damgora) #16

Nie.

W tabeli może być dowolna liczba rekordów, a INSERT INTO dodaje kolejny.

Twoja tabela powinna wyglądać (+-) tak:

users:

id	|sila |login

-------------------

1 |2 |aad

2 |13 |adf

3 |11 |ffg

4 |55 |sdfg

5 |2 |dsf

i powtórzę 1 user = 1 rekord (tzn. wiersz w tabeli). W Twoim przykładzie wszyscy userzy zawierają się w jednym rekordzie. i teraz wykonamy zapytanie: INSERT INTO users (sila, login) VALUES (34, 'rrr') które doda nowy rekord (nowego użytkownika) (zakładam, że id posiada argument AUTO_INCREMENT (czyli uzupełni się samo kolejną liczbą)) efekt powinien być taki:

users:

id	|sila |login

-------------------

1 |2 |aad

2 |13 |adf

3 |11 |ffg

4 |55 |sdfg

5 |2 |dsf

6 |34 |rrr

Poprzez UPDATE możesz modyfikować rekordy, które już istnieją (np. zmienić login albo wartość siły konkretnego usera)


(Ryan370z) #17

No dobrze, zrobiłem taką instrukcję:

$dodaj="INSERT INTO `users` (`id`, `login`, `pass`, `mail`, `kasa`, `sila`, `zrecznosc`, `celnosc`, `refleks`, `top`, `arena` ,`bron`, `rekawice`, `helm`, `buty`, `kamizelka`, `lvl`, `bron`) VALUES ('".$_POST['login']."', '".$_POST['pass']."', '".$_POST['mail']."', '1000', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1')";

Wszystko działa, a skrypt nie dodaje danych do bazy. Parametry łączenia z bazą są prawidłowe i powinno działać.

<?

         #Sprawdź, czy pola są poprawnie wypełnione

        if(!($_POST['Nick'] && $_POST['Pass'] && $_POST['Passpowtorka'] && $_POST['mail']))

         echo(''); 

        elseif($_POST['Pass'] != $_POST['Passpowtorka'])

         echo('');

        else{  

             $lacz=mysql_connect("mysql.cba.pl", "...", "..." ); # Łącz

             mysql_select_db("omegaforce_c0_pl"); #Wybierz bazę

             $pass= md5("$pass");

             $dodaj="INSERT INTO `users` (`id`, `login`, `pass`, `mail`, `kasa`, `sila`, `zrecznosc`, `celnosc`, `refleks`, `top`, `arena` ,`bron`, `rekawice`, `helm`, `buty`, `kamizelka`, `lvl`, `bron`) VALUES ('".$_POST['login']."', '".$_POST['pass']."', '".$_POST['mail']."', '1000', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1')";

             $zrob= mysql_query($zrob);

             echo('');

            }

        echo('');

        echo(' ');

        echo('');

        echo('');

        echo('');

        echo('');

        echo('');

        echo('');

        echo('');

        echo('');

      ?>[/code]

(Krzkaczor) #18
$zrob= mysql_query($zrob);

powinno byc

$zrob = mysql_query($dodaj);

PS: Twój kod ssie :wink: Strasznie nieczytelny. Spróbuj nazywać jakoś normalnie zmienne (może z angielskiego). Zmienna z zapytaniem moze nazywać się np. sql.


(Ryan370z) #19

Skrypt nadal nie działa ;( Uzupełniłem go o Twoją poprawkę, ale nadal nie działa :(. Noobek ze mnie w php :slight_smile: Więc wypełniam formularz na stronie i w panelu pma nic się nie zmienia:

Aha jakby co to dodane są parametry łączenia z bazą :smiley:


(Damgora) #20

tu też jest błąd.

chcesz uzupełnić 18 pól, ale podajesz tylko 17 zmiennych.

Poczytaj o INSERT INTO jeszcze.

W pierwszym nawiasie (przed VALUES) podajesz w jakich kolumnach pola będziesz uzupełniał, a w drugim (za VALUES) podajesz dane do dodania do tych pól w nowym rekordzie. Jeśli pominiesz pierwszy nawias to podajesz dane do każdej kolumny w tabeli we właściwej kolejności.

a rozwiązanie jest proste - albo usuwasz id z pierwszego nawiasu, albo w drugim na początku podajesz jego wartość.

Wracając do mojego poprzedniego postu - id uzupełni się samo jeśli przy tworzeniu tabeli podałeś mu argument AUTO INCREMENT, a pewnie tego nie zrobiłeś (można to zmienić w już istniejącej tabeli poprzez ALTER TABLE albo z phpMyAdmina)

kliknij ołówek przy id i ustaw mniej więcej tak:

sql1.png

potem ustaw id jako PRIMARY w indeksach