Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tive que fazer uma manutenção no sistema, acrescentar um campo e na hora de realizar um update não da dando.
Tentei várias variações, e pesquisei na web e não achei solução.
Uma página só tinha campos tipo texto e adicionar um select (combo)
Indique qual segmento se refere esta midia
<select name="fld_segmento">
<option selected value="">selecione</option>
<?php
$row = $tratar_midia->segmentos();
foreach ($row as $key => $value) {
echo '<option value="'.$value['idSeg'].'">'.$value['Seg'].'</option>';
}
echo '</select>';
?>e estre trecho envia os dados pra uma função
if (isset($_POST['submit'])){
$var = $tratar_midia->processa_dados_form(array_merge($_POST));
Na função, é adicionada uma data
extract($vars); // extrai campos do formulario
$_data_publicado = date("Y") . '-' . date("m") . '-' . date("d") . ' ' . date("H") . ':' . date("i") . ':' . date("s");
(!empty($fld_idm)) ? $this->editar_midia($vars, $_data_publicado) : "Nenhum arquivo de midia selecionado";e a outra função pega os dados do array e mais a data e grava
extract($vars);
$tabela = $this->seleciona_tabela_midia($fld_categoria); // seleciona tabela conforme categoria
if ($_edita = $mysqli->prepare("UPDATE `$tabela` SET `titulo_midia`=?,`texto_midia`=?,`fonte_midia`=?,`arquivo_link`=?,`arquivo_destacar_home`=?,`publicado_midia`=?, `segmento`=? WHERE `idm`=?") or $mysqli->errno)Antes estava assim e funcionava
ou seja não tinha o campo segmento
if ($_edita = $mysqli->prepare("UPDATE `$tabela` SET `titulo_midia`=?,`texto_midia`=?,`fonte_midia`=?,`arquivo_link`=?,`arquivo_destacar_home`=?,`publicado_midia`=? WHERE `idm`=?") or $mysqli->errno)
$_edita->bind_param('ssssisi', utf8_decode($fld_titulo), utf8_decode($fld_texto), utf8_decode($fld_fonte), $arquivo_link, $fld_arquivo_destacar_home, $_data_publicado, $fld_idm);
O campo ta certinho na tabelae ao gravar da esse erro
Fatal error: Call to a member function bind_param() on a non-object in ... admin-midia\includes\classes\tratar-midia.class.php on line 262
e a linha 262 é esta
$_edita->bind_param('ssssisii', utf8_decode($fld_titulo), utf8_decode($fld_texto), utf8_decode($fld_fonte), $arquivo_link, $fld_arquivo_destacar_home, $_data_publicado, utf8_decode($fld_segmento), $fld_idm);
Qualquer ajuda é bem vinda[/size]
O erro está acontencendo porque você não criou a variável $_edita, você a criou dentro de um IF e por isso diz que ela não é um objeto.
Não deve ser isto.
Porque já estava assim e funcionava.
Eis o código original.
if ($_edita = $mysqli->prepare("UPDATE `$tabela` SET `titulo_midia`=?,`texto_midia`=?,`fonte_midia`=?,`arquivo_link`=?,`arquivo_destacar_home`=?,`publicado_midia`=? WHERE `idm`=?") or $mysqli->errno)
$_edita->bind_param('ssssisi', utf8_decode($fld_titulo), utf8_decode($fld_texto), utf8_decode($fld_fonte), $arquivo_link, $fld_arquivo_destacar_home, $_data_publicado, $fld_idm);
Minha alteração foi ter incluído mais um parâmetro, que era originado de um select(combo).
E ficou assim.
if ($_edita = $mysqli->prepare("UPDATE `$tabela` SET `titulo_midia`=?,`texto_midia`=?,`fonte_midia`=?,`arquivo_link`=?,`arquivo_destacar_home`=?,`publicado_midia`=?, `segmento`=? WHERE `idm`=?") or $mysqli->errno)
$_edita->bind_param('ssssisii', utf8_decode($fld_titulo), utf8_decode($fld_texto), utf8_decode($fld_fonte), $arquivo_link, $fld_arquivo_destacar_home, $_data_publicado, utf8_decode($fld_segmento), $fld_idm);
if ($_edita = $mysqli->prepare("UPDATE `$tabela` SET `titulo_midia`=?,`texto_midia`=?,`fonte_midia`=?,`arquivo_link`=?,`arquivo_destacar_home`=?,`publicado_midia`=?, `segmento`=? WHERE `idm`=?") or $mysqli->errno)
$_edita->bind_param('ssssisii', utf8_decode($fld_titulo), utf8_decode($fld_texto), utf8_decode($fld_fonte), $arquivo_link, $fld_arquivo_destacar_home, $_data_publicado, utf8_decode($fld_segmento), $fld_idm);Qual a mensagem de erro que está sendo exibida pelo PHP?
Desculpa, eu panguei ao responder. Na verdade o problema é porque você está chamando a função bind_param() de uma variável aonde não faz referência ao objeto, ou seja, a variável $mysqli não está iniciando a conexão com o banco ou o arquivo de configuração com a conexão não está sendo carregando dentro da página.
Tenta verificar se o arquivo está sendo carregado corretamente na página ou se a variável foi iniciada corretamente.
Abraço.
O erro está na consulta.
[inline]$_edita[/inline] não está recebendo um [inline]mysqli_statement[/inline] e, por isso, não possui mais o método [inline]bind_param[/inline]
troque
if ($_edita = $mysqli->prepare("UPDATE $tabela SET titulo_midia=?,texto_midia=?,fonte_midia=?,arquivo_link=?,arquivo_destacar_home=?,publicado_midia=?, segmento=? WHERE idm=?") or $mysqli->errno)
por
$_edita = $mysqli->prepare("UPDATE `$tabela` SET `titulo_midia`=?,`texto_midia`=?,`fonte_midia`=?,`arquivo_link`=?,`arquivo_destacar_home`=?,`publicado_midia`=?, `segmento`=? WHERE `idm`=?") or die($mysqli->error);Deu certo Evandro Oliveira
Eu tava rateando é numa outra parte.
Havia 3 tabelas iguais e eu tinha alterado somente uma delas.
Mas ainda fica a curioridade.
Na versão anterior, sem o campo novo, funcionava com o $_edita dentro do IF
Com a consulta corrigida o [inline]$_edita[/inline] volta a funcionar dentro do [inline]if[/inline]
Amigo tira essa linha de dentro do IF:
O erro está acontencendo porque você não criou a variável $_edita, você a criou dentro de um IF e por isso diz que ela não é um objeto.
Tira esse If aí e faz o tratamento de erros usando o try e catch.
Abraço.