Array to string conversion. Изменение данных mysql с помощью php


у меня есть следующий код, который генерирует мне таблицу в php, возвращая мне данные, сохраненные в базе данных в mysql

require("conexion.php");

$consulta = mysqli_query($conexion, "SELECT * FROM clientes");

if (!$consulta) {
    die("Fallo al realizar la consulta");
}

echo ("<table border='1px'>");
echo ("<th> NOMBRE </th> <th> MEDIO DE PAGO </th> <th>PLAN CONTRATADO</th> <th> MODIFICAR </th> <th> ELIMINAR </th>");
while ($clientes = mysqli_fetch_array($consulta)) {
    echo ("<tr>");
    echo ("<td>$clientes[nombre]</td>");
    echo ("<td>$clientes[medioPago]</td>");
    echo ("<td>$clientes[plan]</td>");
    echo ("<td><a href='modificar.php?idC=$clientes[id]'>Modificar </a></td>");
    echo ("<td><a href='eliminar.php'>Eliminar </a></td>");
    echo ("</tr>");
}
echo ("</table>");

Как вы видите, каждая запись также генерирует ссылку, которая выводит меня на страницу modificar.php чтобы изменить данные, если это необходимо. С idC= $ клиенты[id] я получаю идентификатор клиента, который я хочу изменить. В моем файле modificar.php у меня есть следующий код

<form action="modificar.php">
        <label>Nuevo nombre: </label>
        <input type="text" name="nuevoNombre" placeholder="Ingrese el  nuevo nombre">

        <label>Medio de pago: </label>
        <select name="nuevoMedioPago">
            <option value="tarjeta">Tarjeta de credito</option>
            <option value="rapipago">Rapipago - Pagofacil</option>
            <option value="deposito">Deposito</option>
            <option value="efectivo">Efectivo</option>
            <option value="otro">Otro</option>
        </select>

        <label>Nuevo plan contratado: </label>
        <select name="nuevoPlanContratado">
            <option value="basico">Basico</option>
            <option value="avanzado">Avanzado</option>
            <option value="profesional">Profesional</option>
        </select>

        <input type="submit" value="Modificar">
    </form>


    <?php
    require("conexion.php");
    $idCliente = $_GET['idC'];

    echo ("Modificaras los datos del cliente cuya ID es: $idCliente <br>" );
    $consulta = mysqli_query($conexion, "SELECT * FROM clientes WHERE id = $idCliente");
    while ($mostrar = mysqli_fetch_array($consulta)) {
        echo ("Nombre: $mostrar[nombre] <br>");
        echo ("Medio de pago: $mostrar[medioPago] <br>");
        echo ("Plan: $mostrar[plan] <br>");
    }

    ////////////////////////////ACTUALIZACION////////////////////////////
    $nuevoNombre = ['nuevoNombre'];
    $nuevoMedioPago = ['nuevoMedioPago'];
    $nuevoPlanContratado = ['nuevoPlanContratado'];

    $actualizar = mysqli_query($conexion, "UPDATE clientes SET nombre='$nuevoNombre' , medioPago='$nuevoMedioPago' , plan='$nuevoPlanContratado' WHERE id = $idCliente");

    if (!$actualizar) {
        die("Fallo al actualizar los datos");
    }



    ?>

который бросает мне ошибку в строке, где у меня есть sql-запрос для обновления данных. В случае, если я использую GET или POST как в форме, так и при получении нового имени и т. д. ошибка, которую он бросает мне, - Undefined index.

приветствия и спасибо.

Author: Lucas. D, 2017-05-19

1 answers

['nuevoNombre'] ? это неправильно должно быть $_POST['nuevoNombre'], Если после этого он показывает

Undefined index.

Обычно это происходит потому, что при загрузке modificar.php выполняет код PHP и внутри него ищет indices, которые еще не были отправлены POST, там деталь.

Чтобы исправить это, вы можете проверить тип запроса, если он POST, используя ключ REQUEST_METHOD $_SERVER чтобы затем выполнить операции в зависимости от типа.

if($_SERVER['REQUEST_METHOD']=='POST'){
   /* Aquí debería validar con isset las claves, por Ejemplo . si no puede 
    volver a tener problemas*/
    $idCliente = $_POST['idC'];
    $nuevoNombre = $_POST['nuevoNombre'];
    $nuevoMedioPago = $_POST['nuevoMedioPago'];
    $nuevoPlanContratado = $_POST['nuevoPlanContratado'];

    $actualizar = mysqli_query($conexion, "UPDATE clientes SET nombre='$nuevoNombre' , medioPago='$nuevoMedioPago' , plan='$nuevoPlanContratado' WHERE id = $idCliente");

    if (!$actualizar) {
        die("Fallo al actualizar los datos");
    }
    else
       header("Location: nombredetuarchivo.php")
}

Хорошо , решение проблемы idCliente было бы значение GET непосредственно назначить . input - type hidden чтобы не потерять смелости, чтобы сделать POST , сменил код PHP , чтобы получить идентификатор POST поля hidden

  <form action="modificar.php" method="POST" >
  <input type="hidden" name="idC" value="<?php echo (isset($_GET['idC'])) ? $_GET['idC'] : 0 ?>">

После обновления и проверки выполнения обновления в bd (else), вы можете перенаправить на нужную страницу следующим образом (учитывая распределение ваших каталогов)

header("Location: nombredetuarchivo.php")

В качестве рекомендации читать избегайте инъекции SQL-кода

 1
Author: ,