logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PHP/MYSQL - Formularz, dodanie nazwy usera i losowego, unikalnego ciągu cyfr

iastemnz 17 Lip 2012 17:08 2726 9
REKLAMA
  • #1 11115943
    iastemnz
    Poziom 9  
    Posty: 6
    Witam!

    Mam do zrobienia projekt strony z połączeniem do bazy danych, mam juz wszystko na serwerze, polączenie do bazy istnieje, posiadam formularz w ktorym dodaje rekordy i własnie od kilku godzin staram się obmyślić jak dodać dwie rzeczy:

    Po pierwsze chcialbym aby w rekordzie bazy danych zapisywał sie aktualnie zalogowany user.

    Po drugie chcialbym wygenerowac losowy unikatowy numer (musi być inny dla kazdej pozycji! - jest to numer nadawany ksiązką) i rowniez wpisac go do bazy danych.


    Troche kodu:

    Plik ktory dodaje rekordy do tabeli (chcialbym aby uzytkownik i bip robily wlasnie to co opisalem powyzej)
    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    Tutaj plik formularzu (Imie czyli uzytkownik poki co jest dodawany manualnie, a numeru bip wcale nie ma - bo nie moze byc)
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jezeli ktos mialby jakis pomysł serdecznie proszę o opisanie go :P

    Pozdrawiam ;)
  • REKLAMA
  • #2 11116033
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    iastemnz napisał:
    Po pierwsze chcialbym aby w rekordzie bazy danych zapisywał sie aktualnie zalogowany user.
    Zalogowany do czego?
    iastemnz napisał:
    Po drugie chcialbym wygenerowac losowy unikatowy numer (musi być inny dla kazdej pozycji! - jest to numer nadawany ksiązką) i rowniez wpisac go do bazy danych.
    Nie wystarczy autoinkrementujący się klucz? Losowy może nie jest, za to unikatowy - jak najbardziej.

    W przeciwnym razie - możesz użyć którejś z funkcji MySql: UUID() aby wylosować unikalny identyfikator składający się z cyfr i liter, albo RAND() do wygenerowania losowej liczby, tylko wtedy nie masz zapewnionej unikalności więc musisz losować i sprawdzać dopóki nie wylosujesz unikalnej.

    PHP też potrafi wygenerować unikalny identyfikaor i oczywiście ma też funkcję losującą liczby, z zastrzeżeniem jak powyżej...
  • REKLAMA
  • #3 11116081
    iastemnz
    Poziom 9  
    Posty: 6
    Chodzi o usera aktualnie zalogowanego na stronie www (ten ktory wypełnia formularz).

    Liczba musi byc unikatowa (nie moze sie powtarzac, tak jak nie ma dwóch dokladnie takich samych ksiązek).

    O ile uzycie jakiegos generatora znaków w php to nie problem, ale nie mam pojecia jak to potem zapisac do bazy danych ;/
    Mogłbys dokladniej opisac o co chodzi z UUID? Podczas wysyłania danych z formualarza wygeneruje mi sie w bazie danych takze losowy numer ID w zadanym rekordzie, tak ze potem wystarczy go odczytac? W jaki sposob to zrobic?

    Pozdrawiam.
  • #4 11116109
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    iastemnz napisał:
    Chodzi o usera aktualnie zalogowanego na stronie www (ten ktory wypełnia formularz).
    To zależy od sposobu, w jaki masz rozwiązane logowanie. Ja bym w momencie udanego zalogowania zapamiętywał nazwę użytkownika w tablicy $_SESSION, która nie "ginie" między kolejnymi wywołaniami jak $_POST, i potem wstawiał tą nazwę do bazy razem z rekordem. Tablicę można niszczyć ręcznie przy wylogowaniu.
    iastemnz napisał:
    O ile uzycie jakiegos generatora znaków w php to nie problem, ale nie mam pojecia jak to potem zapisac do bazy danych ;/
    Tutaj ja nie wiem gdzie jest problem - jak chcesz to robić w PHPie to losujesz do zmiennej i po prostu dodajesz kolejne pole do instrukcji INSERT.
  • REKLAMA
  • #5 11116170
    iastemnz
    Poziom 9  
    Posty: 6
    Logowania nie robilem sam, sa to skrypty z PHP-Fusion, wyglada to tak:


    W jaki sposób zczytać stąd usera i dodac go do bazy w pliku "dodaj.php"?


    Kod: PHP
    Zaloguj się, aby zobaczyć kod



    Udało mi sie ogarnąc skrypt generowania losowych znaków, generuje je, ale baza danych wykrzykuje błąd...

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files (x86)\WebServ\httpd\bip.php on line 22

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files (x86)\WebServ\httpd\bip.php on line 22

    306h <---- wylosowane id

    skrypt:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    Jak to poprawić żeby działało?
    Pozdrawiam.
  • #6 11116551
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    iastemnz napisał:
    sa to skrypty z PHP-Fusion
    Nie znam, nie używam... Jeżeli możesz edytować ten skrypt logowania, to metodą prób i błędów wyświetlaj (echo, var_dump) w różnych miejscach zmienne aż znajdziesz tą z użytkownikiem. Może to ta $userdata['user_name']?
    Jak już ją znajdziesz, to tak jak pisałem - przypisz do tablicy $_SESSION tą zmienną, a potem użyj jej w poleceniu INSERT. Nie zapomnij dać session_start(); na samym początku plików, w których wykorzystujesz tą tablicę.

    Możesz też spróbować zrobić var_dump($_SESSION) w miejscu gdzie wstawiasz rekordy, może użytkownik został już wcześniej zapamiętany.

    iastemnz napisał:
    Udało mi sie ogarnąc skrypt generowania losowych znaków, generuje je, ale baza danych wykrzykuje błąd...
    Nie baza danych, a serwer PHP, i nie błąd, a ostrzeżenie - przy ostrzeżeniach kod powinien działać... Tak naprawdę zamiast wybierać wszystkie pola, robić z nich tablicę mysql_fetch_array i zliczać ilość wierszy w pętli, możesz od razu użyć polecenia mysql_num_rows do zliczenia wierszy. Spróbuj zrobić tak jak w przykładzie na podanej stronie - robisz też mysql_select_db w swoim kodzie??

    Nawiasem mówiąc, wszędzie sugerują, żeby zamiast przestarzałego mysql... używać MySQLi, na podanym adresie znajdziesz czerwoną tabelkę z taki ostrzeżeniem i linkiem do "nowszej" wersji. Komendy są podobne, możesz spróbować przerobić swój kod.

    Ta ostatnia pętla while() też jest jakaś dziwna - jeżeli wykonuje się gdy sprawdz($bip)==0, to po co te dwa ify w środku?? Użyj raczej:

    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #7 11116690
    iastemnz
    Poziom 9  
    Posty: 6
    Z tym losowym wibieraniem znakow juz sobie poradzilem, ale nadal nie wiem co robic z tym uzytkownikiem ;/, w jaki sposob przypisac do tablicy i jak tego potem uzyc w dodawaniu rekordów?
  • REKLAMA
  • #8 11117357
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    W tym kodzie do logowaniu musisz odnaleźć początek strony i wstawić tam:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    Jeżeli będziesz dostawał warning "headers already sent", to znaczy że nie umieściłeś tego na początku strony...


    Potem odnaleźć zmienną, w której jest nazwa użytkownika i przypisać ją do tablicy $_SESSION, strzelam:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod



    Na stronie gdzie masz polecenie INSERT, na samej górze podobnie umieścić:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    a polecenie zmodyfikować na coś w wstylu:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #9 11117439
    raptor32
    Poziom 11  
    Posty: 8
    Tak to jest ze skryptami pisanymi przez kogoś innego i wklejanymi :). A wracając do problemu to najpierw wyświetl sobie zmienną $action_url. W pliku do którego się odwołuje przepisz w nim wartość z tablicy $_REQUEST['nazwa_zmiennej'] do zmiennej sesyjnej (jeśli zależy ci na zapisaniu użytkownika który po zalogowaniu i wykonaniu jakiejś czynności ma się dodać do bazy )

    session_start();
    $_SESSION['twoja_nazwa'] = $_REQUEST['nazwa_zmiennej'];

    Jeśli od razu chcesz dodać go do bazy po zalogowaniu to w skrypcie piszesz coś w guście

    $conn = mysql_connect('host', 'user', 'password');
    mysql_select_db('nazwa bazy');

    $mojaZmienna = $_REQUEST['nazwa_zmiennej'];

    /*$mojaZmienna - tu dodaj fragment dotyczący walidowania tej zmiennej*/

    $addSql = "insert into tabela(`nazwa_kolumny`) values ('{$mojaZmienna}')";

    mysql_query ( $addSql, $conn );

    I już. Oczywiście to tylko przykład poglądowy można go rozwinąć według własnych potrzeb lub oprzeć skrypt o np bibliotekę pdo.
  • #10 11117832
    iastemnz
    Poziom 9  
    Posty: 6
    Robilem wedlug wskazówek, ale w tej chwili zamiast nazwy uzytkownika, do rekordów tabeli wpisuje się "???".

    Mam jeszcze jeden plik o nazwie "profiles", odpowiedzialny jest on miedzy innymi za wyswietlenie statusu uzytkownika na stronie, jednak nadal gdy w tym pliku staram sie przypisac zmienna do SESSION wychodzi to samo.

    kod pliku (po poprawce):
    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    ogolnie to dzieki za pomoc i pozdrawiam :P

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukuje sposobu na dodanie do bazy danych aktualnie zalogowanego użytkownika oraz unikalnego, losowego numeru dla każdego rekordu w formularzu PHP/MySQL. Odpowiedzi sugerują wykorzystanie sesji PHP do przechowywania nazwy użytkownika oraz funkcji MySQL, takich jak UUID() do generowania unikalnych identyfikatorów. Użytkownik powinien zainicjować sesję na początku skryptu oraz przypisać nazwę użytkownika do zmiennej sesyjnej, aby móc ją później wykorzystać w zapytaniu INSERT. Problemy z przypisaniem nazwy użytkownika do sesji są również omawiane, z zaleceniem sprawdzenia, czy zmienna jest poprawnie ustawiona.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA