Data entry in MySQL using PHP

0

Good morning everyone.

I am studying PHP and I have had a problem entering data in MySQL. I have a contact entry code, I would like you to help me improve it, that I can make inquiries and how to do it, if possible with some practical example.

<?php
if(!empty($_POST))
{
    // Ingreso datos de contactos a la tabla MySQL usando PHP.
    //
    // Primer contacto (Este contacto siempre será ingresado, es obligatorio).
    $contact1_name  = $_POST['cont_nombres0'];
    $contact1_last  = $_POST['cont_apellis0'];
    $contact1_email = $_POST['cont_correo0'];
    $contact1_phone = $_POST['cont_tel0'];
    $contact1_cel   = $_POST['cont_cel0'];
    $contacts[0]    = array($contact1_name, $contact1_last, $contact1_email, $contact1_phone, $contact1_cel);

    //
    // Contactos 2, 3 y 4 (Estos contactos pueden o no estar presentes, tal vez todos o solo uno, o dos o ninguno están presentes)
    //
    $contact2_name  = isset($_POST['cont_nombres1']) ? $_POST['cont_nombres1'] : '';
    $contact2_last  = isset($_POST['cont_apellis1']) ? $_POST['cont_apellis1'] : '';
    $contact2_email = isset($_POST['cont_correo1']) ? $_POST['cont_correo1'] : '';
    $contact2_phone = isset($_POST['cont_tel1']) ? $_POST['cont_tel1'] : '';
    $contact2_cel   = isset($_POST['cont_cel1']) ? $_POST['cont_cel1'] : '';
    $contact2       = array($contact2_name, $contact2_last, $contact2_email, $contact2_phone, $contact2_cel);
    $contacts[1]    = "('" . implode("','", array_unique($contact2)) . "')";
    //$contacts[1]  = isset($data1) ? $data1 : '';

    $contact3_name  = isset($_POST['cont_nombres2']) ? $_POST['cont_nombres2'] : '';
    $contact3_last  = isset($_POST['cont_apellis2']) ? $_POST['cont_apellis2'] : '';
    $contact3_email = isset($_POST['cont_correo2']) ? $_POST['cont_correo2'] : '';
    $contact3_phone = isset($_POST['cont_tel2']) ? $_POST['cont_tel2'] : '';
    $contact3_cel   = isset($_POST['cont_cel2']) ? $_POST['cont_cel2'] : '';
    $contact3       = array($contact3_name, $contact3_last, $contact3_email, $contact3_phone, $contact3_cel);
    $contacts[2]    = "('" . implode("','", array_unique($contact3)) . "')";
    //$contacts[2]  = isset($data2) ? $data2 : '';

    $contact4_name  = isset($_POST['cont_nombres3']) ? $_POST['cont_nombres3'] : '';
    $contact4_last  = isset($_POST['cont_apellis3']) ? $_POST['cont_apellis3'] : '';
    $contact4_email = isset($_POST['cont_correo3']) ? $_POST['cont_correo3'] : '';
    $contact4_phone = isset($_POST['cont_tel3']) ? $_POST['cont_tel3'] : '';
    $contact4_cel   = isset($_POST['cont_cel3']) ? $_POST['cont_cel3'] : '';
    $contact4       = array($contact4_name, $contact4_last, $contact4_email, $contact4_phone, $contact4_cel);
    $contacts[3]            = "('" . implode("','", array_unique($contact4)) . "')";
    //$contacts[3]  = is_null($data3) ? $data3 : '';

    // Necesito guardar los datos en MySQL que está establecido, independientemente de si es solo un contacto, 
    // dos, tres o cuatro. Si dar errores y en una sola consulta.
    for($i=0;$i<4;$i++) {
        if($contacts[$i] != null) {
            $sql = "INSERT INTO contacts VALUES (" . $contacts[$i] . ");";
            echo '<pre>'; 
            var_dump($sql);
            echo '</pre>';
        }
    }
}

Thanks in advance.

    
asked by Gonzalo R. 18.12.2017 в 15:55
source

1 answer

0

I will assume in my example that you can not change the form in any way, so you always receive a $_POST similar to the one you indicated. If it were not like that, there would be even more optimizations to do. I will also assume that all contacts have all the fields filled out. If not, you will have to add several tests isset as in your original code; but for now it's easier that way.

<?php
if(!empty($_POST))
{
    // Ingreso datos de contactos a la tabla MySQL usando PHP.
    $db = new PDO('...', $usuario, $contra); // Conexión a base de datos usando PDO
    //
    // 
    $i = 1; // Primer contacto. Verás más abajo como lo vamos incrementando.
    while(isset($_POST['cont_nombres'+$i]) {
      $contact_name  = $_POST['cont_nombres'+$i];
      $contact_last  = $_POST['cont_apellis'+$i];
      $contact_email = $_POST['cont_correo'+$i];
      $contact_phone = $_POST['cont_tel'+$i];
      $contact_cel   = $_POST['cont_cel'+$i];
      $contacts[]    = array($contact_name, $contact_last, $contact_email, $contact_phone, $contact_cel);
      $i++;
    }
    // Necesito guardar los datos en MySQL que está establecido, independientemente de si es solo un contacto, 
    // dos, tres o cuatro. Si dar errores y en una sola consulta.
    $db->beginTransaction(); // Así esperaremos a haber terminado todo para enviar la transacción con la base de datos
    $stmt = $db->prepare("INSERT INTO contacts VALUES(?, ?, ?, ?, ?)"); // consulta preparada. Posteriormente, reemplazaremos cada '?' con su valor correspondiente en cada 'execute' que hagamos.
    foreach($contacts as $contact) {
      $stmt->execute(...$contact); // "Splat" (...) convierte un array en una lista de argumentos
    }
    $db->commit(); // Y aquí envíamos la transacción completa.
}
?>

Recommended reading: link

    
answered by 18.12.2017 в 17:27