Почему формуляр не сохраняет данных в базе данных используя PHP?

Я делаю систему, чтобы сохранять данные, очень простым способом.

Проблема: после того, как сохраняет он говорит, что не существует переменная связи, несмотря на то, что включен в файл php, потом говорит, что я сохраняю правильно, но он ничего не сохраняет в базе данных

Conexion.php:

<?php
$host = "localhost";
$usua = "root";
$pass = "";
$base = "php_practica";
$cone = new mysqli($host, $usua, $pass, $base);

if ($cone->connect_error)
    {
    die("Error de Conexion: " . $cone->connect_error);
    }

?>

Формуляр реестра:

<?php
include ("conexion.php");
?>
<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title> </title>
</head>

<body>
    <form method="POST" action="procesar.php">
        <h1 align="center">Bienvenido</h1>
        <a href="index.html">
            <ol>Pagina Principal</ol>
        </a>
        <a href="registrar.html">
            <ol>Registrar</ol>
        </a>
        <a href="listado.html">
            <ol>Listado</ol>
        </a>
        <a href="Sancion.html">
            <ol>Sancion</ol>
        </a>
        <div> Ingrese su nombre </div>
        <input type="text" name="nombre">

        <div> Ingrese su apellido </div>
        <input type="text" name="apellido">

        <div> Ingrese su cedula </div>
        <input type="text" name="cedula">

        <div> Ingrese su rango </div>
        <div>
            <select name="rango">
                <option value="1">First</option>
                <option value="2">Second</option>
                <option value="3">Third</option>
            </select>
        </div>
        <input type="submit" value="enviar">
</body>

</html>

Procesar.php

<?php
include ("conexion.php");
include ("funciones.php");
?>

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title> </title>
</head>

<body>
    <form method="POST" action="funciones.php">
        <?php

bd_agregar($_REQUEST);
?>
</body>

</html>

Funciones.php:

<?php
include ("conexion.php");

function bd_agregar($temp){
$nombre=$_REQUEST["nombre"];
$apellido=$_REQUEST["apellido"];
$cedula=$_REQUEST["cedula"];
$rango=$_REQUEST["rango"];
mysqli_query($cone,"INSERT INTO personal (nombre,apellido,cedula,rango)
VALUES ('$nombre','$apellido','$cedula','$rango')");
}


//Revisar si guardo correctamente//
if (mysqli_connect_errno($cone)) 
  {
  echo "Error al guardar los datos:" . mysqli_connect_error(); 
  }
  else
  {
    echo "Datos guardados correctamente:";
    }

mysqli_close($cone); 
?>

ОШИБКА:

Notice: Изменчивый Undefined: cone in C:\xampp\htdocs\PHP\Sistema de practica\funciones.php он-лайн 9---Warning: mysqli_query () expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\PHP\Sistema de practica\funciones.php он-лайн 10

2
задан 05.05.2017, 15:46
0 ответов

Другая маленькая ошибка, которую я вижу, состоит в том, что в твоей связи ты поместил connect_error и он должен бы быть connect_errno

Conexion.php

Твой код:

$host="localhost";
$usua="root";
$pass="";
$base="php_practica";
$cone = new mysqli($host,$usua,$pass,$base);

if ($cone->connect_error) {
                   ^^^^^^
   die("Error de Conexion: " . $cone->connect_error);
                                              ^^^^^^
} 

Обновленный код:

$host="localhost";
$usua="root";
$pass="";
$base="php_practica";

$cone = new mysqli($host,$usua,$pass,$base);

if ($cone->connect_errno) {
   echo "Falló la conexión a MySQL: (" . $cone->connect_errno . ") " . $cone->connect_error;    
} 

Полный пример, протестированный в localhost:

Формуляр реестра:

<form method="POST" action ="procesar.php">     
    <label> Ingrese su nombre </label>
    <input type="text" name="nombre">

    <label> Ingrese su apellido </label>
    <input type="text" name="apellido">

    <label> Ingrese su cedula </label>
    <input type="text" name="cedula">

    <label> Ingrese su rango </label>
    <div><select name="rango">
      <option value="1">First</option>
      <option value="2">Second</option>
      <option value="3">Third</option>
    </select></div>

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

procesar.php

<?php    
  require_once'conexion.php';
  include'funciones.php';

  bd_agregar($_REQUEST);

  //Cerramos conexión.
  $cone->close();     
?>

funciones.php

<?php
  require_once'conexion.php';

  //Creamos función
  function bd_agregar($temp){
    //Especificamos variable global.
    global $cone;

    //Obtenemos datos formulario
    $nombre = $_REQUEST['nombre'];
    $apellido = $_REQUEST['apellido'];
    $cedula = $_REQUEST['cedula'];
    $rango = $_REQUEST['rango'];

    //Insertamos datos
    $cone->query("INSERT INTO personal (nombre,apellido,cedula,rango) VALUES ('$nombre','$apellido','$cedula','$rango')");         
      echo $nombre.$apellido.$cedula.$rango;
  }

  //Comprobamos ejecución sentencia.
  if ($cone===false) {
    printf("Mensaje de error: %s\n", $cone->error);
  } else {
    echo "Los datos se insertaron correctamente";
  }

  //Aqui tienes el error de no insertar tus datos 
  //Warning: mysqli_query() expects parameter 1 to be mysqli, null given in...      
  //$cone->close(); 
?>
0
ответ дан 03.12.2019, 17:39
  • 1
    Это или я это исправил, или функционирует хорошо связь, сейчас, когда я хочу это функции, потому что мне кажется неэффективным иметь все SQL в каждом php, мне кажется лучше иметь файл функцию –  17.01.2017, 21:19
  • 2
    @VictorA. я оставил тебе полный пример, протестированный в localhost. я оставляю тебя tambié n учебник на как использовать ты изрекаешь стиль, ориентируемый на объекты: php.net/manual/es/mysqli.query.php –  17.01.2017, 23:38
  • 3
    Брат, превосходный код, который ты переместил меня, сейчас не, который происходит, но ничего не вводит в BD –  18.01.2017, 02:04
  • 4
    Он не бросал ошибку, проблема была во мне я начинаю, чтобы показывать список данных о таблице рангах, случалось, что была упорядочена плохо последовательность кавычек, следовательно проходила стоимость в самой мишени старалась вводить $reg [" rango"]. –  18.01.2017, 17:22

То, что вижу я, состоит в том, что ты запутываешь немного концепций программирования procedural и POO (Программирование, ориентируемое на объекты). Чтобы закрывать связь он был бы должен закрывать ее следующего способа $mysqli->close();. Другая вещь, которую я вижу, состоит в том, что ты включаешь связь во все стороны. Только ты был бы должен включать ее в Procesar.php.

В консультации это должный быть быть так:

$mysqli->query($cone,"INSERT INTO personal
(nombre,apellido,cedula,rango)
VALUES ('$nombre','$apellido','$cedula','$rango')");

... и для того, чтобы функционировала переменная $cone, или ты делаешь ее глобальной, или перемещаешь ее из-за аргумента функции.

1
ответ дан 03.12.2019, 17:39
  • 1
    Используйте такое: function bd_agregar ($temp) { глобальный $cone; $ nombre= $ _REQUEST [' nombre']; $ apellido= $ _REQUEST [' apellido']; $ cedula= $ _REQUEST [' cedula']; $ rango= $ _REQUEST [' rango']; $ cone-> query ($cone," INSERT личный INTO (имя, фамилия, долговое обязательство, ранг) ОЦЕНИ (' $ nombre' ' $ apellido' ' $ cedula' ' $ rango') "); бросил $nombre. $apellido. $cedula. $rango; }, но он говорит, что нет 1 аргумента –  17.01.2017, 21:40

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

Чтобы это решать и мочь использовать $cone внутри твоей функции, доказательства добавляя это как первая линия функции bd_agregar:

global $cone;

Немного как это:

function bd_agregar($temp){
  global $cone;
  $nombre=$_REQUEST["nombre"];
  $apellido=$_REQUEST["apellido"];
  $cedula=$_REQUEST["cedula"];
  $rango=$_REQUEST["rango"];
  mysqli_query($cone,"INSERT INTO personal (nombre,apellido,cedula,rango) VALUES ('$nombre','$apellido','$cedula','$rango')");
}
2
ответ дан 03.12.2019, 17:39
  • 1
    Я протестирую распределять эту глобальную переменную, что я сделал в конце концов, было: удалять функцию и размещать обрабатывать с этим прямым кодом, но он мне кажется неэффективным, если я исправляю это, что ты говоришь мне, у него мог бы быть мой funciones.php, потому что я добавил другие функции, но прямые в коде –  17.01.2017, 21:20
  • 2
    Сейчас уже функционирует функция, не дает ошибка, jajaja, что излишек, но он дает мне ошибку MYSQLI –  17.01.2017, 21:27

Привет друг, как Я Читаю тот же php, он говорит тебе точно, где - ошибка, ищи тебе файл php:

Funciones.php:

<?php
include ("conexion.php");
function bd_agregar($temp){
$nombre=$_REQUEST["nombre"];
$apellido=$_REQUEST["apellido"];
$cedula=$_REQUEST["cedula"];
$rango=$_REQUEST["rango"];
**mysqli_query($cone,"INSERT INTO personal (nombre,apellido,cedula,rango)
VALUES ('$nombre','$apellido','$cedula','$rango')");
}**

как я читаю

Notice: Изменчивый Undefined: cone in C:\xampp\htdocs\PHP\Sistema de practica\funciones.php он-лайн 9---Warning: mysqli_query () expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\PHP\Sistema de practica\funciones.php он-лайн 10

твоя ошибка находится точно в этом файле Funciones.php: в линии 9 и 10

линия новый 9 говорит тебе, что вставление не принимает стоимость NULL мята, что 10 это ожидая результата, X костлявую - как будто тебе не хватало линии, но в действительности состоит в том, что таблица не позволяет тебе стоимость Nulls., и не будучи введена тебя бросает вышеупомянутая ошибка.

Пример, если ты хочешь вставление, чтобы это осталось так:

ID    nombre  apellido cedula    rango
1     pedro   Alvarez  15600600  teniente 

но в твоем scrip MySQL ты это делаешь:

INSERT личный INTO (имя, фамилия, долговое обязательство, ранг) ОЦЕНИ ('pedro', 'Альварес','', 'лейтенант');

Твое поле Долговое обязательство останется в мишени:

ID    nombre  apellido cedula    rango
1     pedro   Alvarez            teniente 

ОЩУТИТЕСЬ, что поле идентификация было бы должно наполняться Только (Для наполненного автомобиля должна бы быть таблица mysql в Вашем рисунке у маленького ключа так называемого Key на английском желтого цвета во многих случаях она говорит тебе, что поле наполняется только в других случаях, проверяет, что рисунок сказал тебе, что он позволяет стоимость null) костлявая это

ID valor_de_digitos ejemplo INT **NOT NULL**
nombre valor_de_digitos ejemplo Varchar(250) NULL
apellido valor_de_digitos ejemplo Varchar(250) NULL
cedula valor_de_digitos ejemplo INT NULL
rango valor_de_digitos ejemplo Varchar(250) NULL

Уже факт, что колонну тебе говорит NOT NULL, значит, что он не допускает тебе стоимость NULL

0
ответ дан 03.12.2019, 17:39
  • 1
    и поскольку он мог бы упорядочивать это?, служи хорошо тогда, как я подбираю данные?, используйте один я начинаю, чтобы видеть внутри функций, и если он сохраняет их, но не, если funció n принес пользу так называемый. что-то, что он пробовал бы, состояло в том, чтобы размещать код conexion.php в самом файл функций, и так не выходит ошибка линии 9, но не сохраняет и он ничего не вводит –  17.01.2017, 04:26
  • 2
    Если elemino линия function bd_agregar () { } все подлатывает, что сможет происходить? –  17.01.2017, 05:07
  • 3
    Одинокий друг проверяет, что таблица, что ты используешь в твоем основании данные, приняла стоимость null, я думаю, что, если ты делаешь вставление края благосклонно принятая которая, и каков не костлявая я esplico, если ты вводишь так со всеми полями full, как я читаю в твоей консультации, есть 4 Поля, которые ты должен наполнять, и это имя, фамилия, долговое обязательство, ранг, если у тебя есть какие-то 5 или шестое поле, что ты оставил назначенной по умолчанию пустоту это, говорит тебе, что или тебя принимает стоимость NULL, которая является равной пустоте. –  17.01.2017, 13:11
  • 4
    если друг у тебя есть проблема, чтобы быть более точным это в твоем основании данные –  17.01.2017, 13:34
  • 5
    у меня есть другая более полная система и работай с долговым обязательством вместо id, потому что как таковой в моей стране, идентификация - долговое обязательство, Ваш единственный код, уже я заставил систему функционировать, но как он писал более наверху, он дает мне проблемы, использовав FUNCTION, не перемещает никакой стоимости –  17.01.2017, 21:42