Мой вопрос - это как делание ему для того, чтобы, если ему не дается стоимость неудару в лунку 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";
}
Самая простая форма, чтобы мочь делать это динамическим, состояла бы используя имена полей базы данных как имена формуляра, или в том, чтобы делать 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";
Если то, что ты хочешь, будет состоять в том, чтобы обновлять поле файла, не обновляя оставшейся части полей, ты будешь должен проверять каждое поле и вооружать query в зависимости от полей, что, если у них есть данные.
//Algo asi con js
var query = "UPDATE TABLE SET ";
if ( columna1 != "" ){
query = "col="+columna1;
}
и я схватил.
Это 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);
?>
Таким образом и с этот супер сжатый пример, который я сделал, ты сможешь предотвращать эти ошибки, которые у тебя есть в твоем коде. До скорого.
Как у тебя есть код, самое "легкое", дело в том, что ты сделал 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";
}
?>
tenés, который нужно решать на уровне база данных.
Здесь tenés решение твоей проблемы. Главным образом ты показываешь ему в твою базу данных, что у стоимости должно быть поле, если он не получает данных.
Может быть более одной манеры это делать.
Я сделал бы функцию, чтобы оценивать $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, что он должен выбирать изображение, иначе должен ждать в ответ сервера. Все же из-за безопасности лучше санкционировать из-за стороны клиента и сервера.
WHERE id_aps ='$id'
(как он появляется в c и # 243; я говорю о вопросе), что я ограничил поврежденные реестры, не которой обновляя, и # 237; во всю таблицуactividades_previa_siembra
. – José M. Carnero 29.07.2016, 09:44