Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 10.08.2019, 21:42   #1
monopo
Новичок
 
Регистрация: 10.08.2019
Сообщений: 4
Репутация: 10
Печаль [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, 21:56   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,680
Репутация: 5617
По умолчанию

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

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

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

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

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

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

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

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

Цитата:
Сообщение от 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, 21:38   #7
monopo
Новичок
 
Регистрация: 10.08.2019
Сообщений: 4
Репутация: 10
По умолчанию

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

Код:
<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 в 21:51.
monopo вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:06.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru