Como recorrer correctamente un arreglo Multidimensional Node JS

Estoy trabajando en Node Js y no entiendo como ordenar correctamente el siguiente arreglo todas las consultas si traen datos,lo comprobe por medio de consola pero en el ciclo cuando lo recorre (asig[k]) me devuelve el ultimo dato del arreglo multidimensional como undefined, pero cuando lo hago estatico (asig[0]), si me devuelve el valor correcto.

const estudiante = await pool.query('select ID_Estudiante from estudiante order by ID_Estudiante desc limit 1');  const asig = await pool.query('SELECT ID_ACC FROM asignacion_cursos_catedratico WHERE Grado_ID_Grado= ? AND Año_ID_Anio = ?', [Grado_ID_Grado, ID_Anio]);  const bim = await pool.query('SELECT ID_Bimestre FROM bimestre');       for (var k = 0; k <= 4; k++) {        var valus = [         bim[0], estudiante, asig[k],         bim[1], estudiante, asig[k],         bim[2], estudiante, asig[k],         bim[3], estudiante, asig[k]         ]     } 

Algunos widgets de WordPress no funcionan correctamente en Safari

El dropdown menú (Widget) de mi sitio web (Vista móvil) no funciona correctamente en Safari, pero sí en Chrome desde el navegador (Vista móvil).

No puedo hacer click sobre éste, como si no funcionara los códigos de Javascript.

Vean la imagen de abajo para ubicar el menú drop-down al final del sitio web en la sección footer.

(En Consola en Chrome aparece errores que no entiendo)

PD: No soy informático y tengo conocimientos básicos de HTML y CSS

Vista desde Safari

Combobox no muestra los items correctamente

Estoy haciendo una aplicación, pero no logro que me muestre los items normalmente, me los muestra asi:

introducir la descripción de la imagen aquí

este es el código que estoy usando:

        IEnumerable<Estatus> es = new Estatus().GetAll();         estatusBindingSource.DataSource = es;         cbStatus.SelectedIndex = -1;         foreach (var item in es)         {             elcbEstatus.Items.Add(new { Text = item.Descripcion, Value = item.idEstatus });         } 

que es lo que me falta, no lo hago de la otra forma porque no me muestra nada, solo con este código logre que me mostrara la lista

¿Cómo ejecutar correctamente una función desde un objeto?

tengo la siguiente función junto con una clase. La función es lo primero que está definido, luego la clase y el la ventana de tkinter. El problema es que ejecuta la tab de tkinter notebook pero al darle al botón no crea los labels que debería. He intentado cambiar dónde se hace el pack() del labelframe pero sigue sin funcionar. No sé si debería meter la función dentro de la clase o qué debería hacer. Muchas gracias

def msearch():         global label         try:             label.master.destroy()         except:             pass         busqueda=entryname_valor.get()         lista=os.listdir("C:\u005cUsers\u005cD\u005cBase de datos")         res = [i for i in lista if busqueda in i]         import glob         listatexto=glob.glob("C:\u005cUsers\u005cD\u005cBase de datos\u005c*\u005c*.txt")     #print(listatexto,type(listatexto))         lista_match=[]         tabnombre=tabControl.select()         textWidget = tabControl.nametowidget(tabnombre)         group =tk.LabelFrame(textWidget, text="Resultados", padx=10, pady=10)         group.pack(side=tk.BOTTOM)         for i in listatexto:             with open(i) as f:                  if busqueda in f.read():                      lista_match.append(i)         res_clean=[]         for i in res:              i='C:\Users\D\Base de datos\'+i+'\'+i+".txt"              res_clean.append(i)         definitiva=res_clean+lista_match         definitiva=set(definitiva)         print(definitiva)         resultados_lista=[]         for i in definitiva:             filename=os.path.basename('\'+i)             somestring='this is some string rec'             somestring = re.sub('.txt$  ', '', filename)             resultados_lista.append(somestring)         print(resultados_lista)         for i,url in enumerate(resultados_lista):             v=tk.StringVar()             tabName=tabControl.select()             textWidget = tabControl.nametowidget(tabName)             print(textWidget)             label=tk.Label(group,textvariable=v, cursor="hand2")             v.set(url)             f = font.Font(label, label.cget("font"))             f.configure(underline=True)             label.pack(side=tk.BOTTOM)             label.after(60000, label.pack_forget)             label.bind("<Button-1>",lambda e,url=url:abrir_resultado(url))` `class SearchTab(ttk.Frame, CustomNotebook):     def __init__(self,main_window):         super().__init__(main_window)         global entryname_valor         entryname_valor=tk.StringVar()         titulo =tk.Label(self, text="Introduce tu búsqueda")         titulo.config(font=("Courier", 25))         titulo.pack()         mEntryname = tk.Entry(main_window, width=50, font=("Courier", 20), textvariable=entryname_valor).place(width=750,height=50,x=0, y=100)         mSearch = tk.Button(main_window,text='Search',bg='white', command = msearch, height=5, width=15, font=fuente).pack(side=tk.BOTTOM)         fuente2 = font.Font(family='Herculanum', size=12, weight='bold')  top = tk.Tk() top.title("Programa de busqueda") top.geometry("750x500") fuente = font.Font(family='Herculanum', size=17, weight='bold') tabControl = CustomNotebook(top)      tab_search = SearchTab(tabControl)             tabControl.add(tab_search, text='Búsqueda') top.mainloop()``` 

Cómo validar que los campos estén correctamente introducidos en un formulario por pasos

Finalmente he conseguido realizar mi stepper, lo que pasa es que no consigo ninguna respuesta a cómo debo validarlo, antes de pasar a la segunda parte, ya que si le doy click, directamente pasa al segundo div, sin validar nada.

HTML CODEdiv primer-log (first div) div segundo-log (segundo div)

<form action="/crear-1" method="POST" class="formulario-registro">      {{ csrf_field() }}    <div class="container" id="primer-log">     <div id="title">         <h3 style="color: red;text-decoration: underline;" class="mb-4">Empecemos por tus datos personales</h3>     </div>        <div class="form-row justify-content-center">         <div class="col-md-5 mb-3">             <label for="nombre">Introduce tu nombre</label>             <input type="text" name="nombre" placeholder="Sergio.." class="form-control" required>         </div>         <div class="col-md-5 mb-3">             <label for="apellidos">Introduce tus apellidos</label>             <input type="text" name="apellidos" placeholder="Ibañez Montecarlo.." class="form-control" required>         </div>     </div>      <div class="form-row justify-content-center">         <div class="col-md-4 mb-3">             <label for="email">email:</label>             <input type="email" name="email" placeholder="Introduce un correo electronico válido." class="form-control" required>         </div>          <div class="col-md-3 mb-3">             <label for="contraseña">Introduce una contraseña segura:</label>             <input type="password" name="contraseña" placeholder="No vale tu fecha nacimiento." class="form-control" required>         </div>          <div class="col-md-3 mb-3">             <label for="genero">Seleciona tu genero:</label>                 <select class="form-control" name="genero">                     <option value="Hombre">Hombre</option>                     <option value="Mujer">Mujer</option>                 </select>         </div>     </div>      <div class="form-row justify-content-center">         <div class="col-md-4 mb-3">             <label for="fecha-nacimiento">Fecha de nacimiento:</label>             <input class="form-control" name="fecha-nacimiento" type="date" value="1995-08-19" id="example-date-input" required>         </div>     </div>      <center>             <button class="btn btn-primary" id="avanzar-2">Siguiente</button>     </center> </div>   <div class="container" id="segundo-log">  <div id="title">     <h3 style="color: red;text-decoration: underline;" class="mb-4">Conozcamonos un poco más</h3> </div>  <div class="form-row justify-content-center">     <div class="col-md-3 mb-3">         <label for="altura">Indica tu altura:</label>             <select class="form-control" name="altura">                     <option value="1.40">1,40m</option>                     <option value="1.41">1,41m</option>                     <option value="1.42">1,42m</option>                     <option value="1.43">1,43m</option>                     <option value="1.44">1,44m</option>                     <option value="1.45">1,45m</option>                     <option value="1.46">1,46m</option>                     <option value="1.47">1,47m</option>                     <option value="1.48">1,48m</option>                     <option value="1.49">1,49m</option>                     <option value="1.50">1,50m</option>                     <option value="1.51">1,51m</option>                     <option value="1.52">1,52m</option>                     <option value="1.53">1,53m</option>                     <option value="1.54">1,54m</option>                     <option value="1.55">1,55m</option>                     <option value="1.56">1,56m</option>                     <option value="1.57">1,57m</option>                     <option value="1.58">1,58m</option>                     <option value="1.59">1,59m</option>                     <option value="1.60">1,60m</option>                     <option value="1.61">1,61m</option>                     <option value="1.62">1,62m</option>                     <option value="1.63">1,63m</option>                     <option value="1.64">1,64m</option>                     <option value="1.65">1,65m</option>                     <option value="1.66">1,66m</option>                     <option value="1.67">1,67m</option>                     <option value="1.68">1,68m</option>                     <option value="1.69">1,69m</option>                     <option value="1.70">1,70m</option>                     <option value="1.71">1,71m</option>                     <option value="1.72">1,72m</option>                     <option value="1.73">1,73m</option>                     <option value="1.74">1,74m</option>                     <option value="1.75">1,75m</option>                     <option value="1.76">1,76m</option>                     <option value="1.77">1,77m</option>                     <option value="1.78">1,78m</option>                     <option value="1.79">1,79m</option>                     <option value="1.80">1,80m</option>                     <option value="1.81">1,81m</option>                     <option value="1.82">1,82m</option>                     <option value="1.83">1,83m</option>                     <option value="1.84">1,84m</option>                     <option value="1.85">1,85m</option>                     <option value="1.86">1,86m</option>                     <option value="1.87">1,87m</option>                     <option value="1.88">1,88m</option>                     <option value="1.89">1,89m</option>                     <option value="1.90">1,90m</option>                     <option value="1.91">1,91m</option>                     <option value="1.92">1,92m</option>                     <option value="1.93">1,93m</option>                     <option value="1.94">1,94m</option>                     <option value="1.95">1,95m</option>                     <option value="1.96">1,96m</option>                     <option value="1.97">1,97m</option>                     <option value="1.98">1,98m</option>                     <option value="1.98">1,99m</option>                     <option value="2.00">2,00m</option>                     <option value="2.01">2,01m</option>                     <option value="2.02">2,02m</option>                     <option value="2.03">2,03m</option>                     <option value="2.04">2,04m</option>                     <option value="2.05">2,05m</option>             </select>     </div>               <div class="col-md-3 mb-3">         <label for="peso">Peso actual:</label>         <input type="text" name="peso" placeholder="Introduce tu peso en kilogramos" class="form-control" required>     </div>     <div class="col-md-3 mb-3">         <label for="horas-sueno">Horas de sueño diarias:</label>         <input type="text" name="horas-sueno" placeholder="Cúantas sueles dormir al dia?" class="form-control">     </div>           </div>  <div class="form-row justify-content-center">                <div class="col-md-2">         <label for="fuma">Fumas tabaco?</label>             <select class="form-control" name="fuma">                     <option value="Fuma">Si, fumo tabaco.</option>                                   <option value="No Fuma">No fumo tabaco :)</option>                           </select>     </div>     <div class="col-md-3">         <label for="bebe">Bebes alcohol?</label>             <select class="form-control" name="bebe">                     <option value="Bebe mucho">Bebo bastante alcohol</option>                                    <option value="Bebe un poco">No suelo beber mucho alcohol</option>                               <option value="No bebe">No bebo alcohol</option>                                     </select>                    </div>       <div class="col-md-5 ">         <label for="deporte">Entrenas actualmente ( gimasio..calistenia.. ejercicio múscular)</label>             <select class="form-control deporte" name="deporte">               <option value="0">No</option>               <option value="1">Si</option>             </select>     </div> </div>  <center>     <div class="form-group col-md-6" style="display: none;margin-top: 65px;" id="div-deporte-dias">         <label for="deporte-dias">Cúantos dias a la semana entrenas?</label>         <select class="form-control" name="deporte-dias">           <option value="1">1</option>           <option value="2">2</option>           <option value="3">3</option>           <option value="4">4</option>           <option value="5">5</option>           <option value="6">6</option>           <option value="7">Todos los días de la semana</option>         </select>     </div> </center>  <center>         <button class="btn btn-primary" id="retroceder-1">Atrás</button>     <button class="btn btn-primary" id="avanzar-3">Siguiente</button> </center>  </div> </form> 

JS CODE Aquí la cosa sería que validara los campos, antes de pasar al segundo div.

$  (document).ready(function(){          $  ("select[name='deporte']").on('change', function() {             let selectvalue = $  ("select[name='deporte']").val();             selectvalue == 1 ? $  ('#div-deporte-dias').show() : $  ('#div-deporte-dias').hide();         });          /* debería pasar algun parametro más o algo, para validar que esté correcto... */         $  ("#avanzar-2").click(function(){             $  ("#primer-log").fadeOut(550, function(){                 $  ("#segundo-log").fadeIn(550);             });         });       }); 

Estuve viendo y quiero hacer la comprobación con ajax->

**Lo que quiero comprobar : **

  • Que esten llenados los campos requeridos.
  • Que tengan el formato correcto (pesos, y campos especiales) -> y poder crear alert en caso de que lo tengan que revisar.
  • Que haga las 2 funciones mencionadas, antes de pasar a la siguiente parte del registro, ya que tendré 2 o 3 steps.

Gracias por leer, y un saludo!!

BarcodeScanner no escanea correctamente en iOS PDF_417

Estoy usando el complemento de BarcodeScanner para Ionic 3.

Exactamente estoy usando la version de BarcodeScanner 8.1.0 y Ionic versión 3.6.1

Tengo un problema con el escaneo en iOS. Estoy usando un iPhone X y el resultado del escaneo no es completo mientras que en Android se obtiene toda la cadena.

Ejemplo:

En iOS tengo el siguiente resultado

{cancelled: 0, text: “0349172496”, format: “PDF_417”}

En Android el siguiente:

{text: “0349172496PubDSK_145224310…B¸¤z[CFHOÞú÷º¢à²/ÙdÇgÎGÅüai-Øh5”, format: “PDF_417”, cancelled: false}

Al parecer en iOS no esta trayendo todos los caracteres. Qué puede ser?

Este es el siguiente código que uso.

  public abrirScanner(): void {    let options: BarcodeScannerOptions = {   showTorchButton: false,   resultDisplayDuration: 100,   formats: "PDF_417",  } this.barcodeScanner.scan(options).then((barcodeData) => {   console.log('BARCODE', barcodeData)   } }).catch(error => {   console.log(error);   this.alertProvider.create({     title: 'Error',     cssClass: 'error-alert',     message: 'No se ha podido lanzar la camara.',     buttons: [{       text: 'Volver a Intentar'     }]   }).present();   });   } 

Ayuda para implementar correctamente Mobile Checkout

Estoy haciendo una implementación de Mobile Checkout en Node y Android para un e-commerce.

Mi backend crea la preferencia, la guarda en la orden de compra y luego regresa la orden con las preferencias al cliente, este usa el id de la preferencia para continuar con el pago.

Ahora, cuando realizo el pago (tarjetas de prueba), la respuesta me trae el id del pago, el cual lo envío al backend para actualizar la orden de compra.

Mi problema es, cuando obtengo el pago (en backend), no encuentro algún campo que relacione ese pago con la preferencia creada previamente, necesito esto para de poder confirmar que el pago pertenece a una orden, no puedo relacionarlo con el id la orden que me envía el cliente móvil porque eso sería una vulnerabilidad.

Es posible que me estoy saltando algo, espero puedan ayudarme con eso. Muchas gracias.

¿Por qué no puedo ingresar a mi panel de admin en PRESTASHOP aunque me loguee correctamente?

Acabo de instalar PrestaShop en mi localhost, pero no me deja loguearme para ingresar al panel de mi tienda (al backend). Cabe resaltar que no es un problema de contraseña, porque cuando la escribo mal (intencionalmente), aparece un mensaje de error en rojo, que me indica que no coincide; sin embargo, cuando inserto la contraseña correcta, carga un momento la pagina de login, y luego no ocurre nada, me deja en la misma pagina, como si hubiera presionado F5.

Sobre cómo lo instalé: Antes debo decir que uso GNU LINUX.

  • descargué PrestaShop de su web y lo descomprimí en el directorio OPT/LAMPP/HTDOCS/SHOP/ de mi XAMPP.
  • les di permisos totales (recursivos) a los directorios VAR (del sistema) y HTDOCS (porque al inicio no me dejaba instalar. decía que faltaban permisos).
  • creé mi base de datos llamada SHOP.
  • Fui a la URL donde estaba mi tienda, e instalé dando “next” y rellenando toda información, como clave, mail, database, etc.
  • eliminé el directorio INSTALL porque Prestashop me dijo que era recomendable por seguridad.
  • seguido de esto, me renombró el directorio, de admin a admin960690.
  • Finalmente tengo la interfaz de Login pero no me deja ingresar.

He cambiado de navegador, y hasta uso la ventana privada por si es un problema de caché, pero sigue igual.

¿porque la BD mongo no me trae los datos correctamente, solo undefined?

Estoy siguiendo un tutorial para hacer un chat con Nodejs y MongoDb, ya esta funcionando solo que los chats guardados solo dice undefined,este es el metodo para salvar los datos en la BD, la cual si creo la base de datos pero no inserta ningun dato

var newMsg=new Chat({ msg, nick: socket.nickname }); await newMsg.save(); //Chat es el modelo, se supone que deben salir los chats viejos, pero solo dice undefined:undefined

¿Que agregar y donde para que funcione correctamente el EventListener?

Estoy creando un proyecto de un curso, les paso captura del proyecto: introducir la descripción de la imagen aquí

En el lado izquierdo hay un boton Nuevo proyecto, al darle click se crean inputs y al dar enter, el texto de los inputs se agrega a la lista debajo de Proyectos.

Quisiera que al apretar Nuevo Proyecto, solo se cree un input y no varios, porque si se abren varios como en la imagen. En la imagen, seria el ejemplo, se abrieron 4 inputs y al primero le escribi Esto se va repetir 4, se van agregar 4 elementos a la lista valiendo Esto se va repetir 4.

Y quisiera que luego de que el input se agregue a la lista, recien ahi, al tocar en Nuevo Proyecto se cree otro input

Ahora les paso el código del sidebar.php

<aside class="contenedor-proyectos">     <div class="panel crear-proyecto">         <a href="#" class="boton">Nuevo Proyecto <i class="fas fa-plus"></i> </a>     </div>      <div class="panel lista-proyectos">             <h2>Proyectos</h2>         <ul id="proyectos">                 <li>                 <a href="#">                     Diseño Página Web                 </a>             </li>             <li>                 <a href="#">                     Nuevo Sitio en wordPress                 </a>             </li>         </ul>     </div> </aside> 

Y ahora el código del scripts.js

eventListeners();  //lista de proyectos var listaProyectos = document.querySelector('ul#proyectos');   function eventListeners(){     //boton para crear proyecto     document.querySelector('.crear-proyecto a').addEventListener('click', nuevoProyecto); };  function nuevoProyecto(e){     e.preventDefault();     console.log('Presionaste en nuevo proyecto');      // crea input para nombre del new proyecto     var nuevoProyecto = document.createElement('li');     nuevoProyecto.innerHTML = '<input type="text" id="nuevo-proyecto"></input>';     listaProyectos.appendChild(nuevoProyecto);      //selecionar id con el nuevo proyecto     var inputNuevoProyecto = document.querySelector('#nuevo-proyecto');      // al presionar enter creal el proyecto      inputNuevoProyecto.addEventListener('keypress', function(e){         var tecla = e.which || e.keycode;          if(tecla === 13) {             guardarProyectoBD(inputNuevoProyecto.value);             listaProyectos.removeChild(nuevoProyecto);         };     }); };  function guardarProyectoBD(nombreProyecto){     // inyectar html     var nuevoProyecto = document.createElement('li');     nuevoProyecto.innerHTML = `         <a href="#">             $  {nombreProyecto}         </a>     `;     listaProyectos.appendChild(nuevoProyecto);  }; 

Lo que intenté, fue agregarle:

Once:true 

al eventListener, quedando asi:

document.querySelector('.crear-proyecto a').addEventListener('click', nuevoProyecto,{once:true}); 

Pero eso no es una solución del todo efectiva, ya que después de agregar un elemento, al tocar el botón no se crea un nuevo input.