Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MuitoCurioso

Não grava edição

Recommended Posts

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";
}
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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";
}
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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()

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.