Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 11

Wątek: Głosowanie

  1. #1
    Zarejestrowany
    Dołączył
    May 2010
    Posty
    27

    Question Głosowanie

    Witam
    Chciałbym zrobić prosty system głosowania +/-. Problem w tym iż nie chcę zagłębiać się zbytnio w js gdyż moja działka to php.
    Miało by to polegać na tym iż :
    - klikam w link
    - javascript wysyła do pliku np. vote.php np. postem/getem wartość id ocenianej rzeczy i głos 0/1
    - w skrypcie php odbieram to i dodaje sobie do bazy
    - na stronie na której to wysłałem nic nie musi się zmieniać
    Wystarczy mi prosta funckja w js bez zbędnych bajerów, bibliotek itd.
    Coś w stylu onclick="vote(123,1)"
    Pozdrawiam i z góry dziękuję za pomoc / wskazówki, Vercuz

  2. #2
    Zasłużony Awatar Kemsan
    Dołączył
    Oct 2007
    Posty
    805

    Domyślnie

    Ja jednak zaproponowałbym ci jquery - bo tego nie zmieścisz w samej jednej funkcji, choć, można, ale czy to będzie takie optymalne ? jQuery zawsze się przyda, jak się zdecydujesz to ci mogę kod podesłać.

  3. #3
    Zarejestrowany
    Dołączył
    May 2010
    Posty
    27

    Domyślnie

    To bym poprosił zerknę co i jak ; p

  4. #4
    Zasłużony Awatar Kemsan
    Dołączył
    Oct 2007
    Posty
    805

    Domyślnie

    Kod html (pool.html):
    Kod html:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="pl" id="vbulletin_html">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
            <script type="text/javascript">
                $('#submit').click(function(){
                    $.post('pool.php', { $('#pool').serialize(); }, function(data){
                        $('#result').html(data);
                    }
                    $('#pool').fadeOut();
                });
            </script>
        </head>
        <body>
            <div id="result"></div>
            <form id="pool">
                1. <input type="radio" value="1" name="pool_odp">
                2. <input type="radio" value="2" name="pool_odp">
                3. <input type="radio" value="3" name="pool_odp">
                4. <input type="radio" value="4" name="pool_odp">
                <input type="button" id="submit" value="Wyślij">
            </form>
        </body>
    </html>
    Kod php (pool.php):

    Kod php:
    <?php
    if($_POST['pool_odp'] != NULL){
        if(
    ctype_digit($_POST['pool_odp']) && ($_POST['pool_odp'] => && $_POST['pool_odp'] =< )){
            echo 
    'Wybrałeś odp. '.$_POST['pool_odp'];    
        } else {
            echo 
    'Błąd! Nieznana odp!';
        }
    }

    ?>

  5. #5
    Zarejestrowany
    Dołączył
    May 2010
    Posty
    27

    Domyślnie

    Dzięki, w dokumentacji jquery znalazłem przesyłanie postem
    Kod:
    $.post("test.php", { parametr1: "John", parametr "2pm" } );
    Mógłbym poprosić o gotową funkcję która przyjmuję 2 parametry i wysyła je postem do test.php ?
    Abym mógł robić to w formie np.
    Kod:
    <a href="#" onclick="glosuj(123,1)">+</a>
    Odpalało by to funkcję która te 2 parametry wysyła do innej podstrony.
    Pozdrawiam i z góry dziękuje

    | Jeżeli jest taka możliwość aby zrobić to w samym js to było by lepiej gdyż na razie nie potrzebuję jquery do innych rzeczy.

  6. #6
    Zasłużony Awatar Kemsan
    Dołączył
    Oct 2007
    Posty
    805

    Domyślnie

    Proszę:
    Kod HTML:
    Kod html:
    <script type="text/javascript">   
    var http_request = false;   
    function makePOSTRequest(url, parameters) {    
      http_request = false;     
      if (window.XMLHttpRequest) { // Mozilla, Safari,...         
              http_request = new XMLHttpRequest();        
                      if (http_request.overrideMimeType) {    // set type accordingly to anticipated content type    
                                    //http_request.overrideMimeType('text/xml'); 
                    http_request.overrideMimeType('text/html');          
              }      
      } else if (window.ActiveXObject) { // IE         
        try {            
            http_request = new ActiveXObject("Msxml2.XMLHTTP");          
        } catch (e) { 
                    try {                
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}          
        }       
     }       
     if (!http_request) {              
        alert('Cannot create XMLHTTP instance');          
        return false;      
     }              
      http_request.onreadystatechange = alertContents;      
      http_request.open('POST', url, true);       
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");       
      http_request.setRequestHeader("Content-length", parameters.length);       
      http_request.setRequestHeader("Connection", "close");       
      http_request.send(parameters);   
    }    
    
    function alertContents() {       
        if (http_request.readyState == 4) {          
            if (http_request.status == 200) {      //alert(http_request.responseText);             
                result = http_request.responseText;            
                document.getElementById('wynik').innerHTML = result;                      
            } else {             
            alert('There was a problem with the request.');          
            }      
         }    
    }       
    
    function get(param_1, param_2) {       
        var poststr = "param_1=" + encodeURI( param_1 ) + "&param_2=" + encodeURI( param_2);       
        makePOSTRequest('pool.php', poststr);    
    } 
    </script>
    <div id="wynik"></div>
    <a href="#" onclick="get(1, 2);">1 , 2 </a>
    <a href="#" onclick="get(3, 4);">3 , 4 </a>
    </span>
    Kod php (pool.php):
    Kod php:
    <?php

    print_r
    ($_POST);

    ?>
    Ostatnio edytowane przez Kemsan ; 07-10-2010 o 16:14

  7. #7
    Zarejestrowany
    Dołączył
    May 2010
    Posty
    27

    Domyślnie

    Dzięki, jednak wykorzystam jquery nie będę kombinował za dużo.
    Kod:
    p>Oceń : <a href="#" onclick="test('.$id.',1);return false;">+</a> / <a href="#" onclick="test('.$id.',2);return false;">-</a></p>
    Funkcja
    Kod:
    <script type="text/javascript"> 
    function test(id,vote)
    {
    $.post("vote.php",{ idfilm: id,glos: vote});
    }
     </script>
    I prowizorka do odbierania :
    Kod:
    if(isset($_POST['idfilm']) && ($_POST['glos'])) 
    {
    $numer = (int)$_POST['idfilm'];    
    $glos = (int)$_POST['glos'];
    mysql_query ('insert into vote values(null,'.$numer.',1,'.$glos.')');
    }
    Na razie spełnia moje oczekiwania i to najważniejsze. Dzięki za pomoc, pozdrawiam
    ===============
    Chciałbym jeszcze dodać coś w stylu diva ukrytego Error w którym umieściłbym wiadomość w zależności co funkcja z php zwróci. Jakieś wskazówki ? Np. Jeżeli doda poprawnie do bazy to zmieni wartość napisu na Dodano poprawnie i wyłączy display none.

    Kod:
    <script type="text/javascript"> 
    function glosuj(id,vote)
    {
     $.post("vote.php", { idfilm: id, glos: vote } );
    }
     </script>
    Chciałbym do tego dodać obsługę zmieniana wartości np. diva w zależności od tego co zwróci funkcja z vote.php, nie wiem jak się za to zabrać i jak odebrać dane z tego żądania wysłanego postem.
    Pozdrawiam
    Pozdrawiam
    Ostatnio edytowane przez vercuz ; 07-10-2010 o 22:50

  8. #8
    Zasłużony Awatar Kemsan
    Dołączył
    Oct 2007
    Posty
    805

    Domyślnie

    Po pierwsze - strona która coś zwraca musi być "czysta" - bez żadnego szablonu etc. tylko wiadomość typu - ERROR, GOOD etc.
    Jeśli to osiągniesz to robisz to takim kodem:
    Kod html:
    <script type="text/javascript"> 
    function glosuj(id,vote) { 
      $.post("vote.php", { idfilm: id, glos: vote }, function(data){
       $('#error_box').html(data);
       if(data == "ERROR") alert('Błąd!');
     }); 
    }
     </script>
    <div id="error_box"></div>
    Proszę

  9. #9
    Zarejestrowany
    Dołączył
    May 2010
    Posty
    27

    Domyślnie

    Dzięki, po szkole znalazłem ten kawałek w dokumentacji i kończę robić.
    Kod:
    function glosuj(id,vote)
    {
    
        $.post("vote.php", { idfilm: id, glos: vote }, 
            function(data)
            {
                $("#wiadomosc").text(data);
            });
    
        $("#wiadomosc").fadeIn().delay(2000);
        $("#wiadomosc").fadeOut();
    }
    I w vote.php wypisuję np. echo('Głos dodany');
    Teraz jeszcze 1 kwestia w film.php w którym mam skrypt do głosowania, ocena wyświetlana jest poprzez tablice $film w której posiadam $film['ocena'] pobieraną na początku i wyświetlaną w odpowiednim miejscu. Jak najlepiej ją odświeżyć? Pobrać/odświeżyć w jakiś sposób ją na nowo i tylko ją wyświetlić czy zinkrementować/zdekrementować aktualną wyświetlaną na stronie poprzez warunek
    Kod:
      if(data == "Dodano") {alert('Błąd!'); tu zwiekszyc wartość o 1}
      if(data == "Odjeto") {alert('Błąd!'); tu zmniejszyć wartość o 1}
    ?

  10. #10
    Zasłużony Awatar Kemsan
    Dołączył
    Oct 2007
    Posty
    805

    Domyślnie

    Przekaż ją po prostu jako echo i tyle Przekaż aktualną ocenę w "data"

Strona 1 z 2 12 OstatniOstatni

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. Głosowanie - Proxy
    Przez ziomek55 w dziale Kosz
    Odpowiedzi: 6
    Ostatni post / autor: 03-03-2010, 21:08
  2. II Tura - Głosowanie - FavIcon
    Przez Kubiecov w dziale Administracja
    Odpowiedzi: 17
    Ostatni post / autor: 28-12-2009, 11:54
  3. Głosowanie: FavIcon dla MmoCenter.pl
    Przez Kubiecov w dziale Administracja
    Odpowiedzi: 14
    Ostatni post / autor: 27-12-2009, 15:47

Zakładki

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
  •