$ _POST no recibe datos del texto de entrada mediante el formulario de etiqueta

Tengo problemas para enviar el valor de mi texto de entrada a mi variable ( $ name ) en mi código php:

Aquí envío mis datos a edit.php

<form action="edit.php" method="post">
    <input type="text" name="edit_text"/>
    <input id="send" type="submit"/>
</form>

mi archivo edit.php:

<?php
header("Content-Type: application/json");

$name = isset($_POST["edit_text"])?$_POST["edit_text"]:"";
$con=mysqli_connect("localhost","root","root","example");
$result = mysqli_query($con,"SELECT * FROM items WHERE name = '".$name."'");
$row = mysqli_fetch_array($result, MYSQL_ASSOC);

echo json_encode($row);
mysqli_close($con);
?>

Estoy buscando un registro en mi tabla, luego devuelvo un objeto json con los valores de mi consulta. Pero solo funciona si pongo el nombre de mi artículo directamente en la cadena:

$result = mysqli_query($con,"SELECT * FROM items WHERE name = 'ITEM'");

Yo uso getjson y console.log() para ver qué sucede y devuelve el objeto json con los valores correctos de mi tabla.

Pero si utilizo la misma consulta pero con mi variable $ name que ha asignado el mismo nombre de mi elemento concatenado a la consulta no funciona.

$result = mysqli_query($con,"SELECT * FROM items WHERE name = '".$name."'");

Siempre devuelve valores nulos como si no se asignara nada a mi variable $ name desde mi texto de entrada.

0
¿Qué tipo de encabezado es? El encabezado ("Content-Type: application/jason"); debe ser el encabezado ("Content-Type: application/json");
agregado el autor jogesh_pi, fuente
Arregle jason a json .
agregado el autor Killrawr, fuente
jajaja No vi eso, gracias por la respuesta, pero cambié jason a json en el encabezado pero nada cambió.
agregado el autor fernando, fuente
muchas gracias por los consejos, no sabía acerca de la inyección sql definitivamente voy a echarle un vistazo :)
agregado el autor fernando, fuente
¿Es esta una publicación de Ajax? ¿Has probado print_r ($ _ POST)?
agregado el autor Jason W, fuente
Compruebe el error de mysqli con mysqli_errno y mysqli_error
agregado el autor Marcel Balzer, fuente
Entonces, si publicamos edit_text con un valor como: "1", soltamos elementos de la tabla, seleccionamos "" ¿qué crees que pasará? ... Sugerencia: lee en la inyección sql. (y echa un vistazo a mysqli prepare ..)
agregado el autor Damien Overeem, fuente
adición al comentario de @ DamienOvereem: está ingresando directamente la entrada de su formulario en su consulta ( $ name , en este caso). Esto hace que su consulta sea muy vulnerable a la inyección de SQL.
agregado el autor Marijke Luttekes, fuente

1 Respuestas

Cambiaría tu código a algo como esto:

if (isset($_POST['edit_text'])) {

    $name = $_POST['edit_text'];
    $con=mysqli_connect("localhost","root","root","example");

    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    $result = mysqli_query($con,"SELECT * FROM items WHERE name = '$name'");

    $data = array();
    while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
                                      //Noitcie ^ the 'I' here
        $data[] = $row;
    }
    mysqli_close($con);
    echo json_encode($data);
}

Además, si usa comillas dobles, no necesita concatenar sus variables.

¡Espero que esto ayude!

0
agregado
Una cosa que consideraría es escaparse de sus variables ya que esto es vulnerable a la inyección sql. Un lugar para comenzar sería php.net/manual/en /mysqli-stmt.bind-param.php o busca en youtube cosas en PDO.
agregado el autor Ross Wilson, fuente
muchas gracias por tu ayuda ahora el código funciona muy bien
agregado el autor fernando, fuente
PHP - Comunidad española
PHP - Comunidad española
6 de los participantes

En este grupo hablamos de PHP. Partner: es.switch-case.com

JavaScript - Comunidad española
JavaScript - Comunidad española
4 de los participantes

En este grupo hablamos de JavaScript. Partner: es.switch-case.com