Editar dados(BD) atraves de formulario

darkult

Power Member
Boas, grande povo.

Gostaria de por no site que estou a fazer um sistema como o que tem aqui no forum para editar os dados:
duvidah.jpg

Se alguem me puder ajudar, ficaria muito grato.

Pelo que posso imaginar, sao iframe?? Ou estou enganado??
 
O Access faz isso.

Se queres alterar um servidor de base de dados estilo SQL Server ou Oracle, tens de fazer uma aplicação em .Net, Java ou PHP.
 
Boas!

É fácil fazer isso. Primeiro o fórmulário (em HTML).

Código:
<input name="campo1" type="text" id="campo1" />&nbsp;<INPUT TYPE="submit" name="inserir" VALUE="inserir">

Depois o código em PHP...

PHP:
$nome = $_POST[campo1];

mysql_query("UPDATE `nome_da_bd`.`tabela` SET `campo` = '$nome'") or die(mysql_error());

Depois podes adicionar mais umas cenas na linha do MySQL, por exemplo um "WHERE" para utilizares id's...

Qualquer coisa mais é só perguntares.
 
Isto ja eu sei. Mas eu queria que ele so fizesse o UPDATE onde houve dados, pois se fizer um UPDATE geral, ele apagar os dados antigo, e fica o campo em branco.

Ou então que fizesse o UPDATE individualmente, talvez com IF mas assim ficaria muitas condiçoes.

Eu queria é como o sistema aqui do forum.
 
Isto ja eu sei. Mas eu queria que ele so fizesse o UPDATE onde houve dados, pois se fizer um UPDATE geral, ele apagar os dados antigo, e fica o campo em branco.

Ou então que fizesse o UPDATE individualmente, talvez com IF mas assim ficaria muitas condiçoes.

Eu queria é como o sistema aqui do forum.

Como assim? Não percebi muito bem...
 
Conheces o sistema do forum???

No meu site actualmente para mudar os dados, tens que preencher tudo.
Ele depois faz isto
PHP:
$update = mysql_query("UPDATE usuarios_vip SET nome='$nome', email='$email', cel='$cel', sexo='$sexo', curso='$curso'  WHERE login='$login'") or die(mysql_error());

Mas eu queria que nao houvesse necessidade de preencher tudo. Por exemplo, quero mudar o email, nao tenho que preencher o nome, curso, sexo, etc...

Pois aqui no forum se quiser mudar a cidade, ele apenas mudar a cidade e nao muda os outros dados.
 
Sim, agora percebi... Podes fazer isso de várias maneiras. Agora ocorrem-me duas. Uma por if's como já disseste ou então vais buscar os valores de cada campo à base de dados ao abrir a página e os valores ficam já "preenchidos" dentro das caixa de texto. Ou seja, ao abrir a página, os valores já estão nas caixas de texto.
 
Eu dou uma dica:

PHP:
<?php

$actualizar = array();

if (isset($_POST['nome']) && ($nome = $_POST['nome']) != $fetch_assoc['nome'])
$actualizar[] = 'nome = ' . mysql_real_escape_string($nome);

if (isset($_POST['email']) && ($email = $_POST['email']) != $fetch_assoc['email'] && email_valido($email))
$actualizar[] = 'email ' . mysql_real_escape_string($email);

if (count($actualizar) > 0)
mysql_query('UPDATE SET usuarios_vip ' . implode(', ', $actualizar) . ' WHERE login = ' . $login) or die(mysql_error());

header('Location: ' . $_SERVER['PHP_SELF']);
exit();

?>

Se não perceberes alguma coisa do que está aí, avisa :Whatever:
 
PHP:
<?php

// obtém via http get o id do utilizador (http://www.exemplo.com?id=)
$id = (isset($_GET['id']) ? (int)$_GET['id'] : 0);

// selecciona os campos desse determinado id..
$query = mysql_query('SELECT nome, email FROM usuarios_vip WHERE id = ' . mysql_real_escape_string($id)) or die(mysql_error());

// se não existir nenhuma linha no registo com o iD obtido..
if (mysql_num_rows == 0)
exit('Não existe nenhum utilizador com este iD!');

// obtém os resultados dos campos..
$fetch_assoc = mysql_fetch_assoc($query);

// definimos a variável como uma array (conjunto de valores)..
$actualizar = array();

// Aqui só irá actualizar se:
// A super-variável $_POST['nome'] estiver definida;
// For diferente do campo obtido pelo query (se for diferente do que já está registado na bd (ie: tenho o meu nome definido na bd, ele só irá alterar se eu alterar o campo do nome no input));

if (isset($_POST['nome']) && ($nome = $_POST['nome']) != $fetch_assoc['nome'])
$actualizar[] = 'nome = ' . mysql_real_escape_string($nome);

// Aqui só irá actualizar se:
// A super-variável $_POST['nome'] estiver definida;
// For diferente do campo obtido pelo query (se for diferente do que já está registado na bd (ie: tenho o meu email definido na bd, ele só irá alterar se eu alterar o campo do email no input));
// Se o email for válido (necessitas da função);

if (isset($_POST['email']) && ($email = $_POST['email']) != $fetch_assoc['email'] && email_valido($email))
$actualizar[] = 'email ' . mysql_real_escape_string($email);

// se houver campos para alterar..
if (count($actualizar) > 0)

// actualiza
// o implode irá juntar os campos separados por uma vírgula
mysql_query('UPDATE SET usuarios_vip ' . implode(', ', $actualizar) . ' WHERE id = ' . mysql_real_escape_string($id)) or die(mysql_error());

// volta para uma página
header('Location: pagina.php');
exit();

?>
 
Obrigado pela explicação.

Mais uma duvida e se eu tiver isto:
<select name="sexo" id="sexo"><option value="Masculino" selected>Masculino</option>
<option value="Feminino">Feminino</option></select>
Como é que posso fazer para que vá buscar o valor ja guardado na base de dados, e mostre ele no select, nao ter que seleccionar.
 
Qualquer coisa assim..

PHP:
$sexos = "<option value=0></option>\n";

$array = array(

              array("id" => 1, "sexo" => "Masculino"),
              array("id" => 2, "sexo" => "Feminino"),
              array("id" => 3, "sexo" => "Não tenho a certeza"),
              
         );
              
foreach ($array as $sexo) {  
    
    $sexos .= "<option value=".$sexo["id"]."" . ($fetch_assoc["sexo"] == $sexo["id"] ? " selected" : "") .  ">".$sexo["sexo"]."</option>\n"; 
    
}          

echo "<select name='sexo'>\n$sexos\n</select>";
 
Última edição:
Já tive esse problema e resolvi-o de uma maneira muito simples! Fiz da seguinte maneira, na form onde vais inserir os dados para actualizar (caixas de texto, etc.) adicionas um <input> "escondido", assim:
Código:
<input type="hidden" name="process" value="time1" />
Depois o botão que ira actualizar as informações na base de dados terá de ficar noutra form! Uma form apenas com o botão e com o mesmo <input> "escondido" que atrás, mas com a value diferente, assim:
Código:
<input type="hidden" name="process" value="time2" />
Depois usando php, apenas fazes um if assim:
PHP:
if ($_POST['process'] == "time2") {
$update = mysql_query("UPDATE usuarios_vip SET nome='$nome', email='$email', cel='$cel', sexo='$sexo', curso='$curso'  WHERE login='$login'") or die(mysql_error());  
}
E assim apenas se carregares no botão para actualizar as informações é que elas serão alteradas, caso não carregues continuarão iguais. Atenção que na condição do if, onde está "time2" será a value do segundo <input> "escondido", o da form do botão!

Espero que isto ajude também :)

Cumps
 
Back
Topo