ввод данных в mysql с помощью формы
недавно опубликовал тот же вопрос, но случается, что он перестал работать! я пытаюсь ввести данные в таблицу в MySql. но я получаю эту ошибку:
Notice: Undefined variable: username in H:\SERVER\htdocs\SITIO2\2\content\control_register_user.php on line 22
Notice: Undefined variable: apellido in H:\SERVER\htdocs\SITIO2\2\content\control_register_user.php on line 22
Notice: Undefined variable: email in H:\SERVER\htdocs\SITIO2\2\content\control_register_user.php on line 22
Notice: Undefined variable: telefono in H:\SERVER\htdocs\SITIO2\2\content\control_register_user.php on line 22
Notice: Undefined variable: usuario in H:\SERVER\htdocs\SITIO2\2\content\control_register_user.php on line 22
Notice: Undefined variable: password in H:\SERVER\htdocs\SITIO2\2\content\control_register_user.php on line 22
Success
файл выглядит следующим образом:
Если вы знаете, как это сделать в PHP7?
является то, что я скачал последнюю версию XAMPP и приносит эту версию PHP
это файл, которому поручено вставить все в MySQL.
я также хотел бы реализовать некоторые элементы управления, которые говорят что введенный пользователь уже существует (если он вообще существует!)
я не хочу злоупотреблять вами, но если вы поможете мне с каким-либо контролем для длины password, который попросит ввести какую-то главную фразу, Это будет объяснено.
Большое спасибо заранее!!
Control_register_user.php:
session_start();
<?php include_once('header.php'); ?>
<h1>Control Register Usuario</h1>
<?php
define ("MYSQLUSER", "jolunavi");
define ("MYSQLPASS", "688200");
define ("HOSTNAME", "localhost");
define ("MYSQLDB", "msf");
if ($coneccion = @new mysqli (HOSTNAME, MYSQLUSER, MYSQLPASS, MYSQLDB));
if (isset($_REQUEST['user_nombre']) && isset($_REQUEST['user_apellido']) && isset($_REQUEST['user_email']) && isset($_REQUEST['user_telefono']) && isset($_REQUEST['user_usuario']) && isset($_REQUEST['user_password']) && isset($_REQUEST['user_token']))
{
#Asignar a las variable
$nombre = isset($_REQUEST['user_nombre']) ? $_REQUEST['user_nombre'] : '';
$nombre = isset($_REQUEST['user_apellido']) ? $_REQUEST['user_apellido'] : '';
$nombre = isset($_REQUEST['user_email']) ? $_REQUEST['user_email'] : '';
$nombre = isset($_REQUEST['user_telefono']) ? $_REQUEST['user_telefono'] : '';
$nombre = isset($_REQUEST['user_usuario']) ? $_REQUEST['user_usuario'] : '';
$nombre = isset($_REQUEST['user_password']) ? $_REQUEST['user_password'] : '';
$nombre = isset($_REQUEST['user_token']) ? $_REQUEST['user_token'] : '';
$sql = "INSERT INTO usuarios (user_nombre,user_apellido,user_email,user_telefono,user_usuario,user_password) VALUES ('$username','$apellido','$email','$telefono','$usuario','$password')";
$query = mysqli_query($coneccion, $sql);
if (!$query) {
echo "Error</br>";
echo $sql;
}
else {
echo "Success";
}
}
mysqli_close($coneccion);
?>
<?php include_once('footer.php'); ?>
пожалуйста, не могли бы вы помочь мне решить?
вот форма:
<?php include_once('header.php'); ?>
<h1>Registrate</h1>
<form action="control_register_user.php" method="post">
<div class="maintform">
<p class="formulario"><label for="name">Nombre: </label> <input placeholder="Ejm: Juan" type="text" name="user_nombre" id="user_nombre" /></p>
<p class="formulario"><label for="name">Apellido:</label> <input placeholder="Ejm: Gutierrez" type="text" name="user_apellido" id="user_apellido" /></p>
<p class="formulario"><label for="name">email: </label> <input placeholder="Ejm: [email protected]"type="text" name="user_email" id="user_email" /></p>
<p class="formulario"><label for="name">telefono:</label> <input placeholder="Ejm: 0931234567"type="text" name="user_telefono" id="user_telefono" /></p>
<p class="formulario"><label for="name">Usuario: </label> <input placeholder="Ejm: Pedrito1980"type="text" name="user_usuario" id="user_usuario" /></p>
<p class="formulario"><label for="name">Contraseña:</label> <input placeholder="Ejm: **************"type="password" name="user_password" id="user_password"/></p>
<p class="formulario">
<input class="ok" type="submit" name="testform" value="Terminado" />
<input class="no_ok" type="reset" name="testform" value="Restablecer" />
<input class="cancel" type="button" value="Cancelar" onclick="window.location.href='../index.php';"/></p>
<br />
<br />
<br />
<?php
$salt = 'SomeSalt';
$token = sha1(mt_rand(1,1000000) . $salt);
$_SESSION['token'] = $token;
?>
<input type="hidden" name="user_token" id="user_token" value="<?php echo $token; ?>"/>
</div>
</form>
<?php include_once('footer.php'); ?>
Большое Спасибо!!
4 answers
$link = mysqli_connect("localhost", "Root", "MyRootPassword", "MyDbName");
#Usa esta Verificacion
if (isset($_POST['username']) && isset($_POST['password']) && isset($_POST['name']) && isset($_POST['email'])) {
#Asignalas a una variable asi
$usuario_login =$_POST['username'];
$usuario_passwd =$_POST['password'];
$usuario_nombre =$_POST['name'];
$usuario_email =$_POST['email'];
$sql = "INSERT INTO members (username, password, name, email) VALUES ('$usuario_login', '$usuario_passwd', '$usuario_nombre', ' $usuario_email')";
$query = mysqli_query($link, $sql);
if (!$query) {
echo "Error";
} else {
echo "Success";
}
} else {
echo "Parametros vacios. Verifique POST del Form";
}
Это не ошибка mysql, это ошибка php, где вы используете $_POST ['username'] ничего не приходит к вам.
Предложения,
1) для отладки используйте метод GET, и вы увидите в адресной строке, что приходит к вам. 2) Используйте $_REQUEST вместо $_POST работает с GET и POST 3) Не используйте прямые значения, потому что вы можете сделать sql injection
Вы можете использовать функцию для извлечения данных из $_RQUEST что-то вроде
function traerParametro( $nombre ){
if ( array_key_exists( $nombre, $_REQUEST ) )
{
return funcionQueEviteSQLInjection( $_REQUEST[ $nombre ] );
}
return '';
}
Я не могу найти вашу ошибку, но я передаю вам код, который я сделал некоторое время назад, это объектно-ориентированный php я думаю, что это проще и эффективнее. Надеюсь, это послужит вам
Класс, отвечающий за управление подключениями к базе данных
Class DB{
private $servidor;
private $usuario;
private $password;
private $bd;
private $link;
//Constructor
function __construct(){
$this->servidor = 'localhost';
$this->usuario = 'root';
$this->password = '';
$this->bd = 'libreria';
$this->conectar(); /*Al inicializar la clase ya estará conectada*/
}
//Destructor
function __destruct() {
if (isset($this->link) && is_resource($this->link)) {
mysql_close($this->link);
}
}
/*Realiza la conexión a la base de datos.*/
private function conectar(){
$this->link=mysql_connect($this->servidor, $this->usuario, $this->password);
if (!$this->link){
die('Error de coneccion' . mysql_error());
}
else{
mysql_select_db($this->bd,$this->link);
mysql_query("set names 'utf8'");
}
}
Выполняет запрос возвращает результат
private function ExecuteQuery($query){
$resultado = mysql_query($query,$this->link);
if ($resultado)
return $resultado;
else
return false;
}
Выполняет запрос и не возвращает результат
private function ExecuteNonQuery($query){
if ( (mysql_query($query,$this->link)) == true ){
return true;
}
else{
return false;
}
}
Простая вставка с параметрами
public function InsertarLibro($titulo, $paginas,$precio,$foto,$genero,$autor)
{
$query="INSERT INTO libros(titulo,paginas,precio,foto,idGenero,idAutor) VALUES('$titulo', $paginas,$precio,'$foto',$genero,$autor)";
$this->ExecuteQuery($query);
$id = mysql_insert_id();
return $id;
}
Я надеюсь служить вам
Ошибка говорит вам, что переменные не определены, и в коде php проблема видна, все значения вы записываете в одну и ту же переменную $nombre
$nombre = isset($_REQUEST['user_nombre']) ? $_REQUEST['user_nombre'] : '';
$nombre = isset($_REQUEST['user_apellido']) ? $_REQUEST['user_apellido'] : '';
$nombre = isset($_REQUEST['user_email']) ? $_REQUEST['user_email'] : '';
$nombre = isset($_REQUEST['user_telefono']) ? $_REQUEST['user_telefono'] : '';
$nombre = isset($_REQUEST['user_usuario']) ? $_REQUEST['user_usuario'] : '';
$nombre = isset($_REQUEST['user_password']) ? $_REQUEST['user_password'] : '';
$nombre = isset($_REQUEST['user_token']) ? $_REQUEST['user_token'] : '';
Вы не определяете другие переменные. С другой стороны, я рекомендую вам, если вы получаете данные по POST, то вы получаете их через $_POST
------------------------------------------------------- EDIT: -------------------------------------------------------
@jolunavi, проблема в том, что вы используете несколько имен переменных для получения данных POST и других имен переменных в VALUES во время вставки.
Если вы используете эти имена переменных:
$nombre =$_POST['user_nombre'];
$apellido =$_POST['user_apellido'];
$email =$_POST['user_email'];
$telefono =$_POST['user_telefono'];
$usuario =$_POST['user_usuario'];
$password =$_POST['user_password'];
Затем вы должны исправить, изменив эту строку:
$sql = "INSERT INTO usuarios (user_nombre,user_apellido,user_email,user_telefono,user_usuario,user_password) VALUES ('$username','$apellido','$email','$telefono','$usuario','$password')";
Для этого:
$sql = "INSERT INTO usuarios (user_nombre,user_apellido,user_email,user_telefono,user_usuario,user_password) VALUES ('$nombre','$apellido','$email','$telefono','$usuario','$password')";
Вы должны очень хорошо проверить имена полей, порядок и избежать троцарирования переменные.
------------------------------------------------------- EDIT 2 ------------------------------------------------------
Спасибо Adres,
Вы были правы, это была та переменная, которая давала проблемы
Исправлено так:
<?php include_once('header.php'); ?>
<h1>Control Register Usuario</h1>
<?php
if (isset($_POST['user_nombre']) && isset($_POST['user_apellido']) && isset($_POST['user_email']) && isset($_POST['user_telefono']) && isset($_POST['user_usuario']) && isset($_POST['user_password']) && isset($_POST['user_token']))
{
# Asigno a una variable asi:
if (!empty($nombre =$_POST['user_nombre']));
if (!empty($apellido =$_POST['user_apellido']));
if (!empty($email =$_POST['user_email']));
if (!empty($telefono =$_POST['user_telefono']));
if (!empty($usuario =$_POST['user_usuario']));
if (!empty($password =$_POST['user_password']));
if (!empty($password =$_POST['user_token']));
В этом у меня проблемы
Как мне поставить элемент управления?
Вы говорите, что если пользователь уже существует ...это позволит мне изменить имя пользователя или что-то в этом роде
# creí poder solucionar asi, pero no funciona
if ($_GET['user_usuario']) == $_POST['user_usuario'])
{
echo "usuario ya existente"
}
(Продолжение)......
//imprimo las variables para saber si llegan o no
$nombre = $_POST['user_nombre']; echo "nombre: "; echo $_POST ['user_nombre']; echo "<br />";
$apellido = $_POST['user_apellido']; echo "apellido: "; echo $_POST ['user_apellido']; echo "<br />";
$email = $_POST['user_email']; echo "email: "; echo $_POST ['user_email']; echo "<br />";
$telefono = $_POST['user_telefono']; echo "telefono: "; echo $_POST ['user_telefono']; echo "<br />";
$usuario = $_POST['user_usuario']; echo "usuario: "; echo $_POST ['user_usuario']; echo "<br />";
$password = $_POST['user_password']; echo "password: "; echo $_POST ['user_password']; echo "<br />";
$token = $_POST['user_token']; echo "token: "; echo $_POST ['user_token']; echo "<br />";
echo "Los Archivos se reciben perfectamente. <br />";
$sql = "INSERT INTO usuarios (user_nombre,user_apellido,user_email,user_telefono,user_usuario,user_password) VALUES ('$nombre','$apellido','$email','$telefono','$usuario','$password')";
$query = mysqli_query($coneccion, $sql);
if (!$query) {
echo "Error</br>";
echo $sql;
}
else {
echo "Success";
}
}
mysqli_close($coneccion);
?>
<?php include_once('footer.php'); ?>