Como actuaizar solo algunos campos de tabla mysql

Estoy haciendo una base de datos de las ip de las computadoras de mi trabajo, ya esta listo, el ingresar, consultar y actualizar, pero al actualizar aquí mi código:

<! DOCTYPE html>
<html>
<head>
<title>Registro IP v1.0 - LoretoSoft | MPM Maynas 2014</title>
<script src="jquery-mobile/jquery.js" type="text/javascript"></script>
<!-- Core files -->
<script src="jquery-mobile/jquery.alerts.js" type="text/javascript"></script>
<link href="css/jquery.alerts.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<?php include_once("data/connect.php");?>
<?php
//proceso de almacenamiento
$iplong = $_POST["ip"];
$ip=str_replace(" ",".",$iplong);
$maclong = $_POST["mac"];
$mac=str_replace(" ","-",$maclong);
$equipo = $_POST["equipo"];
$dominio = $_POST["dominio"];
$usuario = $_POST["usuario"];
$so = $_POST["so"];
$link = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error($link));
mysql_select_db($db_database, $link) or die(mysql_error($link));

$sql=mysql_query("select * from datos where ip='$ip'");
if(mysql_num_rows($sql)>1)
{
echo '<script type="text/javascript">
alert("El usuario ya esta registrado, por favor corrija la IP");
history.back();
</script>';

}
// ------------ Si no esta registrado el usuario continua el script
else
{
$sql = "UPDATE datos set mac='$mac', equipo='$equipo', dominio='$dominio', usuario='$usuario', so='$so' where ip='$ip'";
mysql_query($sql, $link) or die(mysql_error($link));
echo '<script type="text/javascript">
alert("Usuario Actualizado con exito");
history.back();
</script>';
}
?>
</body>
</html>

Como veen ahí. Doy un formulario donde el usuario podrá elegir su actualizar el campo o no.. Pero si no se pone nada en el campo en la base de datos se borra y solo se actualiza lo que se ingreso.. Como puedo solucionar esto ¿?

Y otra cosa ahí doy condiciones para que si hay un registro igual al ip debe salir un mensaje de usuario ya existe pero al contrario me sale el segundo mensajje actualizado correctamente pero no hace la actualización..

1 respuesta

Respuesta
1

Bueno aquí debes aplicar más la lógica y muy importante nuca actualizar tu campo de referencia (El que colocas en el where), porque después no tienes como validar que se registró con éxito el cambio, por eso es que se recomienda colocar un id único para cada campo.

Antes de realizar la actualización, debes hacer lo siguiente:

1.- Verificar que la información exista en base de datos: realizar una consulta previa y llenar una variable.

2.- Comparar los datos: comparar si los datos del formulario difieren de los existentes en la variable cargada desde la base de datos, si son iguales apuntas a la variable y no al $_POST.

3.- Verificar vacíos: si el $_POST trae datos vacíos entonces apuntar a la variable.

4.- MUY IMPORTANTE: siempre sanitizar los datos traidos por $_POST o por $_GET para evitar la inyección SQL.

En cuanto a tu código hay algunas incongruencias:

$sql=mysql_query("select * from datos where ip='$ip'");
if(mysql_num_rows($sql)>1)
{
echo '<script type="text/javascript">
alert("El usuario ya esta registrado, por favor corrija la IP");
history.back();
</script>';
}
// ------------ Si no esta registrado el usuario continua el script
else
{
$sql = "UPDATE datos set mac='$mac', equipo='$equipo', dominio='$dominio', usuario='$usuario', so='$so' where ip='$ip'";
mysql_query($sql, $link) or die(mysql_error($link));
echo '<script type="text/javascript">
alert("Usuario Actualizado con exito");
history.back();
</script>';
} 

Si no está registrado, que datos va a actualizar??

En todo caso sería un INSERT y no un UPDATE

Creo que estás enfocando mal el sistema

Tu lógica debería ser más o menos así:

<! DOCTYPE html>
<html>
<head>
<title>Registro IP v1.0 - LoretoSoft | MPM Maynas 2014</title>
<script src="jquery-mobile/jquery.js" type="text/javascript"></script>
<!-- Core files -->
<script src="jquery-mobile/jquery.alerts.js" type="text/javascript"></script>
<link href="css/jquery.alerts.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<?php include_once("data/connect.php");?>
<?php
//proceso de almacenamiento
$iplong = $_POST["ip"];
$ip=str_replace(" ",".",$iplong); /*NUNCA ACTUALIZAR EL DATO QUE ESTAS COLOCANDO DESPUES DEL WHERE UTILIZALO SOLO DE REFERENCIA*/
$maclong = $_POST["mac"];
$mac=str_replace(" ","-",$maclong);
$equipo = $_POST["equipo"];
$dominio = $_POST["dominio"];
$usuario = $_POST["usuario"];
$so = $_POST["so"];
//Ahora PHP utiliza mysqli en vez de mysql_*
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_database);
$sql="select * from datos where ip='$ip'";
$query= $mysqli->query($sql);
if($query->num_rows >= 1) //Indica que el registro existe entonces cargar la variable
{
    $result = $query->fetch_array(MYSQLI_BOTH); //Carga la variable $result con un array por nombre de campo o numero de columna
    /*Aquí debería ir el script de actualización dado que ya está registrado
    y de una vez compara si  las variables $_POST estan vacías reemplazar 
    con su contraparte en $result ejemplo:*/
    if(!isset($mac) || empty($mac) || $mac == "" || $mac == false){$mac = $result['mac'];} // y así con cada una de las variables
}
else
{
/*aquí debe ir el script en caso que no existe el registro en la base de datos
el cual debería ser un INSERT para que se añada el registro*/
}
?>
</body>
</html>

ok, pero en el caso de que o ponga las condiciones. solo dime una cosa como hago para que en el caso de que solo se necesite agregar de acuerdo a los datos que falta..ejemplo. en la base de datos puede esta incompleto  que falte campo usuario y solo necesite actualizar ese campo pero desde este formulario:

        <form id="Formulario" name="seguimiento" method="post" action="actualiza.php">
  <label>ip: </label> 
  <input name="ip" type="text">  
  <label>mac: </label> 
  <input name="mac" type="text">
  <label>equipo: </label> 
  <input name="equipo" type="text" title="Introducir Orden de servicio" > 
    <label>dominio: </label>
    <input name="dominio" type="text"> 
  <label>usuario: </label> 
  <input name="usuario" type="text">
  <label>so: </label> 
  <select name="so">
<option>Windows XP</option>
<option>Windows 7</option>
<option>Linux</option>
</select>
  <center>
    <button class="submit" type="submit">Actiualizar Datos</button>
</center>
</form>    

osea la busqueda muestra que falta el usuario solamente pero desde este formulario cuando pongo la ip ejemplo 192.168.1.2 solo actualice el campo usuario y no borre los campos ya llenados como lo esta haciendo ahora

Lo puedes hacer como te indiqué, llenando una variable con la consulta y si existen datos vacíos recibidos por $_POST llenarlos con la variable

if($query->num_rows >= 1) //Indica que el registro existe entonces cargar la variable
{
    $result = $query->fetch_array(MYSQLI_BOTH); //Carga la variable $result con un array por nombre de campo o numero de columna
    if(!isset($mac) || empty($mac) || $mac == "" || $mac == false){$mac = $result['mac'];} // con este código reemplazas los datos que vengan vacíos del formulario
}

o lo puedes hacer llenando previamente el formulario por medio de la búsqueda e IP, que sería algo más cómodo desde mi punto de vista.

Este sería el formulario de búsqueda:

<html>
<head>
</head>
<body>
    <form name="busca_ip" method="post" action="nombre_del_script_que_muestra_los_datos_para_actualizar"
        <label for="ip">Indique la IP de su equipo</label>
        <input type="text" name="ip" placeholder="123.456.789" required />
        <br>
        <button type="submit" >Siguiente</button>
    </form>
</body>
</html>

y aquí muestras la respuesta

<?php
require_once("data/connect.php");
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_database);
$sql = "SELECT * FROM datos WHERE ip='".C."'";
$query = $mysqli->query($sql);
if($query->num_rows >= 1){
    $result = $query->fetch_array(MYSQLI_BOTH);
}else{
    //Muestra un mensaje o redirecciona a la página de registro
}
?>
<html>
<head>
</head>
<body>
<form id="Formulario" name="seguimiento" method="post" action="actualiza.php">
  <label>ip: </label> 
  <input name="ip" type="text" value="<?php if(isset($_POST['ip'])){echo $_POST['ip'];}?>">  
  <label>mac: </label> 
  <input name="mac" type="text" value="<?php if(isset($result['mac']) && !empty($result['mac'])){echo $result['mac'];}?>">
  <label>equipo: </label> 
  <input name="equipo" type="text" title="Introducir Orden de servicio" value="<?php if(isset($result['equipo']) && !empty($result['quipo'])){echo $result['equipo'];}?>"> 
    <label>dominio: </label>
    <input name="dominio" type="text" value="<?php if(isset($result['dominio']) && !empty($result['dominio'])){echo $result['dominio'];}?>"> 
  <label>usuario: </label> 
  <input name="usuario" type="text" value="<?php if(isset($result['usuario']) && !empty($result['usuario'])){echo $result['usuario'];}?>">
  <label>so: </label> 
  <select name="so" >
  <?php 
        if(isset($result['so']) && !empty($result['so'])){
            <?php if($result['so'] == "Windows XP"): ?>
                <option>Windows XP</option>
                <option>Windows 7</option>
                <option>Linux</option>
            <?php elseif(result['so'] == "Windows 7"): ?>
                <option>Windows 7</option>
                <option>Windows xp</option>
                <option>Linux</option>
            <?php else: ?>
                <option>Linux</option>
                <option>Windows xp</option>
                <option>Windows 7</option>
            <?php endif; ?>
        }
?>
</select>
  <center>
    <button class="submit" type="submit">Actiualizar Datos</button>
</center>
</form>  
</body>
</html>

sería un más o menos así, verifica bien los nombres de los campos y las posiciones, dado que no tengo la base de datos no coloqué los nombres exactos como son.

No está probado, revísalo y cualquier cosa me avisas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas