Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos,
Estou com um problema e não estou conseguindo resolver, se alguem souber, por favor ajude.
Seguinte, criei uma pagina de cadastro de noticias para um site que estou desenvolvendo, quando chamo a pagina diretamente no navegador tudo funciona perfeitamente, porem, eu estou utilizando um switch e includes para chamar as paginas de administracao, entao fica assim: index.php?pagina=cadastrar_noticia
e quando acesso deste modo, a pagina de cadastro eh carregada completamente mas com alguns erros no topo da pagina:
Notice: Undefined index: nm_titulo in \htdocs\kleber\novo_admin\cadastrar_noticia.php on line 6
Notice: Undefined index: nm_intertitulo in \htdocs\kleber\novo_admin\cadastrar_noticia.php on line 7
Notice: Undefined index: nm_data in \htdocs\kleber\novo_admin\cadastrar_noticia.php on line 8
Notice: Undefined index: nm_horario in \htdocs\kleber\novo_admin\cadastrar_noticia.php on line 9
Notice: Undefined index: texto in \htdocs\kleber\novo_admin\cadastrar_noticia.php on line 10
Notice: Undefined index: nm_jornalista in \htdocs\kleber\novo_admin\cadastrar_noticia.php on line 11
[code]
agora se eu acessar a pagina diretamente digitando cadastrar_noticia.php no navegado tudo funciona perfeitamente, porem fico sem o menu que faz o include.
o include:
[code]
<?
if(isset($_GET['pagina'])){
switch($_GET['pagina']){
case "cadastrar_noticia" :
include_once("cadastrar_noticia.php");
break;
}
}include ("meio.php");
}<?
$conexao = mysql_connect("****","*","****"); //Faz conexão com o mysql
$db = mysql_select_db("comunicacao");
include "fckeditor/fckeditor.php";
$titulo = $_POST['nm_titulo'];
$subtitulo = $_POST['nm_intertitulo'];
$data = $_POST['nm_data'];
$hora = $_POST['nm_horario'];
$texto = $_POST['texto'];
$jornalista = $_POST['nm_jornalista'];
if (isset($_POST['texto'])){
$sql = "INSERT INTO noticias (id_noticia, nm_titulo, nm_intertitulo, nm_data, nm_horario, nm_texto, nm_jornalista) VALUES (NULL, '$titulo', '$subtitulo', '$data', '$hora', '$texto', '$jornalista')";
$result = mysql_query($sql) or die(mysql_error());
header("Location: editor_mostra.php");
}
?>
o formulario da mesma pagina cadastrar_noticia.php
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><form method="post" action="<?=$_SERVER['PHP_SELF']?>" >
<table width="100%" border="0" cellpadding="0" cellspacing="01">
<tr>
<td height="20" colspan="2" valign="middle" bgcolor="#efefde"><div align="left" id="txt_titulo" class="texto-cadastro"> Título
da Matéria:
<input name="nm_titulo" type="text" id="nm_titulo" size="80">
</div></td>
</tr>
<tr valign="middle">
<td height="20" colspan="2" bgcolor="#efefde"> <span class="texto-cadastro" id="txt_intertitulo">Subtítulo:
</span> <input name="nm_intertitulo" type="text" size="80"> </td>
</tr>
<tr valign="middle">
<td width="48%" height="20" bgcolor="#efefde"> <div align="left"> <span class="texto-cadastro" id="txt_data">Data:</span>
<input name="nm_data" type="text" value="<?php echo date('d/m/y'); ?>" size="10">
</div></td>
<td width="52%" bgcolor="#efefde"><div align="left"> <span class="texto-cadastro" id="txt_hora">Horário: </span>
<input name="nm_horario" type="text" value="<?php echo date("H:m"); ?>" size="8">
</div></td>
</tr>
<tr>
<td height="20" colspan="2" valign="middle" bgcolor="#efefde"> <span class="texto-cadastro" id="txt_texto">Texto da Matéria:</span></td>
</tr>
<tr>
<td colspan="2" valign="top" bgcolor="#efefde"><div align="center"><b> </b>
<?php
$oFCKeditor = new FCKeditor('texto');
$oFCKeditor->BasePath = './fckeditor/';
$oFCKeditor->Value = '';
$oFCKeditor->Create();
?>
</div></td>
</tr>
<tr>
<td colspan="2" valign="top" bgcolor="#efefde"> <span class="texto-cadastro" id="txt_jornalista">Jornalista:</span>
<input name="nm_jornalista" type="text" value="<?php echo $dados['nome']; ?>" size="25"> </td>
</tr>
</table>
<p align="center">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="322"> </td>
<td width="17"> <input type="submit" name="cadastrar" value="Cadastrar" class="botao">
</td>
</tr>
</table>
</form></td>
</tr>
</table>
se alguem puder ajudar, ficarei grato.
tem mais, soh postei uma parte =)
A página está sendo chamada por post ?
nao, a pagina esta sendo chamada por link normal no navegador...
/index.php?pagina=cadastrar_noticia
O array $_POST só existe quando o método da requisição é post.
Quando eu acesso a pagina diretamente
/cadastrar_noticia.php
funciona perfeitamente, soh da esse erro se eu usar o querystring
/index.php?pagina=cadastrar_noticia
O formulário e a action estão no mesmo arquivo, certo?
Gerou o Notice, pois você tentou atribuir algo que ainda não existia, pois o formulário ainda não foi enviado.
if(isSet($_POST['nm_titulo']))
$titulo = $_POST['nm_titulo'];
if(isSet($_POST['nm_intertitulo']))
$subtitulo = $_POST['nm_intertitulo'];
...Assim a atribuição só vai ocorrer qndo os POSTs existirem.vou testar agora e ja te digo, obrigado pela ajuda que esta me dando e pelas respostas rapidas William ! >D
Ok, os erros sumiram, mas ele nao ta cadastrando no BD, quando eu clico em cadastrar apenas retorna pra pagina inicial de admin, ou seja, ele inclui o meio.php e nao posta nada...
Para vermos oque ocorre, faça o seguinte:
if (isset($_POST['texto'])){
$sql = "INSERT INTO noticias (nm_titulo, nm_intertitulo, nm_data, nm_horario, nm_texto, nm_jornalista) VALUES ('$titulo', '$subtitulo', '$data', '$hora', '$texto', '$jornalista')";
$result = mysql_query($sql) or die(mysql_error());
// header("Location: editor_mostra.php");
}O campo: "id_noticia", é um auto_increment, ne!?Só tirei o header, para mostrar o error...simplesmente volta para a pagina inicial ou seja, meio.php
da uma olhada no index.php que usa o meio.php no include caso o pagina nao esteja setada...
talvez ajude
<?
if(isset($_GET['pagina'])){
switch($_GET['pagina']){
case "cadastrar_noticia" :
include_once("cadastrar_noticia.php");
break;
case "alterar_noticia" :
include("alterar_noticia.php");
break;
case "remover_noticia" :
include("remover_noticia.php");
break;
case "cadastrar_evento" :
include("cadastrar_evento.php");
break;
case "alterar_evento" :
include("alterar_evento.php");
break;
case "remover_evento" :
include("remover_evento.php");
break;
case "relatorio_noticias" :
include("relatorio_noticias.php");
break;
case "mudar_senha" :
include("mudar_senha.php");
break;
case "logout" :
include("logout.php");
break;
}
}include ("meio.php");
}
?>é por causa do teu else lá no sistema de includes.... retira ele por enqnto.. só para vermos o mysql_error.
ps: essa estrutura de switch está estranha... você conhece a cláusula default ?
Mas retira o else, por enqnto.
agora ficou soh o menu, como se nao tivesse incluido nenhuma pagina.
o estranho eh que se eu cadastro alguma coisa acessando a pagina diretamente funciona perfeito hehehe
o campo id_noticia ta auto_increment sim,
nao, nao conheco a clausula default, sou iniciante, to comecando a entender algumas coisas agora.
teria uma maneira melhor de se fazer o switch? o por que sera que acessando o arquivo diretamente sem ser por querystring funciona perfeitamente ?
Tá... uma primeira coisa é mudar o teu header do cadastro:
header("Location: ?pagina=editor_mostra");E ai adicionar mais um no switch..
case "editor_mostra" :
include("editor_mostra.php");
break;Tem como postar um link disso? Não consegui perceber o problema...
Default, é acessado qndo nenhuma outra cláusula bate.
mesma coisa, ele abre a pagina de cadastro incluida no index. quando acesso ?pagina=cadastrar_noticia ateh ai tudo tranquilo, porem qundo posto algo e clico em cadastrar ele retorna pro index.php sem nenhuma mensagem de erro e sem cadastrar.
porem se eu acessar o cadastrar_noticia.php diretamente tudo funciona perfeitamente e ele cadastra os dados no bd, mas assim o menu nao aparece porque essa pagina eh um include.
(ta osso!!) hehehehe
Estranho... oque lhe retorna o:
echo $_SERVER['PHP_SELF']Experimenta deixar a action vazia.
<form method="post" action="" >echo $_SERVER['PHP_SELF']; retorna /kleber/novo_admin/index.php
deixando o form em branco
Notice: Undefined variable: texto in C:\xampp\htdocs\kleber\novo_admin\cadastrar_noticia.php on line 22
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\kleber\novo_admin\index.php:14) in C:\xampp\htdocs\kleber\novo_admin\cadastrar_noticia.php on line 24 (isso quando eu clico em cadastrar) (Pelo menos agora nao esta a apagina em branco)
Tá... o $_SERVER['PHP_SELF']; realmente estava errado, qndo você usou o include.
faz o seguinte, olha, pega esse trecho aqui, que é a action do formulário e coloca num arquivo separado.
<?php
$conexao = mysql_connect("****","*","****"); //Faz conexão com o mysql
$db = mysql_select_db("comunicacao");
if (isset($_POST['texto'])){
$sql = "INSERT INTO noticias (nm_titulo, nm_intertitulo, nm_data, nm_horario, nm_texto, nm_jornalista) VALUES ('$titulo', '$subtitulo', '$data', '$hora', '$texto', '$jornalista')";
$result = mysql_query($sql) or die(mysql_error());
header("Location: ?pagina=editor_mostra");
}
?>Algo como: **act_cadastrar_noticia.php**, e coloca a action do form assim:
<form method="post" action="act_cadastrar_noticia.php">Notice: Undefined variable: texto
Nada tem a ver com oque alteramos agora... revisa o código ai... você está tentando usar alguma variável texto que não existe ainda.
PS: mas cadastrou mesmo com o Warning do "Cannot modify header information " ?? (acredito que sim..)
opa, desculpa a demora, caiu a internet aqui.
seguinte, com o form em branco funcionou da seguinte forma,
ele cadastra tudo no banco de dados certinho mas quando termina o cadastro retorna o erro, ou seja algo que eu esqueci de consertar no form,
entao acho que soh deixando o form em branco ja resolve tudo sem precisar criar outro act_cadastrar_noticia.php
agora vou soh da uma revisada aqui no codigo pra saber pq ta dando esse erro.
obrigado mesmo cara!!!!!
tudo funcionando agora,
soh deixei o form action em branco, e consertei o Notice: Undefined variable: texto in C:\xampp\htdocs\kleber\novo_admin\cadastrar_noticia.php on line 22
agora o unico erro que esta dando depois de cadastrar eh
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\kleber\novo_admin\index.php:14) in C:\xampp\htdocs\kleber\novo_admin\cadastrar_noticia.php on line 24
mas esta cadastrando tudo perfeitamente.
=)))
Sabia! :lo:
... esse Warning, é porque você não pode enviar o Header Location, depois de já ter enviado cabeçalhos HTML e afins...
para direcionar à outro lugar, sem usar um arquivo externo (act_cadast...) como eu sugeri, você vai precisar então, usar uma meta refresh, ou um Javascript.. pois com o header location, não vai ser possível ou correto.
Obrigado Willian, sem sua ajuda eu ia ficar penando aqui ateh o fim do ano, Obrigado mais uma vez pela paciencia e pelas respostas rapidas.
Agora vou correr atraz pra resolver este erro que esta dando hehe
favor adicionar (resolvido ao titulo)
faz com if e só um include
se fosse mais
switch ($var) {
case 01:
case 02:
case 06:
case 08:
case 14:
case 15:
case 16:
case 21:
ai sim tudo bem