Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia a todos,
MODERADORES: Desculpe pelo Título com >> Problemas << se possível editar para mim por favor !!
Estou desde ontem lendo posts no fórum e pesquisando no google. Sei que este é um assunto que basicamente já existe e não é nada atual. O problema é que nenhuma "solução" que encontrei, não consegui implementar. Sempre da um erro diferente. Então, vamos lá...
<div id="div-popover-edt" class="hide">
<form class="form-horizontal" action="editar/editar_autor.php" method="POST" role="form">
<div class="form-group">
<label for="basic" class="col-lg-2 control-label"></label>
<div class="col-lg-10">
<select name="edt-id" class="selectpicker show-tick form-control">
<?php
$sql = "select * from autores";
$res = Connection::getInstance()->query($sql);
while($linha=mysqli_fetch_array($res)) { ?>
<option value=""><?php $linha["AUT_ID"]; $id = $linha["AUT_ID"]; echo $linha["AUT_NOME"]; ?></option>
<?php $_SESSION["dados"] = $linha; } ?>
</select>
</div>
<label>Digite o Novo Nome do Autor: </label> <br>
<input type="text" name="txtnovoautor" /> <br>
<input type="submit" class="btn btn-success" value="Cadastrar" />
</div>
<button type="reset" id="btn-fechar" class="btn btn-danger" data-dismiss="clickover">Fechar</button>
</form>
</div>
Tendo em mãos o seguinte código acima, tenho um select que puxa do banco os autores de uma biblioteca virtual, abaixo dele, possui um input text para eu inserir o novo nome do autor, ou seja, a idéia é que o autor atual do select seja o autor que eu desejo editar e abaixo será o novo nome para eu editá-lo. Em seguida puxa meu arquivo editar_autor.php:
<?php
session_start();
include("conexao.php");
$id2 = $_POST['dados'];
//$pega_array = $_SESSION["dados"];
//$_SESSION['id'][] = $id;
$id = $_SESSION["dados"];
//echo ("<script type='text/javascript'>alert ('$id[id2]');</script>");
if ($conn) {
if (mysqli_query($conn, "UPDATE autores SET AUT_NOME='".$_POST['txtnovoautor']."' where AUT_ID='".$id."'")){
//echo "<b> Autor cadastrado com sucesso </b>";
echo("<script type='text/javascript'> alert('Autor Deletado com Sucesso !!!'); location.href='/portal_academico/view/main.php';</script>");
//header("Location: /portal_academico/view/main.php");
} else {
echo "<b>erro de exclusão</b>";
}
} else {
echo "<b>erro de conexao</b>";
}
Não consigo passar o ID do autor de jeito nenhum... Eu tenho o cadastro 100% via post, mas o editar e delete que eu preciso passar o id, não consigo de forma alguma. O que estou fazendo de errado?
Pode ver que no meu editar_autor.php tem alguns comentários de testes e gambiarras que eu estava fazendo. Os erros que apresentam são de undefined index e array to string conversion. Se eu por o $id[0] ele puxa o id do último autor. Mas eu preciso que ele puxe o id do autor que eu selecionar.
>
se entendi bem tente assim:
1.seu select:
<select name="edt-id" class="selectpicker show-tick form-control">
<option value="<?php echo $linha["AUT_ID"];?>"><?php echo $linha["NOME"];?></option>
</select>
2. na SQL da pg "editar_autor" você precisa fornecer o id do registro
além do novo nome ou toda a coluna será alterada;
ex:
$idselecionado=$_POST['edt-id'];
$novonomeautor=$_POST['txtnovoautor'];
sql:
UPDATE autores SET AUT_NOME='$novonomeautor' where id='$idselecionado';
mas é melhor prática usar
prepared statements e "bind params" (ou bind values);
ex em PDO:
$sql = $conn->prepare("UPDATE autores SET AUT_NOME=? where id=?);
$sql->bindValue(1, $novonomeautor);
$sql->bindValue(2, $idselecionado);
$sql->execute();
+ 2 dicas:
se possivel padronize
dicas boas:
http://www.devmedia.com.br/introducao-ao-php-pdo/24973
http://www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/
http://www.devmedia.com.br/crud-com-php-pdo/28873
BINGO !!! AMIGO,
Utilizei suas dicas do 1, 2 e do sql. Funcionou 100%, além de me corrigir em um erro que eu fiz devido a vários testes... O update em "where id" na verdade é where "AUT_ID". Erro besta meu... Corrigido.
Coloquei o echo para visualizar os parâmetros passados. Quando vi que ele passou correto, apliquei no update, funcionou ! Muito obrigado.
Só tem uma coisa que não entendi,
Você me disse para verificar a action do form... O que há de errado nela? Ele puxa de uma pasta "editar" o arquivo que edita o autor e assim eu tenho demais arquivos para cada edição (provavelmente irei unir em 1 só... Vou verificar isso só depois que implantar todos requisitos funcionais 100%).
Corrigido as maiusculas/minusculas que na verdade, foram removidas pois não foi necessário utilizar o session, apesar de ser mais seguro, segundo as pesquisas que verifiquei.
Vou verificar as dicas de PHP Data Object com certeza, porém infelizmente não vou poder aplicá-las agora porque tenho menos de 1 mês para finalizar a biblioteca virtual e ainda falta bastante coisa, sem contar que pelo link que você colocou, verifiquei que tem o PDO para conexão, inserção e delete também, ou seja, se eu for implementá-lo (se der tempo), terá que ser todos eles porque não faz sentido colocar só o PDO na edição e não padronizar nos demais.
Enfim, muito obrigado pelas dicas !!
se entendi bem tente assim:
2. na SQL da pg "editar_autor" vc precisa fornecer o id do registro
além do novo nome ou toda a coluna será alterada;
ex:
sql:
mas é melhor prática usar
+ 2 dicas:prepared statements e "bind params" (ou bind values);
ex em PDO:
- verifique a "action" do form (está "editar/editar_autor.php");
- cuidado com maiusculas:
$id2 = $_POST['dados'];se possivel padronize
dicas boas:
http://www.devmedia.com.br/introducao-ao-php-pdo/24973
http://www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/
http://www.devmedia.com.br/crud-com-php-pdo/28873