Proč mi nefunguje "like" script Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Proč mi nefunguje "like" script

Příspěvekod honzaik » 16 říj 2011 21:40

čau napsal jsem si tento script, který zapíše jeden hlas do souboru bud plus nebo minus a je to udělany aby to šlo jen jednou na IP

Kód: Vybrat vše

<?php
function pricteni($soubor_plus, $soubor_minus)
{
    $start = "1";
    if ($_POST["plus"] == TRUE)
    {
        if (file_exists($soubor_plus))
        {
            $old_plus = file_get_contents($soubor_plus);
            file_put_contents($soubor_plus, ++$old_plus, LOCK_EX);
        }
        else if (!file_exists($soubor_plus))
        {
            file_put_contents($soubor_plus, $start, LOCK_EX);
        }
    }
    else if ($_POST["minus"] == TRUE)
    {
        if (file_exists($soubor_minus))
        {
            $old_minus = file_get_contents($soubor_minus);
            file_put_contents($soubor_minus, ++$old_minus, LOCK_EX);
        }
        else if (!file_exists($soubor_minus))
        {
            file_put_contents($soubor_minus, $start, LOCK_EX );
        }
    }
}

function mozek($ip_soubor)
{
    $ip = $_SERVER['REMOTE_ADDR'];
    if (file_exists($ip_soubor))
    {
        $data_ip = file_get_contents($ip_soubor);
        $ips = explode("\n", $data_ip);
        foreach ($ips as $one_ip )
        {
            if ($one_ip == $ip)
            {
                echo "Nemůžeš dále hlasovat";
            }
            else if ($one_ip != $ip)
            {
                pricteni("plus.php","minus.php");
                file_put_contents($ip_soubor, "\n".$ip.$data_ip, LOCK_EX);
            }
        }
    }
    else if (!file_exists($ip_soubor))
    {
        pricteni("plus.php", "minus.php");
        file_put_contents($ip_soubor, "\n".$ip, LOCK_EX);
    }
}

function klik()
{
    if ($_POST["plus"] == TRUE)
    {
        mozek("ips.php");
    }
    else if ($_POST["minus"] == TRUE)
    {
        mozek("ips.php");
    }
}
klik();

?>
<html>
<body>
<center>
<form method="post" action="test_like.php">
      <input name="plus" type="submit" value="LIKE">
      <br>
      <input name="minus" type="submit" value="DISLIKE">
    </form>
</center>
</body>
</html>

podle mě je chyba ve funkci mozek() > foreach, že to provede akci, ikdyž už jedna IP splnila podmínky (nesplnila)
ello dere

Reklama
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Proč mi nefunguje "like" script

Příspěvekod CZechBoY » 17 říj 2011 00:20

co přesně nefunguje, co to dělá/nedělá?

doporučuju nepoužívat ForEach na procházení pole ale:
PHP píše:$ips = explode("\n", $data_ip)
$flip_ips=Array_Flip($ips);
If(IsSet($flip_ips[$ip]))
echo "Už jsi hlasoval";
Else{
//zapsání plus/minus a IP adresy
}
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Proč mi nefunguje "like" script

Příspěvekod honzaik » 17 říj 2011 16:25

udělá to že když kliknu na like/dislike tak to sice zapíše tu IP, ale ikdyž ta IP už v tom souboru ips.php je tak to pořád přičítá hlasy, ale píše to "Nemůžeš dále hlasovat." takže ono to podle mě sice tu první podmínku jak jsi řekl splní ale pak to přejde na else ikdyž by to nemělo udělat. nějaký die by to nevyřešilo, protože to samozřejmě zruší ostatní.
EDIT: už jsem to vyřešil, akorát tam dělalo neplechu to že ta 1. podmínka měla bejt vyměněná za druhou, díky za snahu

--- Doplnění předchozího příspěvku (17 Říj 2011 18:00) ---

hm tak fail, script funguje výborně dokud v souboru ips.php není víc IP adres než jedna >1,
takže, bych teď rád věděl co použít za foreach, protože očividně foreach prohledá sice IP ale když tam je i jiná IP než ta 1. tak to vybere tu rozdílnou vždy a bere jí jako jedinou, jakou funkci použít místo foreach? to od CzechBoye jsem moc nepochopil do místo foreach, můžeš mi to prosímtě vysvětlit? tu funkci
ello dere

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Proč mi nefunguje "like" script

Příspěvekod CZechBoY » 17 říj 2011 18:51

aha.. taky mi unikl takový malý detail že to vypíše "Nemůžeš dále hlasovat" a pak vlastně cyklus pokračuje :D :D =>
dej za to echo "Nemůžeš dále hlasovat"; příkaz break;

Kód: Vybrat vše

<?php
function pricteni($soubor_plus, $soubor_minus)
{
    $start = 1;
    if ($_POST["plus"] == TRUE)
    {
        if (file_exists($soubor_plus))
        {
            $old_plus = file_get_contents($soubor_plus);
            file_put_contents($soubor_plus, ++$old_plus, LOCK_EX);
        }
        else
        {
            file_put_contents($soubor_plus, $start, LOCK_EX);
        }
    }
    else if ($_POST["minus"] == TRUE)
    {
        if (file_exists($soubor_minus))
        {
            $old_minus = file_get_contents($soubor_minus);
            file_put_contents($soubor_minus, ++$old_minus, LOCK_EX);
        }
        else
        {
            file_put_contents($soubor_minus, $start, LOCK_EX );
        }
    }
}

function mozek($ip_soubor)
{
    $ip = $_SERVER['REMOTE_ADDR'];
    if (file_exists($ip_soubor))
    {
        $data_ip = file_get_contents($ip_soubor);
        $ips = explode("\n", $data_ip);
        $flip_ips=Array_Flip($ips);
          if (IsSet($flip_ips[$ip]))
          {
              echo "Nemůžeš dále hlasovat";
              break;
          }
          elseif ($one_ip != $ip)
          {
              pricteni("plus.php","minus.php");
              file_put_contents($ip_soubor, "\n".$ip.$data_ip, LOCK_EX);
          }
    }
    else
    {
        pricteni("plus.php", "minus.php");
        file_put_contents($ip_soubor, "\n".$ip, LOCK_EX);
    }
}

function klik()
{
    if ($_POST["plus"] == TRUE)
    {
        mozek("ips.php");
    }
    elseif ($_POST["minus"] == TRUE)
    {
        mozek("ips.php");
    }
}
klik();

?>
<html>
<body>
<center>
<form method="post" action="test_like.php">
      <input name="plus" type="submit" value="LIKE">
      <br>
      <input name="minus" type="submit" value="DISLIKE">
    </form>
</center>
</body>
</html>

toj e trošku upravený a funkční kod
upraveno: if(file_exists(...)) a potom už netestuj jestli neexistuje, stačí dát prostě ELSE
přidán ten Array_Flip jak jsem psal v minulém postu - doporučuju prostudovat, výborná věc - ve zkratce dělá tohle: prohodí klíče s hodnotami v poli (anglicky key prohodí s value)
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Proč mi nefunguje "like" script

Příspěvekod honzaik » 17 říj 2011 20:03

díky, ale mě už někdo poradil, že tam mám dát proměnnou boolean a napsat u $one_ip == $ip jako vysledek true a funguje to
ale k tomu tvému, ja se spíš ptal na to IsSet, co to dělá
a nebo mi doporučil místo foreach udělat if(in_array())
nicméně díky
ello dere

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Proč mi nefunguje "like" script

Příspěvekod CZechBoY » 18 říj 2011 00:16

moje je rychlejší s tim Flipem, uvidíš ;)
dávat boolean hodnotu do cyklu? kde to jsme? dej tam break; tim s eukončuje cyklus ne nějakou podmínkou
dovedeš ci představit jaký je to zpomalení v případě tisíců řádků?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Proč mi nefunguje "like" script

Příspěvekod honzaik » 18 říj 2011 16:38

ok, já jsem to udělal s tou funkcí in_array to funguej jak má...
ello dere

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Proč mi nefunguje "like" script

Příspěvekod CZechBoY » 18 říj 2011 20:30

no jak myslíš, zkus si to při větších souborech ;)
označ téma za vyřešené
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

Uživatelský avatar
honzaik
Level 2.5
Level 2.5
Příspěvky: 337
Registrován: říjen 11
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Proč mi nefunguje "like" script  Vyřešeno

Příspěvekod honzaik » 18 říj 2011 21:39

ok dík za pomoc
ello dere


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • proč nb nebere boot antivir
    od Stenatko » 03 dub 2025 00:19 » v Vše ostatní (bezp)
    5
    7794
    od Stenatko Zobrazit poslední příspěvek
    03 dub 2025 21:42
  • Problémy v síti na obrázku - proč nemůžou počítače komunikovat mezi sebou Příloha(y)
    od zuzana3 » 25 pro 2024 20:33 » v Administrace sítě
    7
    4836
    od zuzana3 Zobrazit poslední příspěvek
    25 pro 2024 22:23
  • Nefunguje nová PC
    od adoyss » 16 led 2025 05:06 » v Problémy s hardwarem
    7
    3506
    od martanius Zobrazit poslední příspěvek
    17 led 2025 02:29
  • T490s nefunguje trackpoint UPDATE Příloha(y)
    od Sadelník1234 » 17 led 2025 21:49 » v Problémy s hardwarem
    3
    3213
    od kecalek Zobrazit poslední příspěvek
    20 led 2025 16:00
  • Snímač otisku najednou nefunguje, laptop Příloha(y)
    od frisby » 17 srp 2024 22:18 » v Problémy s hardwarem
    1
    1672
    od frisby Zobrazit poslední příspěvek
    18 srp 2024 10:46

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host