php - Проблемы, введя данные MYSQL

Хорошие, я пробую вводить данные с моего формуляра, но когда я нажимаю на кнопку submit, меня бросает сообщение:

"Сделанная связь"

Что является сообщением моего файла php связи, больше ничего. Код, чтобы вводить, это у меня есть в другом файле. Это мой код.

Тот моего формуляра venta_cliente.php:

<div class="container clear_both padding_fix">
        <!--\\\\\\\ container  start \\\\\\-->



        <form action="php/registrar_cliente.php" method="POST">

                <div class="form-group">
                  <label for="idnom">Nombre:</label>
                  <input type="text" class="form-control" id="idnom" name="nnombre" REQUIRED placeholder="Ingresar Nombre">
                </div>

                <div class="form-group">
                  <label for="idape">Apellidos:</label>
                  <input type="text" class="form-control" id="idape" name="napellido" REQUIRED placeholder="Ingresar Apellidos">
                </div>

              <div class="form-group">
                <label for="idtdoc">Tipo de Documento:</label>
                <select class="form-control" id="idtdoc" name="ntdoc">
                  <option value="DNI">DNI</option>
                  <option value="RUC">RUC</option>
                </select>
              </div>



                <div class="form-group">
                  <label for="iddoc">Documento:</label>
                  <input type="text" class="form-control" id="iddoc" name="ndoc" REQUIRED placeholder="Numero de Documento">
                </div>


              <div class="row">

                <div class="form-group col-sm-4">
                  <label for="iddir">Direccion:</label>
                  <input type="text" class="form-control" id="iddir" name="ndireccion" REQUIRED placeholder="Ingresar Direccion">
                </div>

                <div class="form-group col-sm-8">
                  <label for="idtelf">Telf/Movil:</label>
                  <input type="text" class="form-control" id="idtelf" name="ntelf" REQUIRED placeholder="Ingresar Telf o Movil">
                </div>

              </div>


                <input type="submit" class="btn btn-primary" value="Registrar"></button>
            <button type="button" class="btn btn-default">Cancelar</button>

        </form>


      </div>
      <!--\\\\\\\ container  end \\\\\\-->

И это код моего файла, чтобы регистрировать registrar_cliente.php:

<?php 
include'conexion.php';

$nombre=$_POST['nnombre'];
$apellido=$_POST['napellido'];  
$tipo_doc=$_POST['ntdoc'];
$documento=$_POST['ndoc'];
$direccion=$_POST['ndireccion'];
$telf=$_POST['ntelf'];

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

$sql = "INSERT INTO cliente (nombre, apellidos, tipo_doc, dni, direccion, telfmovil)
VALUES ('$nombre', '$apellido', '$tipo_doc', '$documento', '$direccion', '$telf')";

if ($conn->query($sql) === TRUE) {
    echo "Datos registrados correctamente";
} else {
    echo "Ups! Error: " . $sql . "<br>" . $conn->error;
}

}

$conn->close();

 ?>

И код моего файла conexion.php:

<?php
$servername = "localhost";
$username = "root";
$password = "123";
$dbname = "dbagricola";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

if (mysqli_connect_error()) {
    die("Conexion a la Base de Dato fallida:  " . mysqli_connect_error());
}

echo "Conexion hecha";


?>

Файлы registrar_cliente.php и conexion.php они поселены в папке названной PHP: он это затрагивает, чтобы вводить данные?

Если они знают, который является моей ошибкой, он был бы очень благодарен, в котором они сделали это мне видеть, чтобы это исправлять.

5
задан 29.12.2016, 11:41
1 ответ

Проблема, которую я вижу:

if(isset($_POST['submit'])){//Esta variable no existe

для того, чтобы оно функционировало, с которым ты имеешь, ты был бы должен добавлять следующее за формуляром:

 <input type="submit" class="btn btn-primary" name="submit" value="Registrar">

Я надеюсь, что он подает тебя

10
ответ дан 24.11.2019, 14:08
  • 1
    Большое спасибо, я новый в PHP и он не знал, что добавляют признак, назовите (ямс) для неудара в лунку. Он думал, что это и #39; submit и # 39; он был из-за этого " type". – Raphael 16.06.2016, 08:54

Я буду отвечать тебе в твое добавочное вознаграждение, так как ответ, который принят, - ясен и правилен, код PHP я продвинул ее немного, что является частью, которая мне кажется слишком уязвимой, случай настоящего кода, я не вижу логик, как данные получают прямо с формуляра без какой-либо проверки в PHP.

В этом случае мы могли бы делать раньше проверку, если определен наш формуляр, и он подтвердил бы, что никакое поле этот пустой (неудар в лунку), и в противоположном случае он получил бы данные.

Чтобы получать данные, он использовал бы mysqli_real_escape_string(), когда один использует решения mysqli, в случае когда использует решения prepare() он не был бы правильным использовать вышеупомянутую функцию.

mysqli_real_escape_string — Убеги специальные символы цепи, чтобы использовать ее в решении SQL, принимая во внимание настоящий набор символов связи

Пример:

$nombre = mysqli_real_escape_string($conn, $_POST['nnombre']);

Заметь: мы могли бы делать больше проверок, если один хочет осуществить больше безопасности, как считение минимума и максимума в символах цепи, полученный с формуляра или какой-то expresión regular PHP чтобы санкционировать документы удостоверение личности, и т.д.

Поскольку они упомянули о тебе, лучше создавать sentencias preparadas чтобы защищать лучше наши решения от атак inyección SQL

Атаки inyección SQL только смоги происходить, если мы не форматируем части нашей консультации неуязвимого способа.

Злонамеренный формат был бы:

SELECT * FROM usuario WHERE nombre='Foo';

Правильный формат был бы:

SELECT * FROM usuario WHERE nombre='Foo\'; 

Шрифт (Английский язык):

Шрифт SOes:

Пример готовые решения:

Код HTML:

Заметь: признак name это наш идентификатор, чтобы получать наши данные как случай из-за метода POST или GET, в нашем случае идет быть из-за метода POST.

<form action="php/registrar_cliente.php" method="POST">

   <div class="form-group">
      <label for="idnom">Nombre:</label>
      <input type="text" class="form-control" id="idnom" name="nnombre" REQUIRED placeholder="Ingresar Nombre">
   </div>

   <div class="form-group">
      <label for="idape">Apellidos:</label>
      <input type="text" class="form-control" id="idape" name="napellido" REQUIRED placeholder="Ingresar Apellidos">
   </div>

   <div class="form-group">
      <label for="idtdoc">Tipo de Documento:</label>
      <select class="form-control" id="idtdoc" name="ntdoc">
         <option value="DNI">DNI</option>
         <option value="RUC">RUC</option>
      </select>
   </div>

   <div class="form-group">
      <label for="iddoc">Documento:</label>
      <input type="text" class="form-control" id="iddoc" name="ndoc" REQUIRED placeholder="Numero de Documento">
    </div>

    <div class="row">
        <div class="form-group col-sm-4">
            <label for="iddir">Direccion:</label>
            <input type="text" class="form-control" id="iddir" name="ndireccion" REQUIRED placeholder="Ingresar Direccion">
         </div>

         <div class="form-group col-sm-8">
            <label for="idtelf">Telf/Movil:</label>
            <input type="text" class="form-control" id="idtelf" name="ntelf" REQUIRED placeholder="Ingresar Telf o Movil">
          </div>

     </div>    

     <input type="submit" name="registrar" class="btn btn-primary" value="Registrar">
     <button type="button" class="btn btn-default">Cancelar</button>

</form> 

Код PHP (php/registrar_cliente.php)

<?php

//Reseteo variables.
$msg = $nombre = $apellido = $tipo_doc = $documento = $direccion = $telf = NULL;

//Comprobación definición formulario, mediante el identificador input submit.    
if(isset($_POST['registrar'])){

    //Comprobamos que no haya ningun campo vacio del formulario.
    if (empty($_POST['nnombre']) && empty($_POST['napellido']) && empty($_POST['ndoc']) && empty($_POST['ndireccion']) && empty($_POST['ntelf'])) {
        //Mensaje Error.
        $msg = "Ups, todos los campos del formulario son obligatorios.";
    } else {
        //Verdadero, obtenemos datos.
        $nombre = $_POST['nnombre'] ?: '';
        $apellido = $_POST['napellido'] ?: '';  
        $tipo_doc = $_POST['ntdoc'] ?: '';
        $documento = $_POST['ndoc'] ?: '';
        $direccion = $_POST['ndireccion'] ?: '';
        $telf = $_POST['ntelf'] ?: '';
    }

    //Comprobamos que todos nuestros datos sean verdadero.
    if ($nombre && $apellido && $tipo_doc && $documento && $direccion && $telf) {

        //Requeremos conexión MySQL (¡Importante! Llamamos a nuestra conexión donde vamos a utilizarlo).
        require_once'conexion.php';

        //Sentencia preparada.
        $sql = $conn->prepare("INSERT INTO cliente (nombre,apellidos,tipo_doc,dni,direccion,telfmovil) VALUES (?,?,?,?,?,?)");      

        //Ligamos parametros marcadores (?,?,?,... es decir, $nombre,$apellido,$tipo_doc,...)

        //Especificación del tipo de caracteres:

        //i     la variable correspondiente es de tipo entero
        //d     la variable correspondiente es de tipo double
        //s     la variable correspondiente es de tipo string
        //b     la variable correspondiente es un blob y se envía en paquetes

        $sql->bind_param("ssssss",$nombre,$apellido,$tipo_doc,$documento,$direccion,$telf); 

        //Ejecutar sentencia
        $ejecutar = $sql->execute();

        //Comprobamos que se ejecutó correctamente.
        if (false===$ejecutar) { #Falso

            exit('execute() failed: ' . htmlspecialchars($sql->error));

        } else { #Verdadero.

            //Mensaje OK.
            $msg = ucfirst($nombre) . " tus datos se registraron con exito.";
        }

        //Cerrar sentencia.
        $sql->close();      

    }

}//Fin isset.

//Mensajes OK / ERRORES.
echo $msg;        

?>
6
ответ дан 03.12.2019, 22:04