Warning: Cannot modify header information - headers already sent by (output started at /test.php:26) in /test.php on line 639
Warning: Cannot modify header information - headers already sent by (output started at /test.php:26) in /test.php on line 640
639 setcookie("galluppi", "voted", time()+604800, "/"); // keksi jottei voi äänestää uudestaan aivan heti...
640 header("location: galmo.php"); // mennään katsomaan tulokset!
Elikkäs, lukaiseppas tämä: http://pp.kpnet.fi/blaze/codefaq/#headerssent niin saat vähän tietoa noista kahdesta ensimmäisestä
Tuota mut ei toi silti toimi ?
// Tätä ennen ei ole mitään (edes tyhjää riviä!) ob_start(); // Galluppi ob_end_fulsh();
<td VALIGN=TOP WIDTH="15%"> <table bgcolor="#000000"> <td bgcolor="#ffffff"> <?php ob_start(); ?> <style> IMG#p {background:#33CCFF} IMG#n {background:#336699} </style> <?php ########################################> # Copyright (c) T.M. # http://koti.mbnet.fi/winuus - http://www.hc-codes.net # Jos käytät, olisi kiva jos laittaisit maininnan scriptin # tekijästä sivuillesi. ########################################> $koko = 100; // gallupin leveys $aika = date("z")/7-1; // lasketaan viikonpäivä vuoden alusta $date = round($aika, 0)+1; $filu = file("galmo.txt"); $max = count($filu)-1; $vasa = explode("~¦~", $filu[$date]); $max_v = count($vasa)-2; if($_COOKIE[galluppi] == "voted"){ $size = "9"; // jos ollaan äänestetty, eli katsotaan vastauksia }else{ $size = "12"; // jos taas ollaan klikkaamassa äänestyslinkkiä... } print"<TABLE border='0' cellspacing='0' cellpadding='0' style='font:".$size."px verdana' cols='8'>\n"; for($s = 0; $s <= $max_v; $s++){ $osa = explode("|", $vasa[$s]); $yht = $yht + $osa[1]; // lasketaan gallupin vaihtoehtojen määrä } for($s = 0; $s <= $max_v; $s++){ $osa = explode("|", $vasa[$s]); if($_COOKIE[galluppi] == "voted"){ // jos ollaan äänestetty, tulostetaan gallupin vastaukset $colspan = " colspan='2'"; $space = "<BR><BR>"; $right = " align='right'"; $vastaus = "$osa[0]"; if($osa[1] != ""){ // jos kyseessä on vastaus, eli äänien arvo on joko nolla tai suurempi, ei tyhjä. $pros1 = @round($osa[1] / $yht * $koko, 0); // lasketaan prosenttimäärä yksittäisestä vastauksesta -> $pros2 = $koko - $pros1; // -> vastausten määrä / vaihtoehtojen määrällä * gallupin kuvaajien leveydellä $pro = @round($pros1 / ($koko/100), 0); } if($pro == "0"){ // jos joku vastaus ei ole saanut yhtään ääntä, tulostetaan vain yksi kuva siisteyden vuoksi $kuvat = "<img width='$koko' height='9' style='background:#336699' border=0>"; }elseif($pro == "100"){ // jos joku vastaus on saanut 100% ääniä, tulostetaan vain yksi kuva siisteyden vuoksi $kuvat = "<img width='$koko' height='9' id='p' border=0>"; }else{ // jos taas vastaus-prosentti on enemmän kuin 0% ja vähemmän kuin 100% - tulostetaan molemmat palkit $kuvat = "<img width='$pros1' height='9' id='p' border=0><img width='$pros2' height='9' id='n' border=0>"; } $pala = "<TR> <TD width='60'>$osa[1] - $pro%<BR><img width='60' height='1'></TD> <TD width='".($koko+5)."'>$kuvat</TD> </TR>\n"; }else{ $va = $s; $ky = $date; $vastaus = "<A HREF='$PHP_SELF?k=$ky&v=$va'>$osa[0]</A>"; // jos ei olla äänestetty, tulostetaan vastaus-vaihtoehdot } if($osa[1] == ""){ print"<TR>\n"; print" <TD$colspan><B style='font:bold 12px verdana'>$osa[0]<BR><BR></B></TD>\n"; // jos pisteitä ei ole, eli kyseessä on kysymys print"</TR>\n"; }else{ print"$pala"; print"<TR>\n"; print" <TD$colspan$right>$vastaus$space</TD>\n"; // jos pisteitä on, eli kyseessä on vastaus print"</TR>\n"; } } print"</TABLE>\n<br>"; if($k != "" && $v != "" && $_COOKIE[galluppi] != "voted"){ $vasa = explode("~¦~", $filu[$k]); $osa = explode("|", $vasa[$v]); $vote = $osa[1] + 1; // lisätään vanhaan ääneen yksi lisää, kun annetaan ääni $filu[$k] = str_replace("~¦~".$vasa[$v], "~¦~$osa[0]|$vote|", $filu[$k]); // korvataan vastauksen rivi uudella rivillä johon on lisätty ääni $rivi = implode("", $filu); $filu = fopen("galmo.txt", "w"); flock($filu, 2); fwrite($filu, $rivi); flock($filu, 3); fclose($filu); setcookie("galluppi", "voted", time()+604800, "/"); // keksi jottei voi äänestää uudestaan aivan heti... header("location: galmo.php"); // mennään katsomaan tulokset! } ob_end_flush(); ?> </td> </table>
Mulla kylläkin tämä gallup on index.php:ssä. Missä vika ? Yritän saada tän sivun reunaan index.php:hen ja kun sitä painaa niin gallup päivittyy..
Suomeksi: yrittää lähettää headerin kun sivun tiedosta on jo osa lähettetty. Käytännössä: aloita sivun ulostaminen vasta kun olet käsitellyt kaiken tiedon. Eli <?php täytyy alkaa tiedostossa ensimmäisenä eikä echoa tai muuta sivun tulostusta saa tehdä ennen kuin headerin yrittää lähettää.
No eikös tuossa jo moneen kertaan sanottu, että ennen ob_start()ia ei saa olla mitään? Otetaan ne silmät käteen ja katsotaan, eikä heti ruikuteta että ei toimi.
Sulla on HTML:ää ennen tuon puskuroinnin aloittamista, jolloin homma ei luonnollisestikaan toimi.
Edit: no olinpas hidas.
No siirsin ton obsin ylös ennen html:ää mut ei pelitä jos otan ton headerin tyystin pois ja setcookien niin sitten toimii mutta ei näytä tuloksia ? Milläs ton headerin korvaan jotta näyttäis samantien kun painaa tulokset..
Luetko avustajien viestit kokonaan?
(ja on muuten ilkeää ensin kirjoittaa aivan eri viesti ja sitten muokata se kokonaan erilaiseksi saman tien)
Kyllä ne luetaan mutta kun toi koodin pätkä on vaan yksi osa isosta koodista eli onks tossa pätkässä jotain virheitä ? Olen nyt korjannut ja siirtänyt ob_startin ennen html:ää.
Neuvona sitten: sen sijaan että pusket sivua ulos sitä mukaa kun sivu etenee ja siinä samalla käsittelet tietoa, muuta koodi sellaiseksi että ensin käsittelet sivun tiedot valmiiksi tulostamista varten (esim. talleta ulospukkaus muuttujaan $teksti) ja sitten vasta PHP-sivun lopuksi tulostat lopputuloksen ulos asti. Paljonhan sitä joutuu muokkaamaan kun on sinällään homman tehnyt aluksi väärin, mutta eipä tuota oikein muullakaan tavalla voi korjata. Helpolla ei pääse.
Kokeillaan.
Apuja kaivataan.. eli jos poistan ton headerin ja setcookiesin niin sitten pelaa mutta ei näytä tuloksia..
Jos käytät includea niin tuo puskurointi pitää tietysti aloittaa siinä tiedostossa jossa tulostetaan ensimmäiset html-rivit.
Eli jos sinulla tämä perinteinen index.php?sivu=jotain tyyppinen viritys, ob_start luonnolllisesti kuuluu tämän tiedoston(index.php) alkuun.
Eikä tuo koodi taida muutenkaan toimia ilman register_globals -asetusta.
Tuo sama T.M:n tekemä gallup on käytössä omilla sivuillani. Ja toimii mainiosti. Tapa jolla olen gallupin on include("galmo.php");
Ja tuo on siellä muun sivun joukossa. Ja galmo.php:ta en ole muokannut, muuta kuin ulkoasua.
Asiasta vielä toiseen miks toi näyttää samaa kysymystä kokoajan ?
Oon kyl kokeillut mut ei vaihda tota kysymystä vaikka melkein kaikkiin oon laittanut kysymyksen. Tota header erroria se vaan aukoo jatkuvalla syötöllä vaikka kokeilin tota include juttuakin enkä oo muutellut koodia.
Sainpas tonkin nyt pelittämään mut vielä kun sais noita kysymyksiä vaihdettua. Miksi toi kysymysten päivittäinen vaihtaminen ei toimi vai pitäiskö ton niinkun vaihtaa toi galluppi joka päivä automaattisesti ?
Tuota kuinka saan ton header("location: Eli sen sivun jossa on laittais automaattisesti ? Ei tarvis yksiloida mitaan..
Mitä järkeä on ohjata käyttäjä headerilla nykyiselle sivulle? Sehän on vain ikuinen silmukka.
No niin se pelittää..saakos tohon sellaista systeemiä, että ei vois äänestää kuin kerran eli tallentais ip-osoitteet joten ei vois äänestää kun kerran nimittäin jos piparit tyhjentää niin voi äänestää uudelleen..
Kyllä siihen semmoisenkin systeemin saa, mutta silloin blokkaat samalla ip:llä surffaavat äänestäjät automaattisesti pois.
Heitä ihmeesä koodi jos on..
No mikset tee itse?
Yksinkertaisuudessaan ohjelma olisi pseudokoodina tällainen:
if ( search_ip($my_ip) ){ // this bogger has already voted! header( "location:alreadyvote.php"); }
Tässä voisi tallentaa myös vastaajien ip:t vaikka tekstitiedostoon.
ip:n metsästys alkaa tästä: https://www.php.net/reserved.variables
Yksi tapa tuli mieleen, että tallennatkin taulukkoon, jossa
ip 127.1.1.1 löytyisi paikasta ip['127.1.1.1'] = true. eli kun tämä jantteri yrittää äänestää tarkistetaan vaikka array_searchilla onko tässä solussa arvo 'true'.
Tiedosto ajetaan ennen tallennusta serializella , ja ladattaessa ajetaan unserializen läpi.
Aina kun gallupin kysymys vaihtuu, tyhjennetään ip-osoitteiden tiedosto (tai nimetään toiseksi, jos halutaan tutkia vastaajia)
Kiitos kokeilen tolla saada jotain aikaiseksi. Tuota mikähän on kun mulla näyttää tuota samaa kysymystä kokoajan vaikka olen kaikki 52 kysymystä kirjoittanut ?
Aihe on jo aika vanha, joten et voi enää vastata siihen.