Ir para conteúdo
Fórum Script Brasil
  • 0

UPDATE Impossivel Php+mysql...


wolfblack

Pergunta

Olá pessoal..

Sou novo por aqui e nenêm em PHP..., gostaria que algue pudesse me ajudar, pois já fui em uma porrada de fórum não obtive sucesso....

então vamos ao desafio....

imagine uma tabela de alunos com um id, nome e campo para edição de sua nota...

nesta tabela, os alunos serão exibidos conforme busca no banco de dados..., e para cada aluno deverá ter um campo para a inserção de sua nota...

montar a página foi facil... o problema é que não consigo fazer o update das notas no bd...

Ex da tabela:

ID---------ALUNO---------NOTA------

01---------JOSE-----------|10,1|--------

02---------JOAO ----------|09,3|--------

03---------MARIA ---------|03,5|-------

A nota esta em um campo de formulário..., os alunos aparecem de acordo com uma consulta no bd..

se na minha tabela do bd tem 3 colunas... ID..,NOME..e NOTA..., como eu faço para alterar as notas já existentes na coluna NOTA???

lá vai meu código p ver se ajuda em algo....

CREATE TABLE alunos (

IDALUNO tinyint(4) NOT NULL default '0',

DESCRI varchar(50) default NULL,

NOTA varchar(4) NOT NULL default ''

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

#

# Dumping data for table 'alunos'

#

INSERT INTO alunos VALUES("1", "JOAO", "4");

INSERT INTO alunos VALUES("2", "MARIA", "4");

INSERT INTO alunos VALUES("3", "JOSE", "4");

INSERT INTO alunos VALUES("4", "PEDRO", "4");

#

# Table structure for table 'professores'

#

CREATE TABLE professores (

ID_EMITENTE tinyint(3) NOT NULL auto_increment,

NOME varchar(50) default NULL,

RAZAO varchar(50) default NULL,

PRIORIDADE tinyint(3) NOT NULL default '0',

LOGIN varchar(7) NOT NULL default '',

SENHA varchar(7) NOT NULL default '',

PRIMARY KEY (ID_EMITENTE),

UNIQUE KEY NOME_RAZAO_UNICOS (RAZAO,NOME)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

#

# Dumping data for table 'professores'

#

INSERT INTO professores VALUES("4", "3", "3", "0", "3", "3");

INSERT INTO professores VALUES("9", "2", "2", "0", "2", "2");

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

PAGINA INICIAL (INDEX)

<html>

<php

?>

<head>

<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<title>Nova pagina 1</title>

</head>

<body bgcolor="#FFFFFF">

<p align="center"> </p>

<p align="center"> </p>

<p align="center">

<span style="font-weight: 700; font-style: italic; ">

<font size="5" color="#0033CC">CONTROLE DE NOTAS </font></span></p>

<p align="center"> </p>

<p align="center">

<a href="alterar_notas.php">altere aqui as notas </a><br><font color="#C0C0C0"><br>

</font></p>

</body>

</html>

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

PAGINA DE ALTERAÇÕES:

<html>

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1" height="45" bgcolor="#008000">

<tr>

<td width="100%" height="45">

<p align="center"><i><font size="5" color="#FFFFFF" face="Arial">CONTROLE DE NOTAS</font></i></td>

</tr>

</table>

<br>

<?php

$host = "localhost";

$user = "";

$pass = "";

$db = "notas";

$socket = mysql_connect($host,$user,$pass) or die(mysql_error());

$res = mysql_db_query('bd_notas',"SELECT * FROM alunos", $socket);

$numero = mysql_num_rows($res);

echo "Existem $numero alunos nesta turma! <br>";

echo '<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%">

<tr>

<th bgcolor= "#008000" ><font color="#FFFFFF" size="2"><b><i>CODIGO ALUNO</i></b></font></th>

<th bgcolor= "#008000" ><font color="#FFFFFF" size="2"><b><i>ALUNO</i></b></font></th>

<th bgcolor= "#008000" ><font color="#FFFFFF" size="2"><b><i>NOTA</i></b></font></th>

</tr>';

while ($valor=mysql_fetch_array($res))

echo "<tr>

<td >$valor[iDALUNO]</td>

<td >$valor[DESCRI]</td>

<td ><form method='post' action='altera_db_notas.3.php?CAD_IDNOTA=1'>

<input type='text' name='VALOR' size='10' style='font-size: 7 pt'><font size='2'>

</td>

</tr>";

echo "</table>";

?>

<!-- ---------------------------------------------------------------------------------------------------------- -->

<input type="reset" value="Limpar" name="limpar">

<input type="submit" value="Salvar" name="salvar"> </p>

</form>

<!-- ---------------------------------------------------------------------------------------------------------- -->

<!--<a href="index.php">Voltar ao inicio</a>-->

</html>

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

PAGINA DE ATUALIZAÇÃO DO BD:

<?php

$servidor = 'localhost';

$usuario_db = '';

$senha_db = '';

$banco = 'bd_notas';

$con = mysql_connect($servidor, $usuario_db, $senha_db);

mysql_select_db($banco);

$sql="UPDATE alunos SET

NOTA='$_POST[VALOR]'

";

$resultado=mysql_query($sql)

or die("não foi possivel realizar a ALTERAÇÃO dos dados");

echo("As alterações foram realizadas com sucesso !!!");

echo "<br>

<p align='center'><font color='#808080'> </font><a href='index.php'><font color='#808080'> Voltar ao inicio

</font>

";

echo "<br>";

?>

--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------

Bem ai esta... espero que possa ajdar a entender minha duvida...

Link para o comentário
Compartilhar em outros sites

21 respostass a esta questão

Posts Recomendados

  • 0

Na linha:

Na $sql que tem o argumento do UPDATE você tem que informar o WHERE! ou seja, algo como isso:

$sql="UPDATE alunos SET NOTA='.$_POST['VALOR'].' WHERE id = '.$_POST['ID'].'";

Óbviamente, no formulário que você usa para enviar o VALOR, você terá que criar um campo oculto com o ID do aluno!

Link para o comentário
Compartilhar em outros sites

  • 0

Seria mais seguro resgatar o ID por session

A questão é que, em um momento o ID já é passado pelo método GET, que é a pior idéia possível, então passar algo por POST num campo oculto, não trará prejuizo algum ao sistema.

Link para o comentário
Compartilhar em outros sites

  • 0

certo..., eu já até o fiz..

UPDATE alunos SET

NOTA='$_POST[VALOR]'

where IDALUNO='$_POST[$IDALUNO]'...

até altera todos os campos...., + todos são alterados apenas com a "nota" do ultom "post"... não entendi o por que... é como se o update não reconecesse todos os dados do formulário.... ele aceita somente o ultimo...

se você puder testar vai verificar... ,

será que é algum sql especial...??

Link para o comentário
Compartilhar em outros sites

  • 0

Seria mais seguro resgatar o ID por session

A questão é que, em um momento o ID já é passado pelo método GET, que é a pior idéia possível, então passar algo por POST num campo oculto, não trará prejuizo algum ao sistema.

E se a pessoa editar o código html mudando o valor do campo hidden para outro id de aluno?? Iria mudar a nota de outro aluno. Por isso seria bom criar uma session e atribuir o valor do aluno que a nota vai ser mudada.

Link para o comentário
Compartilhar em outros sites

  • 0

Seria mais seguro resgatar o ID por session

A questão é que, em um momento o ID já é passado pelo método GET, que é a pior idéia possível, então passar algo por POST num campo oculto, não trará prejuizo algum ao sistema.

E se a pessoa editar o código html mudando o valor do campo hidden para outro id de aluno?? Iria mudar a nota de outro aluno. Por isso seria bom criar uma session e atribuir o valor do aluno que a nota vai ser mudada.

Como eu disse, ANTES disso, já é usado o método GET, ou seja, a variável com o ID é passada na URL, se isso foi aceitável no sistema, usar um campo hidden não é um problema real...

----------

Quanto ao problema... ele pode estar ligado a sua modelagem do banco de dados, você escolheu um campo do tipo tinyint (-128 à 127), tente trocar para INT.

Link para o comentário
Compartilhar em outros sites

  • 0

Estou quase entendendo...!

a respeito do update..., mudei o campo tal como havia me indicado..., porém ainda continua alterando apenas o ultimo registro... de uma olhadinha no update p você ver como eu bolei a atualização de todosos registro...

$res = mysql_db_query('bd_notas',"SELECT * FROM alunos", $socket);

while ($valor=mysql_fetch_array($res))

{

$IDALUNOX = $valor["IDALUNO"];

$UPDATIII = $_POST["VALOR$IDALUNOX"];

// ESTE VALOR VEIO DA PAGINA DE INSERÇÃO...,

// DAIEU USEI UMA CONSULTA P VINCULAR CADA VALOR POSTADO, A ID DO ALUNO NA TABELA..

// ATÉ DEU CERTO..., MAIS AINDA ATUALIZA APENAS O ULTIMO REGISTRO...

$sql="UPDATE alunos SET

NOTA='$UPDATIII'

where IDALUNO='$IDALUNOX'

Como você viu... se eu colocar um ECHO sobre as variaveis $IDALUNOX E $UPDATIII vao aparecer todos os valores..., + na hora da atualização so consigo atualizar o ultimo id da tabela....

E agora o que pode ser???

Como farei o update em todos os registro de alunos?????????

Link para o comentário
Compartilhar em outros sites

  • 0

Não... não está entendendo, o que você está fazendo? Você está buscando TODOS os alunos e todas as notas (está usando o while para isso), é obvio que você só está atualizando a última nota, pois o valor de $IDALUNOX e $UPDATIII sempre será referente ao último registro... o que você terá que fazer para alterar APENAS UMA NOTA:

1 - Fazer um formulário para buscar apenas o aluno que você quer;

2 - Fazer a busca baseado no ítem 1 e exibir os dados buscados;

3 - Pegar os dados do ítem 2 e enviar para a query com a instrução update...

Se a sua intenção é alterar APENAS uma nota não precisa usar laço de repetição (while, for...)

Link para o comentário
Compartilhar em outros sites

  • 0

obrigado pela atenção...

ok...!

+ eu não quero alterar apenas uma nota.... o que eu preciso e que em uma pagina apareça todos os alunos com um campo para alterar todas as notas e fazer um update de tudo ao mesmo tempo...

entendeu... alterar um registro como você mesmo disse é so especificar qual id será o correspondente.... + como eu faço p dar um update em tudos os alunos ao mesmo tempo.... ???

valeu...!

Link para o comentário
Compartilhar em outros sites

  • 0

+ não consegui usar de maneira alguma esse tal de foreach..., você não poderia me auxiliar....

olha como eu tentei...

while ($valor=mysql_fetch_array($res))

{

$IDALUNOX = $valor["IDALUNO"];

$UPDATIII = $_POST["VALOR$IDALUNOX"];

for ($i=1; $i <= $IDALUNOX; $i++ ) {

$sql="UPDATE alunos SET

NOTA='$UPDATIII'

where IDALUNO='$IDALUNO$i'

este wile serve p eu fazer uma nova retirada de dados de alunos no bd.. dai o meu UPDATE tera que atualizar tddos os registros que contenham forumulário correspondente...

para falar a verdade sou muito novinho em php e ainda tenho dificuldade p interpretação dos códigos.. você poderia me ajudar a elabora-lo???

saca só... minha tabela alunos tem uma coluna chamada NOTAS associada a outra coluna de IDALUNOS... meu formulário vai postar várias notas referentes a vários IDs... o que eu preciso é fazer o update acertar cada nota ao seu campo correspondente... no exemplo acima, sem o "for"... o script atualiza apenas a linha do bd referente ao ultimo ID ...

Como seria o código acima adaptado para o que preciso???

Link para o comentário
Compartilhar em outros sites

  • 0

Para atualizar VÁRIOS campos, esse seu código vai se tornar inútil, o WHILE terá que ser usado para BUSCAR os códigos, mas não será eficiente, pelo menos dessa maneira que você está fazendo para enviar as notas novas...

Link para o comentário
Compartilhar em outros sites

  • 0

cara... já tentei de todo jeito colocar isso p funcionar no meu script + não estou conseguindo..., você poderia me dar uma maozinha???

olha ai como estou fazendo:

//no meu form o action está assim:

action='MINHA_PAGINA_DE_UPDATE.php?Acao=inserir

//e minha pagina de update assim:

$res = mysql_db_query('bd_notas',"SELECT * FROM alunos", $socket);

while ($valor=mysql_fetch_array($res))

{

$IDALUNOX = $valor["IDALUNO"];

//esta consulta serve p selecionar os ID's dos alunos que quero fazer o update..

if(isset($_GET['Acao']) && $_GET['Acao']==inserir"){

$contador = "1";

$num1 = "1";

$num2 = "2";

while ($contador <= "3"){// Note que o valor <= 3 é porque existem 3 pares de campos no formulário...

$valor1 = $_POST["VALOR$IDALUNOX];

$valor2 = $IDALUNOX;

$sql="UPDATE alunos SET

NOTA='$valor1'

where IDALUNO='$valor2'

";

echo "$valor1 - $valor2<BR>";

$num1 = $num1+2;

$num2 = $num2+2;

$contador++;

$resultado=mysql_query($sql)

or die("não foi possivel realizar a ALTERAÇÃO dos dados");

echo("As alterações foram realizadas com sucesso !!!");

}

}

+ não consegui fazer funcionar..., na verdade não estou entendendo muito como isso funciona...

o que você ahca que to fazendo errado.... será que você consegue fazer-lo funcionar p mim??

cara... já tentei de todo jeito colocar isso p funcionar no meu script + não estou conseguindo..., você poderia me dar uma maozinha???

olha ai como estou fazendo:

//no meu form o action está assim:

action='MINHA_PAGINA_DE_UPDATE.php?Acao=inserir

//e minha pagina de update assim:

$res = mysql_db_query('bd_notas',"SELECT * FROM alunos", $socket);

while ($valor=mysql_fetch_array($res))

{

$IDALUNOX = $valor["IDALUNO"];

//esta consulta serve p selecionar os ID's dos alunos que quero fazer o update..

if(isset($_GET['Acao']) && $_GET['Acao']==inserir"){

$contador = "1";

$num1 = "1";

$num2 = "2";

while ($contador <= "3"){// Note que o valor <= 3 é porque existem 3 pares de campos no formulário...

$valor1 = $_POST["VALOR$IDALUNOX];

$valor2 = $IDALUNOX;

$sql="UPDATE alunos SET

NOTA='$valor1'

where IDALUNO='$valor2'

";

echo "$valor1 - $valor2<BR>";

$num1 = $num1+2;

$num2 = $num2+2;

$contador++;

$resultado=mysql_query($sql)

or die("não foi possivel realizar a ALTERAÇÃO dos dados");

echo("As alterações foram realizadas com sucesso !!!");

}

}

+ não consegui fazer funcionar..., na verdade não estou entendendo muito como isso funciona...

o que você ahca que to fazendo errado.... será que você consegue fazer-lo funcionar p mim??

Link para o comentário
Compartilhar em outros sites

  • 0

fiz sim...

da maneira que lhe mostrei...

tem algo + ???

Ah você postou o seu formulário no código lá? Então me mostra onde estão os campos, a tag form... etc... o que você postou foi o action do formulário modificado e não o formulário modificado...

Link para o comentário
Compartilhar em outros sites

  • 0

Olá galerinha!

e ai wolf tipo que esse é o negocio que to precizanu,

também não to com sucesso em achar uma solução, mais estou seguindo outro caiminho.

to tentando fazer a alteração no banco de dados no próprio form, tipo quando ele gerar a linha com o "ID", ele mesmo pega esse "ID" e o valor do meu campo (no meu caso é valor, no seu é nota) e faz a atualização, sem precisar jogar p outra tela, bem acho que assim é mais fácil, mais também não to conseguindo.

alguém por ai já fez desse jeito que eu disse?

PS: acho que p fazer desta maneira você deve jogar os valores dentro de uma array e separar cada item referente ao seu "ID", como fazer isso eu já não sei dizer.

e ai vocês me ajudam??

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...