Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2019, 20:42   #1
monopo
 
Регистрация: 10.08.2019
Сообщений: 6
Печаль [PHP] Не работает передача в таблицу БД $_POST['']

Здравствуйте, товарищи. Нужна ваша помощь. Пытаюсь реализовать регистрацию на сайте, все сделал, но почему то не передает данные в таблицу бд. Вот код:
Код:
require ('connection.php');
$sql1 = "SELECT * FROM clients;"; 
 
if(isset($_POST['do_signup'])){
    $errors = array();
    if (trim($_POST['first_name']) == ''){
        $errors[] = 'You forgot to enter your first name';
    }
    
        if (trim($_POST['last_name']) == ''){
        $errors[] = 'You forgot to enter your last name';
    }
    
        if (trim($_POST['email']) == ''){
        $errors[] = 'You forgot to enter your email';
    }
    
        if (trim($_POST['password']) == ''){
        $errors[] = 'You forgot to enter your password';
    }
    
        if (trim($_POST['password']) != trim($_POST['password_2'])){
        $errors[] = 'Passwords do not match';
    }
 
    if (empty($errors)){
      $email = $_POST['email'];
      
      $sql1 = "INSERT INTO clients (email) VALUES ('$email')";
 
      $db->exec($sql1);
       
    }else{
      echo '<div style="color:red;">'.array_shift($errors).'</div>';
    }
}
Здесь я пока что пытаюсь передать только email, если получиться, дальше понятно будет. Данные считываются т.к. если с помощью echo вывести $_POST['email'], все работает. И связь с БД тоже есть тк если в переменную $email засунуть не $_POST['email'], а какое-то другое строковое значение, все передается. Соединение через PDO(Менять нельзя) Помогите пожалуйста разобраться, а то уже 5 часов на это потратил, голова болит просто жесть
monopo вне форума Ответить с цитированием
Старый 10.08.2019, 20:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а do_signup при вызове скрипта на клиенте установлен?

попробуйте такой код:
Код:
require ('connection.php');

if(!(isset($_POST['do_signup']))){
	echo 'Ошибка! Вы не задали do_signup!';
	exit();
}
.....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.08.2019, 21:05   #3
monopo
 
Регистрация: 10.08.2019
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
echo 'Ошибка! Вы не задали do_signup!';
exit();
теперь просто при переходе на страницу регистрации выдает эту ошибку
monopo вне форума Ответить с цитированием
Старый 10.08.2019, 21:37   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от monopo Посмотреть сообщение
теперь просто при переходе на страницу регистрации
Что и требовалось доказать.
следовательно, при вызове страницы регистрации переменная do_signup не устанавливается!
Устанавливайте эту переменную и заработает код в PHP в ветке
Цитата:
Код:
if(isset($_POST['do_signup'])){
(там, где Вы пытаетесь сделать INSERT)

как заработает, сразу исправляйте код - учтите, что пользовательские данные при записи в БД должны быть ОБЯЗАТЕЛЬНО санитаризированы (иначе получите SQL Injection в чистом виде!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2019, 02:33   #5
monopo
 
Регистрация: 10.08.2019
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Что и требовалось доказать.
следовательно, при вызове страницы регистрации переменная do_signup не устанавливается!
Устанавливайте эту переменную и заработает код в PHP в ветке
(там, где Вы пытаетесь сделать INSERT)

как заработает, сразу исправляйте код - учтите, что пользовательские данные при записи в БД должны быть ОБЯЗАТЕЛЬНО санитаризированы (иначе получите SQL Injection в чистом виде!)
Я не совсем понимаю как это сделать, можете подсказать как это в коде реализовать?
monopo вне форума Ответить с цитированием
Старый 11.08.2019, 08:56   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от monopo Посмотреть сообщение
Я не совсем понимаю как это сделать, можете подсказать как это в коде реализовать?
Сделать в HTML нужно так, как это было написано в том примере, откуда Вы брали свой код.

например, как в статье - https://obninsksite.ru/blog/php-scri...gistration-php

Код:
<form action="login.php" method="POST">
    <strong>Логин</strong>
    <input type="text" name="login" value="<?php echo @$data['login']; ?>"><br>
 
    <strong>Пароль</strong>
    <input type="password" name="password" value="<?php echo @$data['password']; ?>"><br>
 
    <button type="submit" name="do_signup">Добавить пользователя</button>
</form>
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2019, 20:38   #7
monopo
 
Регистрация: 10.08.2019
Сообщений: 6
По умолчанию

Не помогло, оно ведь у меня примерно так и было:

Код:
<form method="post" action="reg.php" id="msform" >
          
        <fieldset>
    <p class="info">Enter your information</p>

          <input type="text" name="first_name" class="field" placeholder="Enter your first name" value="<?php echo @$data['first_name']; ?>">
      
          <input type="text" name="last_name" class="field" placeholder="Enter your last name" value="<?php echo @$data['last_name']; ?>">
       
          <input type="text" name="email" class="field" placeholder="Enter your location" value="<?php echo @$data['email']; ?>">
          
          <input type="text" name="password" class="field" placeholder="Enter your new password" value="<?php ?>">
            
            <input type="text" name="password_2" class="field" placeholder="Re-enter your new password" value="<?php  ?>">
      
          <input type="hidden" name="user_id" value="<?php echo $user_id ?>">


          <input type="submit" name="do_signup" value="Submit" class="button">
            <br>
               <a href="login.php" style=" position: center;
margin-top: 0px;
margin-left: 8em;;">Log in</a>
          </fieldset> 
      </form>
Я вот не понимаю, тут ведь какое-то противоречие получается, если нету блока
Код:
if(!(isset($_POST['do_signup'])))
, то он заходит в блок
Код:
if(isset($_POST['do_signup']))
и выполняет все действия оттуда кроме отправки в таблицу, это ведь какой-то бред, или я чего-то не понимаю?

Вот весь код из файла:
Код:
 <?php
 
 ?>
 <!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Project Phase One</title>
    
   <link rel="stylesheet" href="style.css"> 
</head>

<body>
  <main>
     <h1>Sign Up </h1>
          <?php 
   
require ('connection.php');
$sql1 = "SELECT * FROM clients;"; 
if(!(isset($_POST['do_signup']))){
	echo 'Ошибка! Вы не задали do_signup!';
	exit();
}
if(isset($_POST['do_signup'])){
    
    $errors = array();
    if (trim($_POST['first_name']) == ''){
        $errors[] = 'You forgot to enter your first name';
    }
    
        if (trim($_POST['last_name']) == ''){
        $errors[] = 'You forgot to enter your last name';
    }
    
        if (trim($_POST['email']) == ''){
        $errors[] = 'You forgot to enter your email';
    }
    
        if (trim($_POST['password']) == ''){
        $errors[] = 'You forgot to enter your password';
    }
    
        if (trim($_POST['password']) != trim($_POST['password_2'])){
        $errors[] = 'Passwords do not match';
    }

    if (empty($errors)){
      $email = addslashes ($_POST['email']);
      
      $sql1 = "INSERT INTO clients (email) VALUES ('$email')";

      $db->exec($sql1);

      
     
    	 echo $data['first_name'];
       echo $data['last_name'];
       echo $email;
       
    }else{
      echo '<div style="color:red;">'.array_shift($errors).'</div>';
    }

}
      
?>

    <html>
<div class="form">
     <h3><p></p></h3>
      <form method="post" action="reg.php" id="msform" >
          
        <fieldset>
    <p class="info">Enter your information</p>

          <input type="text" name="first_name" class="field" placeholder="Enter your first name" value="<?php echo @$data['first_name']; ?>">
      
          <input type="text" name="last_name" class="field" placeholder="Enter your last name" value="<?php echo @$data['last_name']; ?>">
       
          <input type="text" name="email" class="field" placeholder="Enter your location" value="<?php echo @$data['email']; ?>">
          
          <input type="text" name="password" class="field" placeholder="Enter your new password" value="<?php ?>">
            
            <input type="text" name="password_2" class="field" placeholder="Re-enter your new password" value="<?php  ?>">
      
          <input type="hidden" name="user_id" value="<?php echo $user_id ?>">


          <input type="submit" name="do_signup" value="Submit" class="button">
            <br>
               <a href="login.php" style=" position: center;
margin-top: 0px;
margin-left: 8em;;">Log in</a>
          </fieldset> 
      </form>
    </div>
     
   </html>
    
</main>

<footer> <p>Copyright &copy; Ilya Budkevich 2019</p></footer>
</body>
</html>
Вообще а сколько мне удалось разобраться, дело в том что функция INSERT как то плохо взаимодействует с массивом POST, и для того чтобы работало, нужно как-то экранировать значение, но я не нашел как именно

Последний раз редактировалось monopo; 11.08.2019 в 20:51.
monopo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает передача данных REztor C# (си шарп) 7 04.04.2015 20:36
функция $_POST Losvegas PHP 1 17.03.2011 11:34
очистить $_POST[] BaiAs PHP 2 24.01.2011 15:47
Передача данных из Excel в созданную таблицу Самоучка БД в Delphi 2 06.11.2008 20:53
Добавить переменную в $_POST jziiiiiii PHP 4 23.02.2008 13:56