0

estoy tratando de hacer un formulario autocompletado mediante un input (text)... he usado esta manera pero no sé si estará bien... les dejo el código: (Tengo una Tabla paciente(id,codigo_pac,nombre,apellido_paterno)

CONNECT.PHP

<?php
$hostname_strcn = "localhost";
$database_strcn = "basededatos";
$username_strcn = "usuario";
$password_strcn = "";
mysqli_connect($hostname_strcn, $username_strcn, $password_strcn) or 
die(mysqli_error());
mysqli_select_db($database_strcn) or die(mysqli_error());
?>

INDEX.PHP

<?php 
if (isset($_GET['action'])) { 

include_once('connect.php');

$strsql = "SELECT * FROM paciente WHERE codigo_pac=".$_GET['codigo_pac'];
$rs = mysqli_query($strsql) or die(mysqli_error());
$row = mysqli_fetch_assoc($rs);
$total_rows = mysqli_num_rows($rs);    

} 

?>

<div>
    <div class="form-group">
            <label for="first-name">Ingrese el Código del Paciente</label>
            <input type="text" class="form-control" id="codigo_pac" value="<?php echo($row['codigo_pac']);?>" name ="codigo_pac">
            <input type="hidden" id="action" name="action" value="sent">
            <input type="submit" id="btn_submit" value="Enviar">
        </div>

        </div>
<div class="form-group">
            <label for="first-name">Nombres</label>
            <input type="text" class="form-control" id="nom" name ="nom" value="<?php echo($row['nombre']); ?>">
        </div>
        <div class="form-group">
            <label for="last-name">Apellido Paterno</label>
            <input type="text" class="form-control" id="apat" name ="apat" value="<?php echo($row['apellido_paterno']); ?>">
        </div>

AL MOMENTO DE PROBARLO... me sale "Notice: Undefined variable: row in C:\xampp\htdocs\cnsbol\pacientebusqueda.php on line "... tanto en el input de codigo como los dos inputs de (nombre y apellido)... agradecería su ayuda por favor... (LA IDEA ES HACER UN AUTOCOMPLETADO DE FORMULARIO)... gracias

KVN20
  • 41
  • 2
  • 6
  • Aparte de que la consulta es vulnerable, el error se marca en _pacientebusqueda.php_. ¿Cómo le llega esa variable `$row`? – OscarR May 26 '18 at 06:18
  • creo que el error es que no se está definiendo en el formulario no?... alguna orientación o sugerencia OScarR? – KVN20 May 26 '18 at 06:28
  • Puede ser, pero entonces no se llama _index.php_ como has indicado. Probablemente sea que la consulta no retorna resultados. Prueba a hacer `var_dump($row);` para ver si la consulta tiene resultados. Puede que se acceda al resultado mediante `$row[0]['codigo_pac']`. – OscarR May 26 '18 at 06:51
  • 2
    Esto es adicional, sobre el tema de la vulnerabilidad de la consulta [¿Qué es la inyección SQL?](https://es.stackoverflow.com/a/10519/5984) – OscarR May 26 '18 at 06:54

1 Answers1

2

Lo primero es que, no estás usando la función mysqli_select_db() ya que no tienes un cambio de DB dinámico, entonces puedes pasarle al mysqli_connect() como cuarto valor la base.

Segundo, estás abriendo una conexión pero nunca la estas almacenando para usarla. Por eso no te marca error de conexión pero mysqli_query() requiere una conexión y una consulta para salir satisfactorio ya que estas usando el modo por procedimientos y no orientado a objetos de la conexión. Vista mysqli_query() para más información.

<?php
$hostname_strcn = "localhost";
$database_strcn = "basededatos";
$username_strcn = "usuario";
$password_strcn = "";
$conn = mysqli_connect($hostname_strcn, $username_strcn, $password_strcn, $database_strcn ) or 
die(mysqli_error());
?>

Entonces tu código quedaría así (le hice un par de validaciones también toma en cuenta los comentarios a cerca de la SQLInjection)

<?php 
if (isset($_GET['action'])) { 

include_once('connect.php');

//Consulta
$strsql = "SELECT * FROM paciente WHERE codigo_pac=".$_GET['codigo_pac'];

//Validar si la consulta está bien hecha al igual que la conexión
if( $rs = mysqli_query($conn, $strsql)){
    //Validar que la consulta haya retornado valores
    if( mysqli_num_rows($rs) > 0){
      //Sacar información
      $total_rows = mysqli_num_rows($rs);
      $row = mysqli_fetch_assoc($rs);
    }

    else{
      echo 'La consulta no retornó resultados';
      //Liberar memoria
      mysqli_free_result($rs);
    }
}

else{
  echo 'La consulta está mal formada o no se abrió la conexión';
}
//Cerrar conexión
mysqli_close($conn);

}

Que te sirva

Alberto Siurob
  • 6,620
  • 4
  • 22
  • 59