Pokaż wyniki od 1 do 6 z 6

Wątek: Zapisywanie online i przypisywanie nicków do numerów - Baza danych

  1. #1

    Zapisywanie online i przypisywanie nicków do numerów - Baza danych

    Witam.
    W ramach nauki bazy danych chciałem zrobić skrypt, który ma na celu zapisywać do bazy danych kto jest online, przypisywać nicki do numerów i po wylogowaniu usuwać z listy online.
    Chciałbym zrealizować to jako funkcja. Zrobiłem dotychczas takie coś:
    Kod php:
    function NumerOnline($number){
                global 
    $sql_conn$selectSQL;
                
    $zapytanieOnline 'CREATE TABLE online (id int NOT NULL AUTO_INCREMENT, numer integer, PRIMARY KEY(id))';
                
    $online $zapytanieOnline;
                
    $zapytanieOnline "INSERT INTO `online` (`id`, `numer`) VALUES ('', '$numer')";
                
    $idzapytania mysql_query($zapytanieOnline);
                
    $zapytanieOnline "SELECT `numer` FROM `online`";
                
    $idzapytania mysql_query($zapytanieOnline);
                
    mysql_fetch_row($idzapytania);
                echo 
    '<table>';
                while (
    $wiersz mysql_fetch_row($idzapytania)) 
                {
                
    $return[] = $wiersz;
                }
                return 
    $return
    Domyślnie ta funkcja miałaby tworzyć tabelę z "id" i "numer". Z tej tabeli byłyby też pobierane osoby, które są online. Nie wiem czy ten kod jest poprawny i czy ma jakikolwiek sens. Nie wiem jak tutaj zastosować pętlę while. To pierwszy raz, że coś robię z bazą danych. W podobny sposób będę chciał zrealizować inne funkcje.
    Już mam też pomysły na funkcję dopisującą nicki do numerów i usuwanie z listy online, ale najpierw chciałbym zająć się tą jedną. Nie wiem jak to poprawić, aby było prawidłowo. Za wszelką pomoc dziękuję z góry.
    Ostatnio edytowane przez Artyliusz ; 11.11.2012 o 01:59 Powód: Zmiana kodu we fragmencie while.

  2. #2
    Doświadczony GGadacz
    Dołączył
    27.03.2012
    Posty
    131
    Kod php:
     $zapytanieOnline 'CREATE TABLE online (id int NOT NULL AUTO_INCREMENT, numer integer, PRIMARY KEY(id))'
    To robisz tylko raz, bo tak to co chwilę by tworzyło tą samą tabelkę.



    Kod php:
    while ($wiersz mysql_fetch_row($idzapytania)) 
                {
                
    $return[] = $wiersz;
                } 
    Możesz zamienić na:
    Kod php:
    while ($wiersz mysql_fetch_row($idzapytania)) 
                
    $return[] = $wiersz



    Kod php:
    $zapytanieOnline "INSERT INTO `online` (`id`, `numer`) VALUES ('', '$numer')"
    Tu jeśli masz kolumnę `id` jako int, i tak samo `numer` jako int, możesz zmienić to zapytanie na:
    Kod php:
    $zapytanieOnline "INSERT INTO `online` (`numer`) VALUES ('$numer')"
    Ostatnio edytowane przez Beniooo ; 11.11.2012 o 15:06 Powód: Poprawiłem by było czytelniejsze

  3. #3
    W gruncie rzeczy nie myślałem tak źle.
    A mam utworzyć tabelę poza funkcją? Bo jak funkcja będzie kilka razy powtarzana, to będzie tworzyć tabelę. Ewentualnie przez phpMyAdmin utworzyć.
    Skoro powyższa funkcja się zgadza to chyba poniższa też będzie dobra:
    Kod php:
    function DodajNick($wiersz,$nick){
                global 
    $sql_conn$selectSQL;
                
    $zapytanieOnline "INSERT INTO `online` (`numer`) VALUES ('$numer')";  
                            
    $idzapytania mysql_query($zapytanieOnline);
                            while (
    $wiersz mysql_fetch_row($idzapytania))  
                                     
    $return[] = $wiersz;  

               
    $zapytanieOnlined 'CREATE TABLE onlined (id int NOT NULL AUTO_INCREMENT, numer integer, nick char(11), PRIMARY KEY(id))'
                
    $onlined $zapytanieOnlined;
                
    $zapytanieOnlined "INSERT INTO `onlined` (`id`, `numer`, `nick`) VALUES ('', '$wiersz', `$nick`)";
                
    $idzapytania2 mysql_query($zapytanieOnlined);
                
    $zapytanieOnline "SELECT `numer`, `nick` FROM `onlined` WHERE ''";
                
    $idzapytania2 mysql_query($zapytanieOnlined);
                            
    $nick = ?
                echo 
    '<table>';
                while (
    $wiersz2 mysql_fetch_row($idzapytania2)) 
                             
    $return[] = $wiersz[1];
                            return 
    true
    Teraz wydaje mi się to jakoś mniej sensowne niż wczoraj. Tworzenie tabeli też chyba wywalić poza funkcję. Z założenia ta funkcja ma utworzyć nową tabelę i do niej pobierać rekordy z pierwszej, czyli numer, a potem dopisywać nick. Nie wiem co przypisać zmiennej nick (postawiłem znak zapytania). W sumie to nie wiem jak to zrealizować. Trochę się pogubiłem.
    Ostatnio edytowane przez Artyliusz ; 11.11.2012 o 16:44

  4. #4
    Doświadczony GGadacz
    Dołączył
    01.06.2011
    Lokalizacja
    Lębork
    Marka tel.
    Sony
    Model tel.
    Xperia M2
    FW telefonu
    Android 5.1
    Posty
    262
    Benioo jeżeli zażądamy stworzenia tabeli która już jest stworzona to tabela ta nie zostanie dodana. Zapytanie to nie wykona się. I z tym że nie trzeba podawać id nie chodzi o typy danych, tylko jeżeli nie podamy w zapytaniu co ma dodać w daną kolumnę to zostanie do niej zapisana wartość domyśla tej że kolumny - w tym wypadku kolejny numerek id.

    Ten kod może według mnie nie zadziała według naszych oczekiwań:
    Kod php:
    while ($wiersz mysql_fetch_row($idzapytania))  
          
    $return[] = $wiersz
    $wiersz jest w tym wypadku tablicą, co za tym idzie musimy dać index z żądaną wartości. W innym wypadku powstanie nam po prostu tablica wielowymiarowa czyli tablica w tablicy. Powinno wyglądać to w tym wypadku tak:
    Kod php:
    while ($wiersz mysql_fetch_row($idzapytania))  
                
    $return[] = $wiersz[0]; 
    Artyliszu bardzo fajnie, że zabrałeś się od razu za funkcje. Warto od razu uczyć się dodatkowo pisania obiektowo co wiąże się z funkcjami.
    Druga wskazówka: warto od początku wpajać sobie dobre nawyki dlatego staraj się pisać skrypty po angielsku, chodzi mi tutaj o nazwy zmiennych. Nie ma to znaczenia w pracy kodu ale jeżeli chcemy kontynuować naukę php warto jednak pisać po angielsku z racji tego, że taki jest standard.
    W drodze wyjątku napiszę tutaj jak podana funkcja powinna wyglądać i jak powinna wyglądać tabela do czatu.
    Kod php:
    $from $_GET['from']; //powinno znajdowac się na początku skryptu wśród kluczowych zmiennych
    function AddUser($nick)
    {
        global 
    $from//wrzucenie do funkcji $from
        
    $nick trim($nick); //usunięcie spacji z początku i konca $nick
        
    mysql_query("INSERT INTO `users`(`id`, `number`, `nick`, `online`) VALUES ('', '$from', '$nick', '0')"); //dodanie do tabeli usera

    Funkcja przyjmuje jeden parametr - nick usera piszącego.
    Tabela o nazwie users(userzy) w bazie zawiera 4 kolumny - id(wiadomo), number(numer usera), nick(wiadomo), online(czy user jest zalogowany);
    Kiedy user się loguje $onlone przybiera wartość 1, kiedy wylogowuje - 0. Kiedy chcemy uzyskać numery zalogowanych wystarczy taki oto kodzik:
    Kod php:
    $query mysql_query("SELECT `number` FROM `users` WHERE `online`='1'"); //zapytanie 
    $numbers '';
    while(
    $row mysql_fetch_row($query)) //wrzucenie danych do tablicy w pętli(wykonuje się dla każdego rekordu kolejny oprót pętli)
        
    $numbers[] = $row[0]; //dodanie do tablicy numeru 
    I w taki oto sposób zamiast dwóch tabel w bazie mamy jedną. To chyba wszystko czego ci trzeba.
    Pozdr. Wazniak
    Ostatnio edytowane przez Wazniak96 ; 20.11.2012 o 13:51 Powód: Błąd w kodzie.

  5. #5
    Doświadczony GGadacz
    Dołączył
    27.03.2012
    Posty
    131
    Ruloo
    w kodzie
    Kod php:
    $query mysql_query("SELECT `number` FROM `users` WHERE `online`='1'"); //zapytanie 
    $numbers '';
    while(
    $row mysql_fetch_row($query//wrzucenie danych do tablicy w pętli(wykonuje się dla każdego rekordu kolejny oprót pętli)
        
    $numbers[] = $row[0]; //dodanie do tablicy numeru 

    Linijkę
    Kod php:
    $numbers ''
    Można usunąć, ona jest nie potrzebna, i tak przy pętli do $numbers[] zostanie przypisane $row[0]

    A jeśli już to powinna wyglądać tak:
    Kod php:
    $numbers = array(); 

  6. #6
    Doświadczony GGadacz
    Dołączył
    01.06.2011
    Lokalizacja
    Lębork
    Marka tel.
    Sony
    Model tel.
    Xperia M2
    FW telefonu
    Android 5.1
    Posty
    262
    Ja tą linię daję daję profilaktycznie. Bo zawsze w kodzie mogła nam się znaleźć taka tablica więc wolę tą zmienną wyzerować. Tak samo mogę użyć funkcji unset() do tego
    Cytat Zamieszczone przez Beniooo;6370
    A jeśli już to powinna wyglądać tak: [php
    $numbers = array();[/php]
    Niby dlaczego tak.? Uruchomianie zbędnej funkcji co za tym idzie spowalnianie kodu. Funkcja jest cięższa od przypisania tak na logikę

    Dobra koniec tej konwersji na temat PHP i naszych rozwiązań. To forum dotyczące GG, a nie PHP.
    Ostatnio edytowane przez Wazniak96 ; 12.11.2012 o 14:12 Powód: Literówka xd

Podobne wątki

  1. Odpowiedzi: 5
    Ostatni post / autor: 05.01.2017, 10:46
  2. [iOS] Zapisywanie zdjęcia w rolce aparatu.
    By madhunt3r in forum Ciekawe sugestie
    Odpowiedzi: 4
    Ostatni post / autor: 15.11.2015, 22:35
  3. Support gg i usuwanie numerów GG (za spamowanie i nękanie)
    By JacoH in forum Wiedza ogólna - przeczytaj zanim napiszesz
    Odpowiedzi: 1
    Ostatni post / autor: 08.09.2012, 20:28
  4. Export danych z archiwum online
    By janek80 in forum Ciekawe sugestie
    Odpowiedzi: 0
    Ostatni post / autor: 20.04.2012, 12:29
  5. Odpowiedzi: 2
    Ostatni post / autor: 24.02.2012, 21:42

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •