Jump to content
Knot

Alternar entre tabelas

Recommended Posts

Knot

Boas!

Estou a usar o seguinte tutorial, com algumas modificações para gerir uma pequena base de dados para um site pessoal:

http://www.portugal-a-programar.pt/index.php?showtopic=44442

Alguém me pode dar ideias de como criar uma dropbox que me permita escolher tabela1, tabela2, tabela3, etc e trabalhar com mais do que uma tabela? Pelo tutorial em cima o nome da tabela está dentro do config.php.

A ideia seria colocar algo tipo isto:

<form action="index.php" method="post">
<select name="tabelas">
  <option value="table1">Tabela 1</option>
  <option value="table2">Tabela 2</option>
  <option value="table3">Tabela 3</option>
  <option value="table4">Tabela 4</option>
</select>
<input type="submit" value="Submit" />
</form>

E depois de alguma forma o

define('TBL1',	'streams');

ir buscar o valor submetido...

Se alguém me puder dar umas dicas agradeço!

Share this post


Link to post
Share on other sites
pmg
     if ($_POST['tabelas'] == 'table1') $inputtable = TBL1;
else if ($_POST['tabelas'] == 'table2') $inputtable = TBL2;
else if ($_POST['tabelas'] == 'table3') $inputtable = TBL3;
else                                    $inputtable = TBL4;

$sql = "select ... from $inputtable ...";


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Boas!

Pois isso já tinha tentado mais ou menos, o mal é que para mostrar a base de dados funciona, mas quando vou trabalhar dentro da base de dados "salta fora" para o ultimo else...

Share this post


Link to post
Share on other sites
pmg

Tens que guardar a informação da "tabela activa". Podes guardar numa variavel de sessão (lembra-te do session_start()) ou na base de dados ou, possivelmente, doutra maneira qualquer ...

$_SESSION['inputtable'] = $inputtable;

$sql = "select ... from {$_SESSION['inputtable']} ...";


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Pois com session_start estive aqui a tentar meter a funcionar mas nao sei bem... 😳

Tentei guardando o valor numa tabela da base de dados e funciona, tirando o facto de dar sempre erro ao inicio pq não lê o valor escolhido como padrão.

Não deveria ser assim?

<option selected="tabela1">Tabela 1</option>

Para automaticamente ser lido o valor "tabela1" ?

Share this post


Link to post
Share on other sites
pmg

Essa versão não está de acordo com as nepes

Em HTML 4 (http://www.w3.org/TR/1998/REC-html40-19980424/interact/forms.html#h-17.6) é assim

<option value="tabela1" selected>Tabela 1</option>

Em XHTML (http://www.w3.org/TR/xhtml1/#h-4.5), acho que é assim

<option value="tabela1" selected="selected">Tabela 1</option>


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Eu criei um ficheiro chamado muda.php, o qual tem o seguinte conteudo:

<form action="muda.php" method="post">
<select name="tabelas">
  <option value="tabela1" selected="selected">Tabela 1</option>
  <option value="tabela2" >Tabela 2</option>
</select>
<input type="submit" value="Submit" />
</form>

<?php
$tabelas=$_POST["tabelas"];
$link = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('base_dados'); 
mysql_query("UPDATE base SET campo1 = '$tabelas' ");
mysql_close($link);
?>

Supostamente nao deveria ir buscar o valor por defeito e coloca-lo na base de dados?

É que assim inicia-me sempre com valor nulo na base de dados, só fazendo a escolha e fazendo Submit é que é enviado para a base de dados um valor correto...

Share this post


Link to post
Share on other sites
pmg

O <form> e o PHP "correm" em tempos diferentes: primeiro corre o PHP, antes do <form>, e por isso o $_POST['tabelas'] nao existe. Depois, no lado do cliente e que corre o <form> (mas nessa altura ja o PHP correu ha muito tempo).

Ao fazer um submit, o PHP volta a correr, desta vez com o $_POST['tabelas'] preenchido ... e o <form> e novamente apresentado!

Eu costumo fazer assim, separando o submit da apresentacao do <form>

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    /* trata do submit, por exemplo */
    $tabelas = SQLsanitize($_POST['tabelas']); /* ATENCAO AS INJECCOES DE SQL */
    $sql = "update base set campo1 = '$tabelas'";
    /* ... */
    header('Location: thankyou.php');
    exit('Redireccionado para a <a href="thankyou.php">pagina de agradecimento</a>.');
} else {
    echo '<form action="" method="post">';
    /* ... */
    echo '</form>';
}

Para usar o meu codigo precisas de definir a funcao SQLsanitize() que torna a string de input boa para usar no SQL (a maneira de o fazer muda consoante a base de dados que estas a usar)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Da maneira que tu tinhas dito fiz assim dentro do config.php

if ($_POST['tabelas'] == 'table1') $inputtable = tabela1;
else if ($_POST['tabelas'] == 'table2') $inputtable = tabela2;
else if ($_POST['tabelas'] == 'table3') $inputtable = tabela3;
else                                    $inputtable = tabela4;

$_SESSION['inputtable'] = $inputtable;
define('TBL1',	$_SESSION['inputtable']);

Já não há o problema de não ler o valor inicial, pois vai sempre buscar o último else e fica resolvido, depois para visualizar as tabelas também funciona, mas na altura de gravar não dá qualquer erro, mas também não grava nada...

Desta tua maneira até seria mais interessante pq ao escolher entre tabela a página faz o refresh do index.php e fico logo na tabela desejada, enquanto que da maneira que fiz tenho sempre de actualizar manualmente o index.php, uma vez que a action do form se destina ao mudar.php

Se tu ou alguém me puder dar umas luzes agradeço, pois percebo quase nada disto, ainda estou a começar...

Edit: entretanto vou testar o que deixaste agora na msg em cima! Obrigado

Share this post


Link to post
Share on other sites
Knot

Pois não consegui com o que colocaste em cima.

Já tentei usando a sessão mas não consigo. Será que poderias explicar melhor como utilizar com sessão? É que quando vou guardar os dados não me dá erro, mas também nada é guardado na tabela que selecionei...

No ficheiro config.php coloquei assim:

# tabela1

if ($_POST['tabelas'] == 'table1') $inputtable = tabela1;
else if ($_POST['tabelas'] == 'table2') $inputtable = tabela2;
else if ($_POST['tabelas'] == 'table3') $inputtable = tabela3;
else                                    $inputtable = tabelageral;

$_SESSION['inputtable'] = $inputtable;
define('TBL1',	$_SESSION['inputtable']);	// Nome da tabela
define('TBL1_CMP1', 'campo1');	// Nome do campo 1 da tablela "TBL1" (tabela1)
define('TBL1_CMP2', 'campo2');	// Nome do campo 2 da tablela "TBL1" (tabela1)
define('TBL1_CMP3', 'campo3');	// Nome do campo 3 da tablela "TBL1" (tabela1)
define('TBL1_CMP4', 'campo4');	// Nome do campo 4 da tablela "TBL1" (tabela1)
define('TBL1_CMP5', 'campo5');	// Nome do campo 5 da tablela "TBL1" (tabela1)
define('TBL1_CMP6', 'campo6');	// Nome do campo 6 da tablela "TBL1" (tabela1)
define('TBL1_CMP7', 'campo7');	// Nome do campo 7 da tablela "TBL1" (tabela1)
define('TBL1_CMP8', 'campo8');	// Nome do campo 8 da tablela "TBL1" (tabela1)

No ficheiro index.php coloquei assim:

<form action="index.php" method="post">
<select name="tabelas">
  <option value="table1" >Tabela1</option>
  <option value="table2" >Tabela2</option>
  <option value="table3" >Tabela3</option>
</select>
<input type="submit" value="Submit" />
</form>

Depois nos outros ficheiros não alterei nada, uma vez que o TBL1 é definido no config.php

Share this post


Link to post
Share on other sites
pmg

So podes ter "valores escalares" no define: http://pt2.php.net/manual/pt_BR/function.define.php

ou seja: a tua definicao de TBL1 esta ilegal (as outras estao bem).

Experimenta fazer o que queres sem os defines, com os nomes das tabelas e campos fazendo parte do codigo (pois, nao e tao boa pratica de programacao, mas torna uma primeira abordagem ao problema maisfacil ... depois corriges se achares necessario)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Já tentei substituir em todo o lado TBL1 por $_SESSION['inputtable'] mas mesmo assim não me funciona. O problema está no guardar.php pois no selecionar.php seleciona bem a base de dados para visualização, quando faço o editar/guardar que está definido no guardar.php é que não funciona...

O guardar.php original é este:

<?php

        // Verifica se a constante INDEX está definida. Se não estiver, significa
        // que o utilizador está a aceder a esta página directamente
        if( ! defined( 'INDEX' ) ) {
       
                die( _( 'Não pode aceder directamente a esta página' ) );
       
        }
       
        // Nome dos campos do formulário para verificar se é o original.
        // Repara que não coloquei o "cmp6", pois no caso dos checkboxes e dos
        // selects com a propriedade multiple, quando nenhum valor é checkado, não
        // aparece nada no array $_POST, ao contrário dos inputs do tipo text que
        // aparecem como strings vazias.
        $campos = array( 'token', 'cmp1', 'cmp2', 'cmp3', 'cmp4', 'cmp5',
                         'cmp7', 'guardar' );
       
        // 1º Se o array $_POST tiver chaves, então significa que o formulário foi submetido
        // 2º Se os valores do array $campos existirem nas chaves do array $_POST,
        // então significa que o formulário não foi alterado (aqui não uso
        // array_values( $campos ) === array_keys( $_POST ), por causa dos inputs
        // checkboxes e selects com a propriedade multiple, daí ter criado a função array_keys_exist()
        // 3º Se a chave SESS_TOKEN existir, significa que o utilizador está ou
        // esteve no nosso site e ainda não fechou o browser
        // 4º Se a chave SESS_TOKEN for idêntica (igual e do mesmo tipo) à enviada
        // no formulário, garante-nos que enviou o formulário através do nosso site,
        // porque sempre que abre/recarrega/submete a página/formulário é gerado um novo token
        if( $_POST &&
            array_keys_exist( array_values( $campos ) , $_POST ) &&
            isset( $_SESSION[sESS_TOKEN] ) &&
            $_SESSION[sESS_TOKEN] === $_POST['token'] ) {
               
                /**
                 * Validações
                 */
               
                // Limpamos o array campos, pois vamos utilizá-lo para guardar os dados
                // validados correctamente e/ou os erros
                $campos = array();
               
                // Verifica se é para criar um registo novo ou para editar
                $campo = trim( $_POST['cmp1'] );
               
                if( $campo ) {
                       
                        // Verifica se o valor é um número e é maior que "0" (zero)
                        if( ctype_digit( $campo ) && $campo > 0 ) {
                       
                                $campos['cmp1'] = $campo;
                       
                        } else {
                       
                                $campos['erros']['cmp1'] = 'O registo indicado não existe.';
                       
                        }
               
                }
               
                // Remove os espaços em branco do início e do fim da string, atribui o
                // resultado à variável $campo e verifica se tem, pelo menos, 1 caracter.
                // Também existe a função empty(), no entanto, caso o valor indicado
                // seja "0" (zero), esta função retorna FALSE.
                $campo = trim( $_POST['cmp2'] );
               
                if( strlen( $campo ) ) {
               
                        $campos['cmp2'] = md5( $campo ); // Cria um hash MD5
               
                } else {
               
                        $campos['erros']['cmp2'] = _('O "Campo 2" tem de ter um valor.');
               
                }
               
                // Verifica se só foram introduzidas letras, apóstrofos ('), hifens (-)
                // e espaços. Atenção esta expressão regular não é a melhor, esta permite
                // que sejam introduzidos alguns caracteres que os nomes não têm..
                // A melhor forma é utilizar função ctype_alpha. No entanto, para que esta
                // funcione bem (aceitando palavras acentuadas) é necessário definir o local.
                $campo          = trim( $_POST['cmp3'] );
                $pattern        = '/^[a-zA-ZÀ-ÿ\'\- ]{1,15}$/';
               
                if( $campo && preg_match( $pattern, $campo ) ) {
               
                        $campos['cmp3'] = $campo;
               
                } else {
               
                        $campos['erros']['cmp3'] = _('O "Campo 3" só pode conter letras e espaços.');
               
                }
               
                // Verifica se o campo tem, no mínimo, 1 caracter e se tem, no máximo,
                // 65535 caracteres (máximo que o campo do tipo TEXT aceita).
                $campo = trim( $_POST['cmp4'] );
               
                if( $campo && strlen( $campo ) < 65535 ) {
               
                        $campos['cmp4'] = $campo;
               
                } else {
               
                        $campos['erros']['cmp4'] = _('O "Campo 4" tem de ser preenchido.');
               
                }
               
                // Verifica se o valor introduzido é permitido
                $campo = $_POST['cmp5'];
                $valores = array( 'valor1', 'valor2' ); // Lista branca

                if( in_array( $campo, $valores ) ) {
               
                        $campos['cmp5'] = $campo;
               
                } else {
               
                        $campos['erros']['cmp5'] = _('O valor do "Campo 5" não é permitido.');
               
                }
               
                // Verifica se existe o "cmp6" no array $_POST, isto é, verifica se
                // foi checkado algum dos checkboxes do fieldset "Campo 6"
                if( isset( $_POST['cmp6'] ) ) {
                       
                        $campo = $_POST['cmp6'];
                       
                        // Verifica se o "Campo 6" é um array
                        if( is_array( $campo ) ) {
                       
                                // Lista branca com os valores do "Campo 6"
                                $valores = array( 'valor1', 'valor2', 'valor3' );
               
                                // Para cada checkbox seleccionada, verifica se o valor é permitido
                                foreach( $campo as $valor ) {
                               
                                        if( ! in_array( $valor, $valores ) ) {
                                       
                                                $campos['erros']['cmp6'] = _('Os valores indicados no "Campo 6" não são permitidos.');
                                               
                                                break;
                                       
                                        }
                               
                                }
                               
                                // Se não existir a chave "cmp6" no array $campos['erros'],
                                // então significa que todos os valores indicados são permitidos
                                // e colocam-se esses valores numa string separados por uma "," (vírgula)
                                if( ! isset( $campos['erros']['cmp6'] ) ) {
                               
                                        $campos['cmp6'] = implode( ',', $campo );
                               
                                }
                       
                        } else {
                       
                                $campos['erros']['cmp6'] = _('O valor indicado no "Campo 6" não é válido.');
                       
                        }
               
                } else {
               
                        $campos['cmp6'] = '';
               
                }
               
                // Verifica se o valor escolhido no "Campo 7" é permitido
                $valores = array( '0', '1' ); // Lista branca
               
                if( in_array( $_POST['cmp7'], $valores ) ) {
               
                        $campos['cmp7'] = $_POST['cmp7'];
               
                } else {
               
                        $campos['erros']['cmp7'] = _('O valor indicado no "Campo 7" não é permitido.');
               
                }
               
                // Verifica se campos foram validados correctamente
                if( ! isset( $campos['erros'] ) ) {
               
                        if( ! isset( $campos['cmp1'] ) ) { // Inserir
                       
                                // Cria a consulta SQL
                                $sql = 'INSERT INTO %s (%s, %s, %s, %s, %s, %s, %s)';
                                $sql.= 'VALUES(:cmp2, :cmp3, :cmp4, :cmp5, :cmp6, :cmp7, NOW())';
                               
                                $sql = sprintf( $sql, TBL1, TBL1_CMP2, TBL1_CMP3, TBL1_CMP4,
                                                TBL1_CMP5, TBL1_CMP6, TBL1_CMP7, TBL1_CMP8);
                               
                                try {
                               
                                        // Liga à base de dados
                                        $con = conectar();
                                       
                                        // Prepara a instrução SQL
                                        $stmt = $con->prepare( $sql );
                                       
                                        // Atribui os valores correspondentes aos parâmetros da consulta
                                        $stmt->bindValue( ':cmp2', $campos['cmp2'], PDO::PARAM_STR );
                                        $stmt->bindValue( ':cmp3', $campos['cmp3'], PDO::PARAM_STR );
                                        $stmt->bindValue( ':cmp4', $campos['cmp4'], PDO::PARAM_STR );
                                        $stmt->bindValue( ':cmp5', $campos['cmp5'], PDO::PARAM_STR );
                                        $stmt->bindValue( ':cmp6', $campos['cmp6'], PDO::PARAM_STR );
                                        $stmt->bindValue( ':cmp7', $campos['cmp7'], PDO::PARAM_INT );
                                       
                                        // Executa a consulta
                                        $stmt->execute();
                                       
                                        // Verifica se existem linhas afectadas pela instrução
                                        if( $stmt->rowCount() ) {
                                       
                                                $html = _('Registo efectuado com sucesso.');
                                       
                                        } else {
                                       
                                                $html = _('Ocorreu um problema ao registar na nossa base de dados.<br/>Por favor, tente novamente.');
                                       
                                        }
                                       
                                        // Fecha o cursor
                                        $stmt->closeCursor();
                                       
                                        // Fecha a conexão à base de dados
                                        $con = NULL;
                               
                                } catch ( PDOException $e ) {
                               
                                        pdoException( $e );
                               
                                }
                       
                        } else { // Adicionar
                               
                                // Cria a consulta
                                $sql = 'SELECT COUNT(*) AS n FROM %s WHERE %s = :cmp1';
                                $sql = sprintf( $sql, TBL1, TBL1_CMP1 );
                               
                                try {
                               
                                        // Cria a ligação à base de dados
                                        $con    = conectar();
                                       
                                        // Prepara a instrução SQL
                                        $stmt   = $con->prepare( $sql );
                                       
                                        // Atribui os valores aos parâmetros
                                        $stmt->bindValue( ':cmp1', $campos['cmp1'], PDO::PARAM_INT );
                                       
                                        // Executa a instrução SQL
                                        $stmt->execute();
                                       
                                        // Coloca o resultado da consulta na variável $result
                                        $result = $stmt->fetch( PDO::FETCH_ASSOC );
                                       
                                        // Fecha o cursor do
                                        $stmt->closeCursor();
                                       
                                        // Verifica se existe um e apenas um registo com o id indicado,
                                        // se não existir nenhum ou mais, algo de errado aconteceu
                                        if( $result['n'] === '1' ) {
                                       
                                                // Cria a consulta SQL
                                                $sql = 'UPDATE %s SET %s = :cmp2, %s = :cmp3, %s = :cmp4,';
                                                $sql.= '%s = :cmp5, %s = :cmp6, %s = :cmp7 WHERE %s = :cmp1';
                                                $sql = sprintf( $sql, TBL1, TBL1_CMP2, TBL1_CMP3, TBL1_CMP4,
                                                                TBL1_CMP5, TBL1_CMP6, TBL1_CMP7,
                                                                TBL1_CMP1 );
                                               
                                                // Prepara a instrução SQL
                                                $stmt = $con->prepare( $sql );
                                               
                                                // Atribui os valores correspondentes aos parâmetros da consulta
                                                $stmt->bindValue( 'cmp2', $campos['cmp2'], PDO::PARAM_STR );
                                                $stmt->bindValue( 'cmp3', $campos['cmp3'], PDO::PARAM_STR );
                                                $stmt->bindValue( 'cmp4', $campos['cmp4'], PDO::PARAM_STR );
                                                $stmt->bindValue( 'cmp5', $campos['cmp5'], PDO::PARAM_STR );
                                                $stmt->bindValue( 'cmp6', $campos['cmp6'], PDO::PARAM_STR );
                                                $stmt->bindValue( 'cmp7', $campos['cmp7'], PDO::PARAM_STR );
                                                $stmt->bindValue( 'cmp1', $campos['cmp1'], PDO::PARAM_INT );
                                               
                                                // Executa a instrução
                                                $stmt->execute();
                                               
                                                // Verifica se existem linhas afectadas pela instrução
                                                if( $stmt->rowCount() ) {
                                               
                                                        $html = _('Registo editado com sucesso.');
                                               
                                                } else {
                                               
                                                        $html = _('O registo indicado não existe.');
                                               
                                                }
                                               
                                                // Fecha o cursor
                                                $stmt->closeCursor();
                                               
                                                // Fecha a conexão à base de dados
                                                $con = NULL;
                                       
                                        }
                               
                                } catch ( PDOException $e ) {
                               
                                        pdoException( $e );
                               
                                }
                       
                        }
               
                } else {
               
                        $html = gerarErros( $campos['erros'] );
               
                }
       
        }
       
        // Verifica se existe a variável $html e mostra-a
        if( isset( $html ) ) {
       
                echo $html;
       
        }

?>

                <form action="" method="post">
                        <input type="hidden" name="token" value="<?php echo gerarToken() ?>" />
                        <input type="hidden" name="cmp1" value="<?php if ( isset( $_GET['id'] ) ) echo $_GET['id'] ?>" />
                        <input type="text" id="cmp2" name="cmp2" /> Campo 2<br />
                        <input type="text" id="cmp3" name="cmp3" /> Campo 3<br />
                        <input type="text" id="cmp4" name="cmp4" /> Campo 4<br />
                        <select id="cmp5" name="cmp5">
                                <option value="valor1">Valor 1</option>
                                <option value="valor2">Valor 2</option>
                        </select> Campo 5<br />
                        <fieldset>
                        <legend>Campo 6</legend>
                        <input type="checkbox" id="cmp6-1" name="cmp6[]" value="valor1" /> Valor 1<br />
                        <input type="checkbox" id="cmp6-2" name="cmp6[]" value="valor2" /> Valor 2<br />
                        <input type="checkbox" id="cmp6-3" name="cmp6[]" value="valor3" /> Valor 3<br />
                        </fieldset>
                        <fieldset>
                        <legend>Campo 7</legend>
                        <input type="radio" id="cmp7-1" name="cmp7" value="0" checked="checked" /> Valor 1<br />
                        <input type="radio" id="cmp7-2" name="cmp7" value="1" /> Valor 2<br />
                        </fieldset>
                        <input type="submit" id="guardar" name="guardar" value="Guardar" />
                </form>

Share this post


Link to post
Share on other sites
pmg

Já tentei substituir em todo o lado TBL1 por $_SESSION['inputtable'] mas mesmo assim não me funciona. ...

Como e que nao funciona?

Ha alguma mensagem da base de dados?

Ha alguma informacao no log do php?

Qual e o valor da variavel $sql depois de fazeres o sprintf?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Da base de dados não há mensagem nenhuma.

Onde posso ver o log e o valor da variável?

É que se desse erro eu ainda ia vendo pelo erro, mas é que não dá erro, mas também não aparece a informaçao de registo editado com sucesso e a base de dados continua com os campos inalterados.

Share this post


Link to post
Share on other sites
pmg

Para veres o log, se ainda nao estiver ligado ... liga-o no php.ini

http://pt.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

Se nao tens acesso ao php.ini, podes usar a funcao ini_set.

<?php
ini_set('error_reporting', E_ALL);
ini_set('log_errors', 1);
ini_set('error_log', '/path/to/writable/dir/and/file');
?>

E depois e so olhar para o ficheiro para ver os eventuais erros. Nota que podes por os erros a mostra na pagina propriamente dita, mas num ficheiro e melhor.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Acabei de fazer e não é mostrado nenhum erro no log. E por acaso até tinha aqui um log já a correr, não sabia era onde estava guardado e também não regista nada relativamente a isto...

Share this post


Link to post
Share on other sites
pmg

Estou a ficar sem ideias ...

Qual e o conteudo da variavel $sql depois do sprintf?

Experimenta mostrar directamente na pagina ou mete-a no log

$sql = sprintf(...);
error_log('Conteudo de $sql: ' . $sql);


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Não sabia bem como fazer por isso meti um echo "$sql" Passo1, Passo2, Passo3 para os 3 casos em que aparece $sql = sprintf(...);

É sempre imprimido "SELECT COUNT(*) AS n FROM Sport1 WHERE campo1 = :cmp1 Passo2 ", normal deveria imprimir o Passo2 e também o Passo3, uma vez que é no 3 que é feito o update.

Share this post


Link to post
Share on other sites
pmg

O POST está a ser mandado para o servidor como esperas? ???

Mete uma vizualização do array algures no principio do script para verificares ...

echo '<pre>$_POST ';
print_r($_POST);
echo '</pre>';


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Sim aparece:

$_POST Array

(

    [token] => 6aaa600160da225755869106d8c9994c

    [cmp1] => id1

    [cmp2] =>

    [cmp3] => fsfsf

    [cmp4] =>

    [cmp5] =>

    [cmp6] =>

    [cmp7] =>

    [guardar] => Guardar

)

Se quiseres testar criei um acesso FTP:

servidor: 94.23.217.141

user: knotteste

password: teste

Página para testar

http://www.tvdospobres.com/admin2/index.php

Os dados de acesso à base de dados estão no ficheiro config.php

Share this post


Link to post
Share on other sites
pmg

Depois do "select count(*)" e antes do "update" tens a certeza que o "$result['n']" é do tipo "string"?

A comparação

if( $result['n'] === '1' )

só é verdade se, além dos valores serem iguais, os tipos também forem, isto é, se "$result['n']" for dum tipo numérico a comparação nunca dá igual.

Experimenta uma relação de igualdade normal

if ($result['n'] == '1')

Podes verificar o tipo do "$result['n']" com

if (is_int($result['n'])) echo '$result[\'n\'] é inteiro';
else if (is_string($result['n'])) echo '$result[\'n\'] é uma string';
else echo '$result[\'n\'] não é nem inteiro nem string';


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Knot

Mas isso no original funciona tudo correctamente, a única alteração é mesmo o nome da tabela que em vez de ser definida passa a ser $_SESSION['inputtable'], por isso não acho que o erro esteja aí e acabei de testar e não resolveu nada mudar de === para ==

Penso que o problema esteja mais aqui:

if( $_POST &&

    array_keys_exist( array_values( $campos ) , $_POST ) &&

    isset( $_SESSION[sESS_TOKEN] ) &&

    $_SESSION[sESS_TOKEN] === $_POST['token'] )

No original funciona bem.

Mas depois no que pretendo fazer, se mantiver nunca funciona, se colocar apenas if( $_POST) funciona apenas para a tabela 1. Acho que deve haver aqui algum problema...

Share this post


Link to post
Share on other sites
pmg

E qual é a definição da função array_keys_exist()?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.