Не обновлять поля в базе данных, если посланы пустые данные

Мой вопрос - это как делание ему для того, чтобы, если ему не дается стоимость неудару в лунку file, не стали отвечающими совремнным требованиям эти поля, так как он не меняет их мне на базу данных ни на что, оставляет поле в мишени

Здесь он, где получаются данные методом POST

    $nombre = $_FILES['archivo1']['name'];
move_uploaded_file($_FILES['archivo1']['tmp_name'],"../scans/".$_FILES['archivo1']['name']);

$nombre2 = $_FILES['archivo2']['name'];
move_uploaded_file($_FILES['archivo2']['tmp_name'],"../scans/".$_FILES['archivo2']['name']);

$nombre3 = $_FILES['archivo3']['name'];
move_uploaded_file($_FILES['archivo3']['tmp_name'],"../scans/".$_FILES['archivo3']['name']);


$id=$_POST['idaps'];
$a=$_POST['rancho'];
$b=$_POST['ciclo'];
$c=$_POST['selectchar'];
$d=$_POST['desinfinst'];
$e=$_POST['desinfcharol'];
$f=$nombre;
$g=$_POST['comentarios1'];
$h=$_POST['fermentacionmic'];
$i=$nombre2;
$j=$_POST['comentarios2'];
$k='Listo';
$l=$nombre3;
$m=$_POST['comentarios3'];
$n=$_POST['respinsp'];
$o=$_POST['resprepor'];

$query="UPDATE actividades_previa_siembra SET id_rancho='$a', id_ciclo='$b', selec_charolas_varied='$c', desinfeccion_inst='$d', desinfeccion_charolas='$e', scan_receta_desinfectante='$f', comentariosd='$g', fermentacion_micorizas='$h', scan_receta_micoriza='$i', comentariosm='$j', preparacion_sustrato='$k', scan_receta_sustrato='$l', comentariosS='$m', id_resp_acti='$n', id_resp_reporte='$o' WHERE id_aps ='$id'";
$resultado=$conexion->query($query);
echo mysql_error();

if ($resultado) {
        header("Location: index.php");
    }else{
        echo "Error";
    }
7
задан 29.07.2016, 06:53
6 ответов

Самая простая форма, чтобы мочь делать это динамическим, состояла бы используя имена полей базы данных как имена формуляра, или в том, чтобы делать mapping этих в логике твоего приложения. Из-за тем простоты мы будем использовать первую идею.

Это решение не протестировано как таковой, из-за, что могут быть какие-то маленькие ошибки:

$sqlStr = '';

// tomamos los campos (no archivos) del formulario que no están vacios
// los almacenamos en un array, cada uno como un string: campo='valor'
if (!empty($_POST)) {
    foreach ($_POST as $key => $value) {
        if (trim($value) != '') {
            $sqlArr[] = "$key='$value'";
        }
}

// tomamos los archivos enviados con el formulario cuyo nombre no está vacio
// almacenamos los nombres en un array, cada uno como un string: campo='nombre-archivo'
if (!empty($_FILES)) {
    foreach ($_FILES as $key => $file) {
        if (trim($file['name']) != '') {
            $sqlArr[] = "$key='$file['name']'";
        }
    }
}

// convertimos el array a string
$sqlStr = implode(", ", $sqlArr);


// si hacemos: echo $sqlStr;
// obtendríamos algo así: campo1='valor1', campo3='valor3', archivo1='nombre1'

// anexamos el string resultante al resto de la consulta
$query = "UPDATE actividades_previa_siembra SET $sqlStr";
6
ответ дан 24.11.2019, 13:49
  • 1
    Забота с консультацией результат, если я не интерпретирую плохо, испытывает недостаток в статье WHERE id_aps ='$id' (как он появляется в c и # 243; я говорю о вопросе), что я ограничил поврежденные реестры, не которой обновляя, и # 237; во всю таблицу actividades_previa_siembra. – José M. Carnero 29.07.2016, 09:44

Если то, что ты хочешь, будет состоять в том, чтобы обновлять поле файла, не обновляя оставшейся части полей, ты будешь должен проверять каждое поле и вооружать query в зависимости от полей, что, если у них есть данные.

//Algo asi con js
var query = "UPDATE TABLE SET ";
if ( columna1 != "" ){
   query = "col="+columna1; 
}

и я схватил.

1
ответ дан 24.11.2019, 13:49

Это tenés, который нужно делать с JavaScript/Jquery перед тем, как посылать твою просьбу посредством ajax php, который реализует консультацию с BD.

Я объясняюсь:

Если есть поле, которое остается в мишени или у него нет разрешенной длины, info, который послан посредством ajax php, который реализует консультацию, будет являться одним, и а будет являться другой.

Например:

html:

<input type="text" placeholder="nombre" id="nombre"/>

<input type="text" placeholder="apellido" id="apellido"/>

<button id="enviar">Enviar</button>

jquery:

$("#enviar").click(function(){

    var nombre = $.trim($("#nombre").val());

    var apellido = $.trim($("#apellido").val());

    function enviarFormulario(nombre, apellido){
        var datos = {
            "nombre" : nombre,
            "apellido" : apellido
        };

        $.ajax({
            type: "post",
            url: "actualizar.php",
            data: datos,
            success: function(guardados){
                if(guardados){
                    //Informa la respuesta por medio de un cuadro de diálogo
                    //o pon el código que quieras
                }else{
                    //Mensaje de error
                }
            }
        });
    }

    if(nombre.length > 0 && nombre.length <= 10 && apellido.length > 0 && apellido.length <= 10){

        enviarFormulario(nombre, apellido);

    }else if(nombre.length > 0 && nombre.length <= 10 && apellido.length == 0){
        enviarFormulario(nombre, apellido);
    }else if(nombre.length == 0 && apellido.length == 0){
        alert("Debes completar los campos para actualizarlos");
    }//Y puedes agregar todas las excepciones que quieras/necesites
});

actualizar.php:

<?php

require_once("conexion.php"); //tu archivo de conexión

if(!isset($_SESSION)){
    session_start();
}

$nom = $_POST["nombre"];

$ape= $_POST["apellido"];

$id= $_SESSION["id"];

$actualizado = 0;

$query1 = "SELECT * from usuarios WHERE id = '$id'";

if($resp1 = mysqli_query($conexion, $query1){

    $fila = mysqli_fetch_assoc($resp1);

    $nomDb = $fila["nombre"];

    $apeDb = $fila["apellido"];

    if($nom != "" && $nom != $nomDb){

        $query2 = "UPDATE usuarios SET nombre = '$nom' WHERE id = '$id'";

        if(mysqli_query($conexion, $query2)){
          $actualizado++;
        }else{
          die("Error al actualizar el campo 'nombre'");
        }
    }
    if($ape != "" && $ape != $apeDb){

      $query3 = "UPDATE usuarios SET apellido = '$ape' WHERE id = '$id'";

      if(mysqli_query($conexion, $query3)){
        if($actualizado == 1){
          echo true;
        }else{
          echo "Algun(os) dato(s) no pudo/pudieron ser actualizado(s)";
        }
      }else{
        die("Error al actualizar el campo Apellido");
      }
    }
}else{
  die("error de conexión");
}

mysqli_close($conexion);

?>

Таким образом и с этот супер сжатый пример, который я сделал, ты сможешь предотвращать эти ошибки, которые у тебя есть в твоем коде. До скорого.

1
ответ дан 24.11.2019, 13:49

Как у тебя есть код, самое "легкое", дело в том, что ты сделал 4 UPDATES. С одной стороны ты делаешь UPDATE всех данных, меньше FILE, которые ты пересылаешь, и с другой стороны делаешь UPDATE FILE, таким образом, уберегаешься также возможные неудачи, в случае когда не имеешь файлов, чем поднимаешься.

<?php

    $id=$_POST['idaps'];
    $a=$_POST['rancho'];
    $b=$_POST['ciclo'];
    $c=$_POST['selectchar'];
    $d=$_POST['desinfinst'];
    $e=$_POST['desinfcharol'];
    $g=$_POST['comentarios1'];
    $h=$_POST['fermentacionmic'];
    $j=$_POST['comentarios2'];
    $k='Listo';
    $m=$_POST['comentarios3'];
    $n=$_POST['respinsp'];
    $o=$_POST['resprepor'];

    if (!isset($_POST['archivo1'])){
      $nombre = $_FILES['archivo1']['name'];
      move_uploaded_file($_FILES['archivo1']['tmp_name'],"../scans/".$_FILES['archivo1']['name']);
      $query="UPDATE actividades_previa_siembra SET scan_receta_desinfectante='$f' WHERE id_aps ='$id'";
      $resultado=$conexion->query($query);
      echo mysql_error();
    }

    if (!isset($_POST['archivo2'])){
      $nombre2 = $_FILES['archivo2']['name'];
      move_uploaded_file($_FILES['archivo2']['tmp_name'],"../scans/".$_FILES['archivo2']['name']);
      $query="UPDATE actividades_previa_siembra SET scan_receta_micoriza='$i'' WHERE id_aps ='$id'";
      $resultado=$conexion->query($query);
      echo mysql_error();
    }

    if (!isset($_POST['archivo3'])){
      $nombre3 = $_FILES['archivo3']['name'];
      move_uploaded_file($_FILES['archivo3']['tmp_name'],"../scans/".$_FILES['archivo3']['name']);
      $query="UPDATE actividades_previa_siembra SET scan_receta_sustrato='$l' WHERE id_aps ='$id'";
      $resultado=$conexion->query($query);
      echo mysql_error();
    }



    $query="UPDATE actividades_previa_siembra SET id_rancho='$a', id_ciclo='$b', selec_charolas_varied='$c', desinfeccion_inst='$d', desinfeccion_charolas='$e', comentariosd='$g', fermentacion_micorizas='$h',  comentariosm='$j', preparacion_sustrato='$k',  comentariosS='$m', id_resp_acti='$n', id_resp_reporte='$o' WHERE id_aps ='$id'";
    $resultado=$conexion->query($query);
    echo mysql_error();

    if ($resultado) {
          header("Location: index.php");
      }else{
          echo "Error";
      }
    ?>
0
ответ дан 24.11.2019, 13:49
  • 1
    Я верю в то, что быть и # 237; в м и # 225; s f и # 225; cil в и # 250; n с funci и # 243; n, что обработал файлы, чтобы предотвращать столько перенаписания c и # 243; я говорю. – Shaz 22.07.2016, 16:52
  • 2
    Это f и # 225; cil он был одиноким, потому что это было тем, что меньше изменение производит в Ваш c и # 243; я говорю. – Jose Javier Segura 22.07.2016, 19:34
  • 3
    Я уважаю твою точку зрения, но в и # 250; n схвати и # 237; может быть меньше изменение funci и # 243; n, это то же самое, но м и # 225; s обобщенный. Привет:) – Shaz 22.07.2016, 20:07

tenés, который нужно решать на уровне база данных.

Здесь tenés решение твоей проблемы. Главным образом ты показываешь ему в твою базу данных, что у стоимости должно быть поле, если он не получает данных.

http://www.comocreartuweb.com/curso-php-y-msql/las-bases-de-datos/crear-la-base-de-datos/predeterminado.html

0
ответ дан 24.11.2019, 13:49
  • 1
    Леонардо, лучше, если ты добавляешь c и # 243; я говорю и explicaci и # 243; n, что только ссылка. – Shaz 18.08.2016, 22:52

Может быть более одной манеры это делать.

Я сделал бы функцию, чтобы оценивать $FILES, и если у них есть стоимость, делать Update.

function evaluar ( $archivo)
{
  // Operador ternario
  $retorno = empty( $archivo) ? true: false;

  return $retorno;
}

Тогда ты сделал бы что-то вроде следующее:

$nombre1 = $_FILES['archivo1']['name'];
$nombre2 = $_FILES['archivo2']['name'];
$nombre3 = $_FILES['archivo3']['name'];

// Si uno devuelve true, está vacío, entonces entra el if
if (evaluar($nombre1) or evaluar($nombre2) or evaluar($nombre3))
{
  exit();
  // O un header, ya lo que quieras hacer.

}

// Si no entra al if significa que las 3 tienen valor, entonces procedes
$id=$_POST['idaps'];
$a=$_POST['rancho'];
$b=$_POST['ciclo'];
// Etc. 

Однако, для лучшего опыта пользователю, идеальному он состоит в том, чтобы показывать из-за Js, что он должен выбирать изображение, иначе должен ждать в ответ сервера. Все же из-за безопасности лучше санкционировать из-за стороны клиента и сервера.

0
ответ дан 24.11.2019, 13:49

Теги

Похожие вопросы