Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, esse código se destina a editar posts de url para pegar vídeos do YT. Ele seleciona perfeitamente, mas não grava a edição. O que está errado nele? Não dá nenhuma mensagem de erro. O mysql está normal. Alguém pode me ajudar?
<?php
$seleciona = mysql_query("SELECT * FROM yt WHERE '".$_GET['id']."'") or die(mysql_error());
while($res_id = mysql_fetch_array($seleciona)){
$id = $res_id['id'];
$url = $res_id['url'];
}
if(isset($_POST['editar'])){
$url = $_POST['url'];
$id = $_POST['id'];
$atualiza = mysql_query("UPDATE yt SET id = '$id', url = '$url' WHERE '".$_GET['id']."'") or die(mysql_error());
if($atualiza = '0'){
echo "Erro ao publicar";
}else{
echo "Dados atualizados com sucesso";
}
}
?>A sintaxe do WHERE está errada.
Havia feito um teste. Na verdade, está assim:
<?php
$id = $_GET['id'];
$seleciona = mysql_query("SELECT * FROM yt WHERE id = '$id'") or die(mysql_error());
while($res_id = mysql_fetch_array($seleciona)){
$id = $res_id['id'];
$url = $res_id['url'];
}
if(isset($_POST['editar'])){
$url = $_POST['url'];
$id = $_POST['id'];
$atualiza = mysql_query("UPDATE yt SET id = '$id', url = '$url' WHERE id = '$id'") or die(mysql_error());
if($atualiza = '0'){
echo "Erro ao publicar";
}else{
echo "Dados atualizados com sucesso";
}
}
?>Você checou no banco se o UPDATE está ocorrendo? Porque se estiver, o problema pode ser seu teste lógico você ao invés de comparar ( == ), você atribui ( = ) um zero literal à variável **$atualiza**.
E mesmo que que estivesse com o operador correto, você não deve comparar o retorno de mysql_query(), que só pode ser um recurso no sucesso ou FALSE caso contrário. COmo é um UPDATE, deveria ter usado [mysql_affected_rows()](http://www.php.net/mysql_affected_rows)Sim. Conferi o banco. Não atualiza.
Dá um echo nas variáveis $url e $id, provavelmente o $id esteja em branco, ai não retornaria erro e também não alteraria nada.
Ao dar echo, as variáveis $url e $id retornam os valores, sem problema.
Ao tentar editar, visualizo e modifico a url, mas não grava e nem dá erro.
Mostra pra mim o teu echo...
Mostra pra mim o teu echo...
Aí vai...
<?php
$id = $_GET['id'];
$seleciona = mysql_query("SELECT * FROM yt WHERE id = '$id'") or die(mysql_error());
while($res_id = mysql_fetch_array($seleciona)){
$id = $res_id['id'];
$url = $res_id['url'];
}
if(isset($_POST['editar'])){
$url = $_POST['url'];
$id = $_POST['id'];
$atualiza = mysql_query("UPDATE yt SET id = '$id', url = '$url' WHERE id = '$id'") or die(mysql_error());
}
echo $url; echo " - "; echo $id;
?>
Abaixo, o form:
<form name="enviar" action="" method="post" enctype="multipart/form-data">
<input name="url" type="text" size="55" value="<?php echo $url; ?>" /><br />
<input name="id" type="hidden" value="<?php echo $id; ?>" /><br />
<input type="submit" name="enviar" value="enviar" /></form>Só pra constar... Você está ciente que ao atribuir os valores vindos de $_POST você está sobrescrevendo as variáveis de mesmo nome criadas pelo/dentro do while, né?
Sim, com possibilidade de alteração somente no campo $url.
E o mysql_error() mostra alguma coisa? Se não mostra, mas também não atualiza, seus alertas de erro estão ativados ou altos o suficiente?
Todos alertas: ini_set( 'display_errors', 1 ); error_reporting( E_ALL | E_STRICT );
Posto a tabela em questão, Bruno. Se quiser testar, agradeço.
--
-- Estrutura da tabela yt
--
CREATE TABLE IF NOT EXISTS `yt` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`categoria` varchar(255) COLLATE latin1_general_ci NOT NULL,
`autor` varchar(50) COLLATE latin1_general_ci NOT NULL,
`url` varchar(50) COLLATE latin1_general_ci NOT NULL,
`data` datetime NOT NULL,
`visitas` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Também testei assim. Mesma coisa. Não atualiza e não retorna erro, embora eu posso visualizar no form os valores publicados e que desejo alterar:
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL | E_STRICT );
$id = $_GET['id'];
$seleciona = mysql_query("SELECT * FROM yt WHERE id = '$id'") or die(mysql_error());
while($res_id = mysql_fetch_array($seleciona)){
$id = $res_id['id'];
$url = $res_id['url'];
if($mysql_num_rows($seleciona) == 'TRUE'){
$atualiza = mysql_query("UPDATE yt SET url = '$url' WHERE id = '$id'") or die(mysql_error());
}
}
//No teste abaixo, retorna os valores, sem problema.
echo $url; echo " - "; echo $id;
?>Bom, não sei qual o objetivo desse código porque pelo fragmento acima não faz sentido pra mim. Porém, como eu disse no post #4 você está errando nos seus testes lógicos.
mysq_nul_rows() retorna um número inteiro em caso de sucesso ou o tipo booleano FALSE em caso de falhas.
Você está comparando o resultado da função com a string TRUE (ao invés do tipo booleano), que não combina com nenhum dos retornos válidos para a função em questão.
Tanto é verdade que trocando a linha em questão para:
if( mysql_num_rows( $seleciona ) !== FALSE ) {
Passa a funcionar.
Porém, sua abordagem está equivocada. Você deve invocar essa função FORA do while para que só entre no loop se houver resultados.
>
Bom, não sei qual o objetivo desse código porque pelo fragmento acima não faz sentido pra mim. Porém, como eu disse no post #4 você está errando nos seus testes lógicos.
mysq_nul_rows() retorna um número inteiro em caso de sucesso ou o tipo booleano FALSE em caso de falhas.
Você está comparando o resultado da função com a string TRUE (ao invés do tipo booleano), que não combina com nenhum dos retornos válidos para a função em questão.
Tanto é verdade que trocando a linha em questão para:
if( mysql_num_rows( $seleciona ) !== FALSE ) {
Passa a funcionar.
Porém, sua abordagem está equivocada. Você deve invocar essa função FORA do while para que só entre no loop se houver resultados.
Testei desse modo. O resultado é o mesmo: não dá erro, retorna os valores ($url e $id) normalmente, mas não grava no banco de dados.
>
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL | E_STRICT );
$id = $_GET['id'];
$seleciona = mysql_query("SELECT * FROM yt WHERE id = '$id'") or die(mysql_error());
while($res_id = mysql_fetch_array($seleciona)){
$id = $res_id['id'];
$url = $res_id['url'];
}
if($id == 'id'){
$atualiza = mysql_query("UPDATE yt SET url = '$url' WHERE id = '$id'") or die(mysql_error());
}
//No teste abaixo, retorna os valores, sem problema.
echo $url; echo " - "; echo $id;
?>Amigos, surgiu uma luz. MUDEI o nome do banco de dados, que era YT, igual ao da tabela YT, e o erro apareceu, usando o script abaixo.
Erro: Notice: Undefined variable: url in /var/www/yt/admin/editar.php on line 24.
>
A linha 24 corresponde ao form, no input $url. Quando solucionado. supunho que vá dar o mesmo erro com $id.
Se dou echo em $url e $id, retorna: Notice: Undefined variable: url in /var/www/yt/admin/editar.php on line 20, 22, linhas que correspondem a essa providência.
O Serra tinha razão: as variáveis com problema.
<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL | E_STRICT );
$id = $_GET['id'];
$seleciona = mysql_query("SELECT * FROM yt WHERE id = '$id'") or die(mysql_error());
while($res_id = mysql_fetch_array($seleciona)){
$id = $res_id['id'];
$url = $res_id['url'];
if(isset($_POST['editar'])){
$id = $_POST['id'];
$url = $_POST['url'];
$atualiza = mysql_query("UPDATE yt SET id = '$id', url = '$url' WHERE id = '$id'") or die(mysql_error());
}
}
?>
<form name="enviar" action="" method="post" enctype="multipart/form-data">
<input name="url" type="text" size="55" value="<?php echo $url; ?>" /><br />
<input name="id" type="hidden" size="55" value="<?php echo $id; ?>" /><br />
<input type="submit" name="enviar" value="enviar" class="meuBotao" /></form>
A sintaxe do WHERE está errada.