Ocena wątku:
  • 1 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5
[PHP] sonda - bardzo skomplikowany problem - POMOCY ! ! !
#1
- żeby oddać głos trzeba podać 5-znakowy kod z listy (lista w pliku z kodami, wygenerowanymi losowo ciągami 5 znaków, każdy kod w osobnej linii pliku, kody nie powtarzają się mechanizm sprawdza, czydany kod występuje na liście, a jeśli tak, zalicza głos i usuwa kod z listy)
- jedna osoba może oddać wiele razy głos, ale za każdym razem musi użyć nowego kodu

mam straszny problem żeby to zrobić wg. powyższych wytycznych;/
jak na razie zrobiłem tak:
Kod:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="pl" xml:lang="pl">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="pl" />
    <meta name="Author" content="RW" />
    
    <title>Sonda</title>
    </head>
    <body>
    
    <?php
    
    // ustalenie szerokosci w pikselach,
    
    // jesli plik graficzny ma 1 px szerokosci
    
    $szerokosc=200;
    
    
    
    function prezentacja($szerokosc)
    
    
    
    {
    
    // odczyt pliku z pytaniem i odpowiedziami do tablicy $tresc
    
    $tresc=explode("||",file_get_contents("tresc.php"));
    
    
    
    // wyznaczenie liczby wierszy, ktora stanowia ilosc odpowiedzi plus pytanie
    
    $ilosc=count($tresc);
    
    
    
    // odczyt pliku z glosami
    
    $glos=explode("||",file_get_contents("glosy.php"));
    
    
    
    $suma=0;
    
    for($c=0;$c<$ilosc;$c++)
    
    $suma=$suma+$glos[$c];
    
    
    
    echo '<p>'.$tresc[0];
    
    
    
    for($c=1;$c<$ilosc;$c++)
    
    {
    
    echo '<BR />'.$tresc[$c];
    
    $c--;
    
    echo '<BR /> [ '.$glos[$c].' ] <BR />';
    
    
    
    // graficzne wyswietlenie wynikow
    
    for($i=0;$i<$glos[$c]/($suma+1)*$szerokosc;$i++)
    
    echo '<img src="img.php" alt="">';
    
    $c++;
    
    }
    
    echo '<BR /><BR />Suma głosów: '.$suma.'.</p>';
    
    }
    
    
    // jezeli wyslano dane z formularza
    
    if ($wybor)
    
    {
    
    // odczyt pliku z pytaniem i odpowiedziami
    
    $tresc=explode("||",file_get_contents("tresc.php"));
    
    
    
    $ilosc=count($tresc);
    
    
    
    // odczyt pliku z glosami
    
    $glos=explode("||",file_get_contents("glosy.php"));
    
    
    
    // uaktualnienie liczby glosow w pliku glosy.php
    
    $fp=fopen("glosy.php","w");
    
    // zwiekszenie o "1" odpowiedniego elementu tablicy, na ktory zaglosowano
    
    $glos[$wybor-1]=$glos[$wybor-1]+1;
    
    // zapis do pliku
    
    fwrite($fp,implode("||",$glos));
    
    fclose($fp);
    
    }
    
    // odczyt pliku z pytaniem i odpowiedziami
    
    $tresc=explode("||",file_get_contents("tresc.php"));
    
    $ilosc=count($tresc);
    
    // odczyt pliku z glosami
    
    $glos=explode("||",file_get_contents("glosy.php"));
    
    
    /*POKAZUJE SONDE*/
    
    echo '<p>'.$tresc[0].'<map glosuj="glosuj">
    <form action="" method="post">
    <table align="center" style="text-align:center;">
    <tr>
    <td>1.<img src="./zdjecia/auto1.jpg" alt="" glosuj="ramka"/></td>
    <td>2.<img src="./zdjecia/auto2.jpg" alt="" glosuj="ramka"/></td>
    <td>3.<img src="./zdjecia/auto3.jpg" alt="" glosuj="ramka"/></td>
    <td>4.<img src="./zdjecia/auto4.jpg" alt="" glosuj="ramka"/></td>
    <td>5.<img src="./zdjecia/auto5.jpg" alt="" glosuj="ramka"/></td>
    </tr>
    <tr>
    <td>6.<img src="./zdjecia/auto6.jpg" alt="" glosuj="ramka"/></td>
    <td>7.<img src="./zdjecia/auto7.jpg" alt="" glosuj="ramka"/></td>
    <td>8.<img src="./zdjecia/auto8.jpg" alt="" glosuj="ramka"/></td>
    <td>9.<img src="./zdjecia/auto9.jpg" alt="" glosuj="ramka"/></td>
    <td>10.<img src="./zdjecia/auto10.jpg" alt="" glosuj="ramka"/></td>
    </tr>
    </table>
    
    <div>
    <input type="radio" name="wybor" value="1" /> nr 1.
    <input type="radio" name="wybor" value="2" /> nr 2.
    <input type="radio" name="wybor" value="3" /> nr 3.
    <input type="radio" name="wybor" value="4" /> nr 4.
    <input type="radio" name="wybor" value="5" /> nr 5.
    <input type="radio" name="wybor" value="6" /> nr 6.
    <input type="radio" name="wybor" value="7" /> nr 7.
    <input type="radio" name="wybor" value="8" /> nr 8.
    <input type="radio" name="wybor" value="9" /> nr 9.
    <input type="radio" name="wybor" value="10" /> nr 10.
    </div>
    
    <p></p><div><br/>Wpisz hasło:<br/><input type="text" name="haslo" /><input type="submit" name="glosuj" value="Głosuj" /><br/><br/></form></map></p>';
    
    /*POKAZUJE WYNIKI*/
    
    echo prezentacja($szerokosc);
    


   /*------------------------------------ODTĄD MAM PROBLEM----------------------------------------------------------------*/  
    


    //TUTAJ KOD SPRAWDZA CZY JEST HASŁO W PLIKU kody.txt I JAK JEST TO USUWA JE STAMTĄD
    
    $wpisanyKlucz = htmlspecialchars(trim($_POST['haslo']));
    $kody = file('./kody.txt');
    if($klucz = in_array($wpisanyKlucz, $kody))
    {
    unset($kody[$klucz]);
    file_put_contents('./kody.txt', implode("\n", $kody));
    
    

// TUTAJ CHCIAŁEM ZROBIĆ ŻEBY PO KLIKNIĘCIU 'glosuj' SPRAWDZAŁO BŁĘDY I WYSYŁAŁO ERROR WARUNKOWO

    $wyslij = $_POST['glosuj'];
    $empty = '';
  
    if($wyslij)
    {
    if (empty($haslo))
    {
    $error = "Nie wpisałeś hasła<br/>";
    $haslo = $empty;
    }
    
    elseif (strlen($haslo) != 5)
    {
    $error .="hasło musi mieć 5 znaków<br/>";
    $haslo = $empty;
    }
    if (empty($error))
    {
    $error .= "Twoja głos został oddany";
    }
    }
    else
    {
    $error .= "Wystąpił błąd podczas głosowania, spróbuj później.";
    }
    }
    
    
    
    //TU MIAŁBY SIĘ WYŚWIETLAĆ ERROR
    
    echo $error;
    ?>
    
    </body>
    </html>

zrobiłem tak, jednak nie działa do końca ;/

tu można zobaczyć jak to wygląda na stronie jak na razie:
http://p13.nsf.pl/sondaPHP/index.php

bardzo proszę o pomoc
Odpowiedz
#2
Co nie działa?
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#3
(18-02-2012, 19:39)Pedro84 napisał(a): Co nie działa?

Kod:
<?php

// ustalenie szerokosci w pikselach,

// jesli plik graficzny ma 1 px szerokosci

$szerokosc=200;

//FUNKCJA LOSUJACA HASŁO
function GenRandom($howlong)
        {
            $chars = "abcdefghijklmnoprstuwxyzq";
            $chars .= "1234567890";
            $pass = "";
            $len = strlen($chars) - 1;
            for($i =0; $i < $howlong; $i++)
              {
               $random = rand(0, $len);

                   $output .=  $chars[$random];
               }
            return $output;
        };
        
        $haslo = htmlspecialchars(trim($_POST['haslo']));
        $kody = file('./kody.txt');
        if($klucz = in_array($haslo, $kody))
            {
                unset($kody[$klucz]);
                file_put_contents('./kody.txt', implode("\n", $kody));
            }
        
function errory()
        {
            $glosuj = $_POST['glosuj'];
            $haslo = htmlspecialchars(trim($_POST['haslo']));    
        
                if($glosuj)
                {
                    
                        if (empty($haslo))
                        {
                        $error = "Nie wpisałeś hasła<br/>";
                        }        
                        elseif (strlen($haslo) !== 5)
                        {
                        $error .="hasło musi mieć 5 znaków<br/>";
                        }
                        
                        if (empty($error))
                        {
                        $error .= "Twój głos został oddany";
                        }
                        else
                        {
                        $error .= "Wystąpił błąd podczas głosowania.";
                        }
                
                }    
        return $error;            
        }

function prezentacja($szerokosc)
        {
            // odczyt pliku z pytaniem i odpowiedziami do tablicy $tresc
            $tresc=explode("||",file_get_contents("tresc.php"));

            // wyznaczenie liczby wierszy, ktora stanowia ilosc odpowiedzi plus pytanie
            $ilosc=count($tresc);

            // odczyt pliku z glosami
            $glos=explode("||",file_get_contents("glosy.php"));

            $suma=0;

            for($c=0;$c<$ilosc;$c++)
                $suma=$suma+$glos[$c];


            echo '<p>'.$tresc[0];

            for($c=1;$c<$ilosc;$c++)
            {
                echo '<BR />'.$tresc[$c];
                $c--;
                echo '<BR /> [ '.$glos[$c].' ] <BR />';

                // graficzne wyswietlenie wynikow
                for($i=0;$i<$glos[$c]/($suma+1)*$szerokosc;$i++)
                    echo '<img src="img.php" alt="">';
                $c++;
            }
            echo '<BR /><BR />Suma głosów: '.$suma.'.</p>';
        }

// jezeli wyslano dane z formularza
if ($wybor)
{
    // odczyt pliku z pytaniem i odpowiedziami
    $tresc=explode("||",file_get_contents("tresc.php"));

    $ilosc=count($tresc);

    // odczyt pliku z glosami
    $glos=explode("||",file_get_contents("glosy.php"));

    // uaktualnienie liczby glosow w pliku glosy.php
    $fp=fopen("glosy.php","w");

        // zwiekszenie o "1" odpowiedniego elementu tablicy, na ktory zaglosowano
        $glos[$wybor-1]=$glos[$wybor-1]+1;

        // zapis do pliku
        fwrite($fp,implode("||",$glos));

    fclose($fp);
}
        // odczyt pliku z pytaniem i odpowiedziami
        $tresc=explode("||",file_get_contents("tresc.php"));

        $ilosc=count($tresc);

        // odczyt pliku z glosami
        $glos=explode("||",file_get_contents("glosy.php"));

        
        /*POKAZUJE SONDE*/
        echo '<p>'.$tresc[0].'<map glosuj="glosuj">
        <form action="" method="post">
        <table align="center" style="text-align:center;">
        <tr>
            <td>1.<img src="./zdjecia/auto1.jpg" alt="" glosuj="ramka"/></td>
            <td>2.<img src="./zdjecia/auto2.jpg" alt="" glosuj="ramka"/></td>
            <td>3.<img src="./zdjecia/auto3.jpg" alt="" glosuj="ramka"/></td>
            <td>4.<img src="./zdjecia/auto4.jpg" alt="" glosuj="ramka"/></td>
            <td>5.<img src="./zdjecia/auto5.jpg" alt="" glosuj="ramka"/></td>
        </tr>
        <tr>
            <td>6.<img src="./zdjecia/auto6.jpg" alt="" glosuj="ramka"/></td>
            <td>7.<img src="./zdjecia/auto7.jpg" alt="" glosuj="ramka"/></td>
            <td>8.<img src="./zdjecia/auto8.jpg" alt="" glosuj="ramka"/></td>
            <td>9.<img src="./zdjecia/auto9.jpg" alt="" glosuj="ramka"/></td>
            <td>10.<img src="./zdjecia/auto10.jpg" alt="" glosuj="ramka"/></td>
        </tr>
        </table>
            
        <div>    
            <input type="radio" name="wybor" value="1" /> nr 1.  
            <input type="radio" name="wybor" value="2" /> nr 2.  
            <input type="radio" name="wybor" value="3" /> nr 3.  
            <input type="radio" name="wybor" value="4" /> nr 4.  
            <input type="radio" name="wybor" value="5" /> nr 5.  
            <input type="radio" name="wybor" value="6" /> nr 6.  
            <input type="radio" name="wybor" value="7" /> nr 7.  
            <input type="radio" name="wybor" value="8" /> nr 8.  
            <input type="radio" name="wybor" value="9" /> nr 9.  
            <input type="radio" name="wybor" value="10" /> nr 10.
        </div>
        
        <p></p><div><br/>Wpisz hasło:';echo GenRandom(5);
        echo '<br/><input type="text" name="haslo" /><input type="submit" name="glosuj" value="Głosuj" /><br/><br/></form></map></p>'; echo errory();
        
        /*POKAZUJE WYNIKI*/
        echo prezentacja($szerokosc);
    
        
?>
aktualny kod wygląda tak, trochę nad nim posiedziałem.
sprawdź tutaj jak działa : http://p13.nsf.pl/sondaPHP/index.php
sprawdziłeś? Jak na razie chciałbym aby to generowane hasło(pod obrazkami aut) było związane z polem do wpisywania tekstu i głosowanie byłoby możliwe jedynie po wpisaniu powyższego hasła.

Jak na razie nie ważne czy wpiszę jakiekolwiek hasło, czy nie wpiszę hasła w ogóle ale jeśli zaznaczę jakieś 'radio' głos zostaje doliczany... chciałbym to zmienić - to mój główny cel puki co
Odpowiedz
#4
Dobra, jedziemy:
1. kod jest obowiązkowy, więc musisz sprawdzać czy został wysłany - determinuje to w ogóle przejście dalej
2. jeśli masz kod, to wyszukujesz go sobie w tablicy: jest zły - wywalasz error, jest dobry - jedziesz dalej i usuwasz go z tablicy
3. jeśli krok 2 zwraca Ci true, no to standardowe zapisywanie głosowania.

Naprawdę, nie wiem gdzie to skomplikowanie w tym pytaniu.

Co do Twojego kodu:
1. zrób sobie normalną walidację - jakąś klasę albo funkcję
2. czemu nie przechowujesz głosowania w jakiś normalny sposób? (tablica, zserializowany obiekt)
3. można nawet dodać głos bez wybrania zdjęcia (powiązane z punktem 1)
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#5
Dzięki za rady postaram się wprowadzić je w życie.

Co do Twoich wątpliwości w skomplikowanie tego zadania to zależy od subiektywnej oceny - wiem że mój poziom znajomości php nie jest najlepszy, jednak muszę lecieć z zadaniami dalej.

Sposób przechowywania głosowania jest taki, ponieważ kierowałem się jakimś kodem z internetu jako wzorcem, inaczej nie byłbym nawet w tym momencie w którym jestem.
Odpowiedz
#6
nie analizowałem kodu, ale dlaczego cyfry nie sa w jednej lini bylo by latwiej je przekopiować. moze jakiś skrypt przepisz kod z obrazka? jest ich kilka i działają bardzo sprawnie sam na stronie taki używam. i tak jak pisze Pedro 3 PUNKTY i wszystko działa
hmm... ja bym zrobił że kilkam na zdjęcie a w osobnym oknie wyświetla sie kod do przepisania bylo by szybciej i sprawniej i estetyczniej itd
Odpowiedz
#7
te kody mają być tylko w pliku i nie muszą się pokazywać użytkownikowi. Zresztą, porzuciłem już ten kod bo nie potrafiłem tego zrobić i zacząłem wszystko od początku.
Kod:
<?php    
//GENEROWANIE KODU 5-CYFROWEGO
for ($s=0; $s<50; $s++){
    srand((double)microtime()*1000000);
    $kod=md5(uniqid(rand()));
    // obliczamy ilość znaków w tekscie
    $licz = strlen($kod);
    // sprawdzamy, czy ilość znaków w tekscie jest większa
    // lub równa liczbie znaków po jakiej tekst ma być obcięty
    if ($licz>=5){
        // obcinamy tekst o określoną ilośc znaków
        $txt = substr($kod,0,5);
    }
    else{
        // jeżeli warunek nie jest spełniony pozostawiamy tekst bez zmian
        $txt = $kod;
    }    
    $kody[] = $txt; // tutaj zapisujemy okrojony kod do tablicy
}
file_put_contents('./kody.txt', implode(PHP_EOL, $kody));
//-------------------------------------------------------------------

//GŁOSOWANIE PO WPISANIU HASLA
if(isset($_POST['haslo']) && in_array($_POST['haslo'], $kody, true) && $_POST['glosuj']){
    //ZAPISYWANIE WYNIKOW DO PLIKOW
    if(isset($_POST['auto1']) && $_POST['auto1'] != ''){
    $filename1 = $_POST['auto1'] . '.txt';
    $auto1 = file_get_contents($filename1);
    $auto1++;
    $fileHandler=fopen("auto1.txt","w");
    fputs($fileHandler,$auto1);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto2']) && $_POST['auto2'] != ''){
    $filename2 = $_POST['auto2'] . '.txt';
    $auto2 = file_get_contents($filename2);
    $auto2++;
    $fileHandler=fopen("auto2.txt","w");
    fputs($fileHandler,$auto2);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto3']) && $_POST['auto3'] != ''){
    $filename3 = $_POST['auto3'] . '.txt';
    $auto3=file_get_contents("auto3.txt");
    $auto3++;
    $fileHandler=fopen("auto3.txt","w");
    fputs($fileHandler,$auto3);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto4']) && $_POST['auto4'] != ''){
    $filename4 = $_POST['auto4'] . '.txt';
    $auto4=file_get_contents("auto4.txt");
    $auto4++;
    $fileHandler=fopen("auto4.txt","w");
    fputs($fileHandler,$auto4);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto5']) && $_POST['auto5'] != ''){
    $filename5 = $_POST['auto5'] . '.txt';
    $auto5=file_get_contents("auto5.txt");
    $auto5++;
    $fileHandler=fopen("auto5.txt","w");
    fputs($fileHandler,$auto5);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto6']) && $_POST['auto6'] != ''){
    $filename6 = $_POST['auto6'] . '.txt';
    $auto6=file_get_contents("auto6.txt");
    $auto6++;
    $fileHandler=fopen("auto6.txt","w");
    fputs($fileHandler,$auto6);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto7']) && $_POST['auto7'] != ''){
    $filename7 = $_POST['auto7'] . '.txt';
    $auto7=file_get_contents("auto7.txt");
    $auto7++;
    $fileHandler=fopen("auto7.txt","w");
    fputs($fileHandler,$auto7);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto8']) && $_POST['auto8'] != ''){
    $filename8 = $_POST['auto8'] . '.txt';
    $auto8=file_get_contents("auto8.txt");
    $auto8++;
    $fileHandler=fopen("auto8.txt","w");
    fputs($fileHandler,$auto8);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto9']) && $_POST['auto9'] != ''){
    $filename9 = $_POST['auto9'] . '.txt';
    $auto9=file_get_contents("auto9.txt");
    $auto9++;
    $fileHandler=fopen("auto9.txt","w");
    fputs($fileHandler,$auto9);
    fclose($fileHandler);
    }

    elseif(isset($_POST['auto10']) && $_POST['auto10'] != ''){
    $filename10 = $_POST['auto10'] . '.txt';
    $auto10=file_get_contents("auto10.txt");
    $auto10++;
    $fileHandler=fopen("auto10.txt","w");
    fputs($fileHandler,$auto10);
    fclose($fileHandler);
    }

    $error = "dziękujemy za oddanie głosu";    
}
elseif($_POST['glosuj']){
    $error = "wpisałeś złe hasło lub nie wpisałeś wcale";
}
//------------------------------------------------------------------
        /*POKAZUJE SONDE*/
        echo '<p><map glosuj="glosuj">
        <form action="" method="post">
        <table align="center" style="text-align:center;">
        <tr>
            <td>1.<img src="./zdjecia/auto1.jpg" alt="" /></td>
            <td>2.<img src="./zdjecia/auto2.jpg" alt="" /></td>
            <td>3.<img src="./zdjecia/auto3.jpg" alt="" /></td>
            <td>4.<img src="./zdjecia/auto4.jpg" alt="" /></td>
            <td>5.<img src="./zdjecia/auto5.jpg" alt="" /></td>
        </tr>
        <tr>
            <td>6.<img src="./zdjecia/auto6.jpg" alt="" /></td>
            <td>7.<img src="./zdjecia/auto7.jpg" alt="" /></td>
            <td>8.<img src="./zdjecia/auto8.jpg" alt="" /></td>
            <td>9.<img src="./zdjecia/auto9.jpg" alt="" /></td>
            <td>10.<img src="./zdjecia/auto10.jpg" alt="" /></td>
        </tr>
        </table>
            
        <div>    
            <input type="radio" name="auto" value="auto1" checked="checked"/> nr 1.  
            <input type="radio" name="auto" value="auto2" /> nr 2.  
            <input type="radio" name="auto" value="auto3" /> nr 3.  
            <input type="radio" name="auto" value="auto4" /> nr 4.  
            <input type="radio" name="auto" value="auto5" /> nr 5.  
            <input type="radio" name="auto" value="auto6" /> nr 6.  
            <input type="radio" name="auto" value="auto7" /> nr 7.  
            <input type="radio" name="auto" value="auto8" /> nr 8.  
            <input type="radio" name="auto" value="auto9" /> nr 9.  
            <input type="radio" name="auto" value="auto10" /> nr 10.
        </div>
        
        <p></p><div><br/> <input type="text" name="haslo"/><input type="submit" name="glosuj" value="głosuj" /><br/>';echo $error;'<br/></form></map></p>';
?>
obecnie mam coś takiego i mam problem z tym, że nie mogę wpisać nigdy poprawnego hasła w sondzie ponieważ uaktualnia się ona za każdym razem i jak klikam głosuj to kody już są zmienione na inne... tak mi się wydaje - chyba że problem leży w czymś innym, nie mam pojęcia.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Pomocy [php/mysql] online Marekgo 6 4,857 21-10-2012, 22:03
Ostatni post: Morfeusz_2005
  Potrzebuję Waszej pomocy Mr. Bum 4 3,467 11-03-2012, 03:25
Ostatni post: Mr. Bum
  BARDZO PILNE - WORDPRESS eremen 3 2,980 07-03-2012, 17:29
Ostatni post: Engine
  System logowania - pomocy jani1992 4 3,196 24-09-2011, 16:02
Ostatni post: KowR
  Pomocy pawel274 9 6,754 22-08-2011, 19:45
Ostatni post: KowR

Skocz do:


Użytkownicy przeglądający ten wątek: 2 gości
Sponsorzy i przyjaciele
SeoHost.pl