Ogłoszenie

Zwiń
No announcement yet.

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

Zwiń
X
 
  • Filtr
  • Czas
  • Pokaż
Wyczyść wszystko
new posts

    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 edytowany przez Artyliusz; [ARG:4 UNDEFINED]. Powód: Zmiana kodu we fragmencie while.

    #2
    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 edytowany przez Beniooo; [ARG:4 UNDEFINED]. Powód: Poprawiłem by było czytelniejsze
    Już niedługo...

    Komentarz


      #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 edytowany przez Artyliusz; [ARG:4 UNDEFINED].

      Komentarz


        #4
        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 edytowany przez Wazniak96; [ARG:4 UNDEFINED]. Powód: Błąd w kodzie.

        Komentarz


          #5
          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(); 
          Już niedługo...

          Komentarz


            #6
            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
            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 edytowany przez Wazniak96; [ARG:4 UNDEFINED]. Powód: Literówka xd

            Komentarz

            Pracuję...
            X