1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Erro estranho, variavel global php!?

Discussão em 'Web Development' iniciada por vpess, 6 de Junho de 2008. (Respostas: 6; Visualizações: 2827)

  1. vpess

    vpess Power Member

    Boas,

    Estou com um problema muito esquesito, eu tenho um site que tem um sistema de enquetes, sistema esse que no código utiliza a variavel global do php.

    Acontece que tinha o site alojado num subdominio free a funcionar a 100%, agora decidi colocá-lo num alojamento pago e essa parte da enquete não funciona. Fiz testes e mais testes e cheguei á conclusão que o problema é nas variaveis global.

    É possivel o problema ser do alojamento, ou seja, que bloqueie o código?

    O código é este:
    PHP:
    <table cellpadding="0" cellspacing="0" width="76%" border="1" bordercolor="#000000" class="style1">
                <tr>
                  <td height="22" align="left" background="imagens/topo_news.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Perguntas </td>
                </tr>
                <tr>
                  <td height="154" align="left" valign="middle" bgcolor="#333333" class="style1">
     
     
     
     
    <style type="text/css">
    font         { color: #000000; font-family: Tahoma; font-size: 10 px }
    </style>
     
     
    <?php
     
     
    // ###########################  head  ###################################
    // head: função que configura a página e inicializa a tabela
    //
    function head()
    {
        include(
    'admin/include/bd2.php');
     
     
        echo 
    "<table align=\"\" width=\"170\" height=\"\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" valign=\"top\">
            <tr><td bgcolor=\"
    $tableborder\">
            <table width=\"170\" height=\"0\" border=\"0\" valign=\"top\"
            cellpadding=\"0\" cellspacing=\"0\" align=\"\" valign=\"top\">
            <tr><td bgcolor=\"
    $bgcolor\">";
    // head
     
     
    // ###########################  foot  ###################################
    // foot: função que finaliza a tabela
    //
    function foot ()
    {
        echo 
    "</td></tr></table></td></tr></table>";
    // foot
     
     
    // ###########################  record  #################################
    // record: grava o endereço ip no arquivo $ip_file
    //
    function record($REMOTE_ADDR)
    {
        include(
    'admin/include/bd2.php');
     
     
        
    // abre o arquivo para escrita após a última linha.
        
    $fp=fopen("$ip_file""a+");
     
     
        
    // envia para o arquivo o ip e a hora
        
    fputs ($fp,$REMOTE_ADDR."][".time()."\n");
        
    fclose($fp); // fecha o arquivo
    // record
     
     
    // ###########################  chech  #################################
    // check: função que checa se o ip já está gravado
    //
    function check($REMOTE_ADDR)
    {
        include(
    'admin/include/bd2.php');
        global 
    $valid;
        
    $ip=$REMOTE_ADDR;
        
    $data=file("$ip_file");
        
    $now=time();
        foreach (
    $data as $record)
        {
            
    $subdata=explode("][",$record);
            if (
    $now < ($subdata[1]+3600*$timeout))
            {
                if (
    $ip == $subdata[0])
                {
                    
    $valid=0;
                    break;
                }
            }
        }
    }
    // check
     
     
    // ###########################  save  ##################################
    // save: função que computa o voto
    //
    function save($opcao)
    {
        global 
    $opcao;
        include(
    'admin/include/bd2.php');
        
    $data=file($datafile);
        
    $subdata=explode("][",$data[$opcao]);
        
    $subdata[2]+=1;
        
    $data[$opcao]=implode("]["$subdata);
        
    $data[$opcao]=$data[$opcao]."\n";
        
    $fp=fopen($datafile,"w+");
        
    $a=0;
     
     
        do {
            
    fputs($fp,$data[$a]);
            
    $a++;
        } while(
    $a<count($data));
     
     
        
    fclose($fp);
    }
    // fim save
     
     
    // ###########################  form  ##################################
    // form: função que cria a tabela para votação
    //
    function form($PHP_SELF)
    {
        include(
    'admin/include/bd2.php');
        
    head(); //inicializa a tabela
        
    echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><form method=\"post\" action=\"home.php\"><p align=\"left\">";
        
    $data=file($datafile);
        
    $question=$data[0];
         
    $nb_options=count($data)-1;
        echo 
    "<br><span class='erro55'><strong><center>$question</center></strong></span><br>";
        for(
    $nb=1;$nb <= $nb_options$nb++)
        {
            
    $option=explode("][","$data[$nb]");
            echo 
    "<input type=\"radio\" name=\"opcao\" value=\"$nb\"> ";
            echo 
    "<span class='texto53'><strong>$option[0]</strong></span><br>";
        }
     
     
        echo 
    "<center><input type=\"hidden\" name=\"save\" value=\"yes\">";
        echo 
    "<input name=\"I7\" type=\"image\" id=\"ok\" src=\"admin/include/imgs/bot_votar.gif\">";
        echo 
    "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\">
      <img border=\"0\" src=\"admin/include/imgs/espaco.gif\" width=\"5\" height=\"25\">
      <a href=\"home.php?action=results\">
            <img border=\"0\" src=\"admin/include/imgs/bot_result.gif\"></font></p></center>"
    ;
        
    foot();// fecha a tabela
    }// form
     
     
    // ###########################  results  ##################################
    // results: função que imprime os resultados
    //
    function results()
    {
        include(
    'admin/include/bd2.php');
     
     
        
    head();
     
     
        
    $data=file($datafile);
        
    $nb_answers=count($data);
        
    $votes=0;
        
    $a=1;
     
     
        do { 
    // calcula o total de votos
            
    $subdata=explode("][",$data[$a]);
            
    $votes += $subdata[2];
            
    $a++;
        } while(
    $a $nb_answers);
     
     
        
    $a=1;
        
    $b="answerv";
        if(
    $votes!=0)
            
    $v=100/$votes//descobre o valor de 1 voto em %
        
    echo "<p><font size=\"$fontsize\" face=\"$font\"
            color=\"
    $textcolor\"><b><span class='erro55'><center>$data[0]</center></span><br></b>";
     
     
        do {
            
    $subdata=explode("][",$data[$a]);
            
    $av $subdata[2] * $v// calcula a porcentagem de cada opção
            
    $p2v 100-$av;
            echo 
    "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><span class='texto53'>&nbsp;&nbsp;$subdata[0] ";
            echo 
    " - $subdata[2] votos<br></span>";
            echo 
    "&nbsp;<img src=\"$subdata[1]\" border=\"0\" width=\"$av\" height=\"10\"><img src=\"admin/include/imgs/imgfund.gif\" width=\"$p2v\" height=\"10\">";
            
    printf("<span class='texto53'><strong> %01.1f</strong>"$av);
            echo
    "%<br></span>";
            
    $a++;
        } while (
    $a $nb_answers);
     
     
        echo 
    "<img border=\"0\" src=\"admin/include/imgs/bar_sep.gif\" width=\"100%\" height=\"5\"><br><font size=\"$fontsize\">
            <span class='erro55'><strong><center>Total: 
    $votes votos!</center></strong></span>";
        echo 
    "";
        
    foot(); //fecha a tabela
    }// results
     
     
    // ###########################  execução  ################################
    // execução da página
    //
    check($REMOTE_ADDR);
     
     
     
     
     
     
    echo 
    $action;
    echo 
    $save;
    echo 
    $valid;
    echo 
    $opcao;
     
     
    if (
    $action=="results"// se clicar para ver os resultados
    {
        
    results();
        echo 
    '<center><a href="home.php" class="texto53">voltar</a></center>';
    }
    elseif (
    $save=="yes" && $valid!="0" && !empty($opcao)) // se votou e o ip ainda não foi gravado
    {
        
    save($opcao); // computa o voto
        
    record($REMOTE_ADDR); // grava o ip
        
    results(); // mostra os resultados
        
    echo '<center><a href="home.php" class="texto53">voltar</a></center>';
    }
    elseif (
    $save=="yes" && empty($opcao)) // se enviou o voto, sem
                                 // marcar uma opção
    {
        
    form($PHP_SELF);
    }
    elseif (
    $action!="save" && $valid!="0"// se ainda não enviou o voto,
                                // mas uma opção está marcada
    {
        
    form($PHP_SELF);
    }
    elseif (
    $save=="yes")// se votou e o seu ip está registado
    {
        echo 
    '<span class="fontedestaque_red"><strong><center>Você já votou!</center></strong></span><br>';
        
    results();
            echo 
    '<center><a href="home.php" class="texto53">voltar</a></center>';
    }
    else
    {
        
    form($PHP_SELF);
    }
    ?>
     
     
                </tr>
              </table><br>

    O que acham que será?

    Cumps.
     
  2. p3dro

    p3dro Power Member

    Posso tentar adivinhar onde tens o dominio alojado? :x2:

    Por omissão as variáveis globais estão desactivas, não sei se foste tu que fizeste o script, mas se foste habitua-te a trabalhar sem recorreres a variáveis globais :)

    O código não é bloqueado, apenas o PHP não "reconhece" aquelas variáveis e como tal poderá não funcionar como tu esperas, acho que podes activar as variáveis globais no .htaccess adicionando isto:

    php_flag register_globals on
     
    Última edição: 6 de Junho de 2008
  3. anjo2

    anjo2 Power Member

    Não funciona isso, só funcionava do php4 para baixo, praticamente todos os servidores teem php5 agora
     
  4. p3dro

    p3dro Power Member

    O php_flag register_globals on já não funciona? Bem, para ser sincero nunca usei, apenas googlei e encontrei essa solução, my fault pela informação incorrecta :(

    anjo2 então agora é de todo impossivel activar as variáveis globais?
     
  5. vpess

    vpess Power Member

    exactamente,

    é msm por causa disso.

    Problema resolvido.


    Cumps.
     
  6. anjo2

    anjo2 Power Member

    Podes, onde tens o alojamento ou pedes que te activem (como não é seguro geralmente está inactivo), pelo que provavelmente podem-te fazer um php.ini diferente para a tua conta, mas este geralmente é pago (variaveis globais geralmente é activo por causa do ecommerce)

    Conselho, não uses scripts com variáveis globais.
     
  7. p3dro

    p3dro Power Member

    Obrigado pelo esclarecimento, por acaso ia-te falar nessa questão do e-commerce :)

    Essa das variáveis globais chegou a experiencia do 1º site que coloquei online :D
     

Partilhar esta Página