Comunidad de diseño web y desarrollo en internet online

No logro encontrar el error, en array de insercion.

Citar            
MensajeEscrito el 21 May 2018 02:37 am
Ayuda para insertar array en mysql
Publicado por nitramara [email protected] (16 intervenciones) el 21/05/2018 04:18:17
Hola, me he visto abocado a intentar solicitarles colaboración con este tema ya que por mas que le he intentado no he logrado el cometido..
En primer lugar les indico que la idea es enviar atraves de post unos campos e insertarlos en la DB.
la verdad no logro ver cual es el error en este caso..
Este es el codigo HTML.

Código HTML :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <link rel="icon" type="image/png" href="img/med.png" />
    <script type="text/javascript" src="js/accion.js"></script>
   <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
   <script src="//code.jquery.com/jquery-1.10.2.js"></script>
   <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
 
<script type="text/javascript">
 
$(function() {
            $("#documento").autocomplete({
                source: "includes/productos.php",
                minLength: 2,
                select: function(event, ui) {
               event.preventDefault();
                    $('#documento').val(ui.item.documento);
               $('#nombres').val(ui.item.nombres);
               $('#cargo').val(ui.item.cargo);
               $('#grado').val(ui.item.grado);
               $('#telefono').val(ui.item.telefono);
               $('#email').val(ui.item.email);
              }
            });
      });
 
$(document).ready(function(){
    //group add limit
    var maxGroup = 5;
 
    //add more fields group
    $(".addMore").click(function(){
        if($('body').find('.fieldGroup').length < maxGroup){
            var fieldHTML = '<div class="form-group fieldGroup">'+$(".fieldGroupCopy").html()+'</div>';
            $('body').find('.fieldGroup:last').after(fieldHTML);
        }else{
            alert('Maximo '+maxGroup+' personas.');
        }
    });
 
    //remove fields group
    $("body").on("click",".remove",function(){
        $(this).parents(".fieldGroup").remove();
    });
});
      function onEnviar(){
            document.getElementById("variable").value=newElem;
         }
 
    </script>
</head>
  <body>
<?php
   include("navbar.php");
?>
 
<form id="combo" name="combo" method="POST" onsubmit="return validate(this);" action="dinamicos1.php">
      <div id="caja1">
         <strong><span>Direccion Responsable</span></strong><br />
            <select name="dependencia">
              <option value=""></option>
              <option value="Despacho">Despacho</option>
              <option value="transito">transito</option>
              <option value="Direccion errada">Direccion errada</option>
            </select>
                        <br />
                  </DIV>
      <br /><strong><span>Objeto entrega</span></strong><br /><textarea class="textfield" id="objeto" name="objeto" cols="85" rows="2"></textarea>
 
      <div id="caja">
         <strong><span>Fecha de elaboración</span></strong>
         <input type="date" id="fecha_ela" name="fecha_ela" step="1" min="2017-09-01"
          value="">
      <br />
         <strong><span>Numero de Registro</span></strong><br />
         <input type="text" size="5" name="registro" value="">
      <br />
         <strong><span>Fecha inico </span></strong>
         <input type="date" id="fecha_ini_comi" name="fecha_ini" step="1" min="2017-09-01" value="">
      <br />
         <strong><span>   Fecha  fin </span></strong><br />
         <input type="date" id="fecha_fin_comi" name="fecha_fin" step="1"
         min="2017-09-01" value="">
      </div>
   <form id="myForm">
      <div class="form-group fieldGroup">
      <strong><span> Ingresar persona(s) Max. 5  </span></strong>
         <div class="input-group">
            <input type="text" id="documento" name="documento[]"  onkeypress="return runScript(event)" placeholder="Digite Documento"/>
            <input type="text" id="nombres" name="nombres[]"  placeholder="Nombres"/>
            <input type="text" id="cargo" name="cargo[]"  placeholder="Cargo"/>
            <input type="text" id="grado" name="grado[]"  placeholder="Grado"/>
            <input type="text" id="telefono" name="telefono[]" placeholder="Telefono Contacto"/>
            <input type="text" id="email" name="email[]"  placeholder="Email"/>
            <div class="input-group-addon">
         <a href="javascript:void(0)" class="btn btn-success addMore"><span class="glyphicon glyphicon glyphicon-plus" aria-hidden="true"></span>Adiciona</a>
            </div>
         </div>
      </div>
   <!---   
   --->    
 
   <div class="form-group fieldGroupCopy" style="display: none;">
      <div class="input-group">
            <input type="text" id="documento" name="documento[]" onkeypress="return runScript(event)" placeholder="Digite Documento"/>
            <input type="text" id="nombres" name="nombres[]" placeholder="Nombres"/>
            <input type="text" id="cargo" name="cargo[]" placeholder="Cargo"/>
            <input type="text" id="grado" name="grado[]" placeholder="Grado"/>
            <input type="text" id="telefono" name="telefono[]" placeholder="Telefono Contacto"/>
            <input type="text" id="email" name="email[]" placeholder="Email"/>
         <div class="input-group-addon">
        <a href="javascript:void(0)" class="btn btn-danger remove"><span class="glyphicon glyphicon glyphicon-remove" aria-hidden="true"></span>Eliminar</a>
         </div>
      </div>
   </div>
   <div id="caja1" style="margin-bottom:4px;">
        <fieldset>
         <strong><span>Procesar</span></strong>
              <input type="submit" name="submit" class="btn btn-primary" value="SUBMIT"/>
             <input id="variable" name="variable" type="hidden" />
      </fieldset>
   </div
   </form>
</form>
  </body>
</html>

Y este es el PHP

Código PHP :

echo "<pre>";
   var_dump($_POST);
   echo "</pre>";
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "BASE_DATOS";
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$jsondata = ($_POST["submit"]);
$usuariosArray = explode(PHP_EOL, $jsondata);
 
foreach ($usuariosArray as $usuario) {
  $jsondata = json_decode($usuario.PHP_EOL, true);
  $jsonarray[] = array($jsondata);
}
 
   foreach ($jsonarray as $row) {
 
        $dependencia = $row[0]['dependencia'];
        $objeto = $row[0]['objeto'];
        $fecha_ela = $row[0]['fecha_ela'];
        $registro = $row[0]['registro'];
        $fecha_ini = $row[0]['fecha_ini'];
        $fecha_fin = $row[0]['fecha_fin'];
        $documento = $row[0]['documento'];
        $nombres = $row[0]['nombres'];
        $cargo = $row[0]['cargo'];
        $grado = $row[0]['grado'];
        $telefono = $row[0]['telefono'];
        $email = $row[0]['email'];
           $data = array('dependencia'=> $dependencia, 'objeto'=> $objeto, 'fecha_ela'=> $fecha_ela, 'registro'=> $registro,   'fecha_ini'=> $fecha_ini, 'fecha_fin'=> $fecha_fin, 'documento'=> $documento, 'nombres'=> $nombres, 'cargo'=> $cargo,'grado'=> $grado, 'telefono'=> $telefono, 'email'=> $email);
           $stmt = $conn->prepare('INSERT INTO prueba (dependencia, objeto, fecha_ela, registro, fecha_ini, fecha_fin, documento, nombres, cargo, grado, telefono, email) VALUES (:dependencia, :objeto, :fecha_ela, :registro, :fecha_ini, :fecha_fin, :documento, :nombres, :cargo, :grado, :telefono, :email);');
           $stmt->execute($data);
    }

Este es el Error que me tira

( ! ) SCREAM: Error suppression ignored for
( ! ) Fatal error: Call to a member function execute() on a non-object in C:\wamp\www\prueba\dinamicos1.php on line 40

Y este segundo caso.. que tampoco logro idear
Es que quiero que al crear el otro campo dinamico tambien pueda hacer lo que realizo con el primer campo.. y es que al digitar el documento de la persona me traiga desde la DB los campos que se requieren..
Pero no logro. hacer esto.. si me tiran algunas ideas.. bienvenidas..
Mil gracias..

Por nitramara

30 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 22 May 2018 11:32 pm
para el error que te da en la linea 40, es debido a que no puedes usar el EXECUTE, puede que la variable no sea un objecto debido a otro error previo, procura usar VAR_DUMP. para que veas que contiene cada variable,

en el mysql que manejas en el metodo "prepare" usas dos puntos ":" , eso en la documentacion no lo veo
http://php.net/manual/es/mysqli.prepare.php
si se que esos dos puntos son validos con PDO pero no con MYSQLI, fijate ello, el error podria provenir de una MAL Syntaxis de parte del SQL, para ello

procura usar los metodos de ERROR que tiene las clases como MYSQLI o de cualquier otra clase, la web de PHP sera tu mejor aliada, y no olvides leerte los comentarios en la web principal, ya que ponen ahi cosas utiles

http://php.net/manual/es/mysqli.error-list.php

*ahora, para tu parte del formulario, tienes que aprender a usar el DEBUGGER que tiene los navegadores OPERA;FIREFOX,Chrome,

en opera y CHrome se abre con las teclas CTRL+SHIFT+i (es la i latina)
en ella pdoras ver apartados, desde el javascript, o el CSS o el html,
y en tu caso el mas util sera el NETWORK, donde veras que datos se envian a tu archivo PHP, , y ya por parte de PHP siempre mira los datos que recibes del HTML o de la interfaz, haciendo en la primera linea un
var_dump($_GET) o var_dump($_POST) o ambos var_dump($_GET,$_POST) y confirmes que recibes lo que realmente envias,

y una cosa mas sobre los arrays en INPUTS TEXTAREA etc, no uses [] , siempre trata de numerarlos

Código HTML :

<input type="text" id="grado" name="grado[]"  placeholder="Grado"/>

enumeralos siempre es mejor para la depuracion,

Código HTML :

<input type="text" id="grado" name="grado[1]"  

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 22 May 2018 11:43 pm
en esta pagina puedes conseguir ayuda y aprender a cerca de base de datos, megacursos.com

Por Alexweb12

21 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 May 2018 03:01 am
Vale.. muchas gracias por sus comentarios.. pero la verdad he leido algo de esto y no logro entender toda esta locura.. puede ser porque soy autodidacta.. y aun no logro cazar toda esta vaina..
si tienen idea de como pueda hacerlo me ayudarian mucho si me tiran algun ejemplo..
Mil Gracias

Por nitramara

30 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 24 May 2018 01:54 am
Hola, bueno les comento he logrado el cometido y ya inserto los datos tal cual los requeria..
Ahora solo tengo un pequeño detalle y es que me inserta un campo de ceros por el recorrido del array..
habra la posibilidad que alguien me tire una idea de como lo soluciono..

Aca el codigo que utilizo..

Código :

for($i=0; $i<count($_POST['documento']); $i++) 
{ 
$insertar=mysql_query("INSERT INTO prueba(dependencia, objeto, fecha_ela, registro, fecha_ini, fecha_fin, documento, nombres, cargo, grado, telefono, email) 
            VALUES
            ('$dependencia','$objeto','$fecha_ela','$registro',
             '$fecha_ini','$fecha_fin','$documento[$i]','$nombres[$i]','$cargo[$i]','$grado[$i]','$telefono[$i]','$email[$i]')");     

if (!$insertar) { 
die("Fallo en la insercion de registro en la Base de Datos: " . mysql_error()); 
} 

} 

mysql_close($conexion); 
echo '<script>alert("Los datos han sido almacenados en la base de datos");</script>'; 
        echo '<SCRIPT LANGUAGE="javascript"> 
        </SCRIPT>';  

?>   


y esto es lo que me viene del array..

array (size=12)
'dependencia' => string 'Despacho' (length=8)
'objeto' => string 'daasdfjl asdf sadf' (length=19)
'fecha_ela' => string '2018-05-02' (length=10)
'registro' => string '256' (length=3)
'fecha_ini' => string '2018-05-25' (length=10)
'fecha_fin' => string '2018-05-30' (length=10)
'documento' =>
array (size=2)
0 => string '26571614' (length=8)
1 => string '' (length=0)
'nombres' =>
array (size=2)
0 => string 'MARTHA PATRICIA SALGADO DIAZ ' (length=29)
1 => string '' (length=0)
'cargo' =>
array (size=2)
0 => string 'Docente de aula ' (length=16)
1 => string '' (length=0)
'grado' =>
array (size=2)
0 => string '2BE ' (length=4)
1 => string '' (length=0)
'telefono' =>
array (size=2)
0 => string '3165323810' (length=10)
1 => string '' (length=0)
'email' =>
array (size=2)
0 => string '[email protected] ' (length=32)
1 => string '' (length=0)

Cualquier.. colaboracion sera Bienvenida..Mil gracias

Por nitramara

30 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 24 May 2018 02:32 am
el campo vacio, es por que en el lado del HTML, estas creando nuevamente los CAMPOS,
y puedes
*corregir el html
* poner un IF despues del "FOR" para que se salte en caso de que esten vacios los campos

Código PHP :

<?php

for($i=0; $i<count($_POST['documento']); $i++) 
{ 
    if($_POST['documento'][$i]==''){continue;}
    /*REsto de tu codigo*/
}


bueno ya luego otro comentario, es que no estas filtrando los datos que recibes, lee un poco sobre SQL INJECTION,, eso ya lo googleas luego

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 24 May 2018 02:33 pm
al parecer no estas dando condicion en el ciclo, y los va a llenar si o si, si quieres una guia puedes ir a megacursos.com alli es donde estoy haciendo el curso de base de datos. te lo recomiendo.

Por Alexweb12

21 de clabLevel



 

chrome
Citar            
MensajeEscrito el 24 May 2018 08:44 pm

tuadmin escribió:

el campo vacio, es por que en el lado del HTML, estas creando nuevamente los CAMPOS,
y puedes
*corregir el html
* poner un IF despues del "FOR" para que se salte en caso de que esten vacios los campos

Código PHP :

<?php

for($i=0; $i<count($_POST['documento']); $i++) 
{ 
    if($_POST['documento'][$i]==''){continue;}
    /*REsto de tu codigo*/
}


bueno ya luego otro comentario, es que no estas filtrando los datos que recibes, lee un poco sobre SQL INJECTION,, eso ya lo googleas luego



Ok.. muchas gracias por el aporte.. funciona perfecto.. una pregunta mas.. he leido en relacion a la injeccion SQl.. pero la verdad no entido muy bien estas locuras.. como te comente soy auto didacta y pues estoy haciendo esto es con retazos de lo que veo en internet.. claro que le he puesto algo de lo mio.. pero la verdad es pocon pocon.. tu me podrias tirar algun ejemplo para entender mejor esto de la injeccion SQL.. Mil gracias

Por nitramara

30 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 25 May 2018 03:22 am
vale a modo de ejemplo tomamos unf ragmento de tu codigo

Código PHP :

$insertar=mysql_query("INSERT INTO prueba(dependencia, objeto, fecha_ela, registro, fecha_ini, fecha_fin, documento, nombres, cargo, grado, telefono, email) 
            VALUES
            ('$dependencia','$objeto','$fecha_ela','$registro',
             '$fecha_ini','$fecha_fin','$documento[$i]','$nombres[$i]','$cargo[$i]','$grado[$i]','$telefono[$i]','$email[$i]')");


imaginate este fragmento html que es lo que haria

Código HTML :

<input name="email[]" value="x');DROP TABLE xxx; SELECT 1 ;-- "/>

mira en ese fragmento html lo que esta haciendo es que tu variable
$email[$i]
contenga codigo SQL que se injecta en tu script PHP , y la inyeccion es valida, osea no presentara errores en la funcion que ejecuta el SQL, con SQL se puede incluso manipular archivos , podria subir a tu servidor archivos PHP con el cual podria reemplazar tu sitio por otro, el ejemplo que te mando es meramente ilustrativo, existen programas que generan Inyeccion SQL , median fuerza bruta, en el cual aprovechan STRINGS de todo tipo, del tipo %FF o de escape de control, o de versiones PHP con ciertos fallos el cual hace que se cuelen CHARS de control como la comilla ',

en resumen el SQL INJECTION es una forma de hackear un sistema que no tiene los filtros correctos de todo lo que le entra, y con ello pueda ejecutar desde Modificacion de REgistros en tablas SQL imaginate que tengas un sistema de administracion y en un apartado de comentarios, por ejemplo , le inyecte una SQL que le de Permisos administrativos,

imaginate que haces un programa enorme que te lleva años, que incluso le pusiste todos los filtros, excepto a un archivo uno de tus primeros archivos y lo dejas olvidado, y el hacker en cuestion lo pilla y jugetea con el y luego ya da en el clavo, y tiene todos los permisos de tu sitio, que suba archivos a su servidor o incluso suba algun minador, o peor aun , que suba contenido ILEGAL a tu hosting y las autoridades te achaquen los cargos a ti por ser el dueño del hosting,

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.