За последние 24 часа нас посетили 9987 программистов и 439 роботов. Сейчас ищут 142 программиста ...

Добавление в базу

Тема в разделе "PHP и базы данных", создана пользователем mazahaler, 14 ноя 2017.

  1. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    17
    Симпатии:
    2
    Здравствуйте, я новичок в php, пытаюсь добавить новую запись в таблицу, но к сожалению не получается.
    Вот что я сделал:
    1. Подключил базу
    PHP:
    1. <?php
    2. try{
    3.     $db=new PDO ("mysql:dbname=request;host=localhost","root","mazahaker", array(
    4.         PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES UTF8",
    5.         PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_OBJ,
    6.         PDO::ATTR_ERRMODE=>TRUE
    7.     ));
    8. }catch(PDOExeception $e){
    9.     die ($e->getMessage());
    10. }?>
    2. Форму с полями для ввода
    HTML:
    1. <form method="post" action="add.php" class="orgAddform">
    2.         <p><span>Добавить организацию</span></p>
    3.         <input type="text" name="MainID_Ref" placeholder="MainID_Ref">
    4.         <input type="text" name="ParentType" placeholder="ParentType">
    5.         <input type="text" name="ObjectType" placeholder="ObjectType">
    6.         <input type="text" name="Name" placeholder="Name">
    7.         <input type="text" name="PrefixKod" placeholder="PrefixKod">
    8.         <input type="text" name="FTPServer" placeholder="FTPServer">
    9.         <input type="text" name="FTPUser" placeholder="FTPUser">
    10.         <input type="text" name="FTPPassword" placeholder="FTPPassword">
    11.         <input type="text" name="FTPPath" placeholder="FTPPath">
    12.         <input type="text" name="JurnalTemplate" placeholder="JurnalTemplate">
    13.         <input type="text" name="UnicStr" placeholder="UnicStr">
    14.         <input type="text" name="SendMessageUser" placeholder="SendMessageUser">
    15.         <input type="text" name="TName" placeholder="TName">
    16.         <input type="text" name="KodODU" placeholder="KodODU">
    17.         <input type="text" name="KodKPO" placeholder="KodKPO">
    18.         <input type="text" name="FTPPort" placeholder="FTPPort">
    19.         <input type="hidden" name="JurnalModification" value="<?php echo date ("Y-m-d H:i:s")?>">
    20.         <br/>
    21.         <br/>
    22.         <input class="btn" type="submit" name="addOrg" value="Добавить">
    23. </form>
    3.И затем я пытаюсь выполнить запрос
    PHP:
    1. <?php
    2. if(isset($_POST['addOrg']))
    3. {
    4.     $MainID_Ref=strip_tags(trim($_POST['MainID_Ref']));
    5.     $ParentType=strip_tags(trim($_POST['ParentType']));
    6.     $ObjectType=strip_tags(trim($_POST['ObjectType']));
    7.     $Name=strip_tags(trim($_POST['Name']));
    8.     $PrefixKod=strip_tags(trim($_POST['PrefixKod']));
    9.     $FTPServer=strip_tags(trim($_POST['FTPServer']));
    10.     $FTPUser=strip_tags(trim($_POST['FTPUser']));
    11.     $FTPPassword=strip_tags(trim($_POST['FTPPassword']));
    12.     $FTPPath=strip_tags(trim($_POST['FTPPath']));
    13.     $JurnalTemplate=strip_tags(trim($_POST['JurnalTemplate']));
    14.     $UnicStr=strip_tags(trim($_POST['UnicStr']));
    15.     $SendMessageUser=strip_tags(trim($_POST['SendMessageUser']));
    16.     $TName=strip_tags(trim($_POST['TName']));
    17.     $KodODU=strip_tags(trim($_POST['KodODU']));
    18.     $KodKPO=strip_tags(trim($_POST['KodKPO']));
    19.     $FTPPort=strip_tags(trim($_POST['FTPPort']));
    20.     $JurnalModification=$_POST['JurnalModification'];
    21.  
    22.  
    23.     $sql="INSERT INTO dbdeviceuniversalitem (MainID_Ref,ParentType,ObjectType,Name,
    24.   PrefixKod,FTPServer,FTPUser,FTPPassword,FTPPath,JurnalTemplate,UnicStr,SendMessageUser,TName,
    25.   KodODU,KodKPO,FTPPort,JurnalModification) VALUES ('
    26.   $MainID_Ref','$MainID_Ref','$ObjectType','$Name',
    27.   '$PrefixKod','$FTPServer','$FTPUser','$FTPPassword',
    28.   '$FTPPath','$JurnalTemplate','$UnicStr','$SendMessageUser','$TName',
    29.   '$KodODU','$KodKPO','$FTPPort','$JurnalModification')";
    30.     $db->exec($sql);
    31.     echo "<p class='success'>Новая организация была добавлена!</p>";
    32. }else{
    33.     echo 'Запись не была добавлена';
    34. }
    35.    
    36. ?>
    При нажатии на кнопку "Добавить" появляется надпись, "Новая организация была добавлена!". Но в базу запись не добавляется.
    Подскажите, в чем моя ошибка?
     
  2. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.462
    Симпатии:
    541
    Адрес:
    Лень
    во всем
     
  3. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    17
    Симпатии:
    2
    @MouseZver это ужасно. Тогда что я должен изменить, чтобы этот код стал добавлять в бд?
     
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    @mazahaler, для начала Вам следует посмотреть логи ошибок (логи БД в том числе). Возможно там будет подсказка.
     
    mazahaler нравится это.
  5. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    17
    Симпатии:
    2
    @Maputo, я нашел ошибку, она выглядит так:
    Incorrect integer value: ' 4' for column 'MainID_Ref' at row 1
    буд-то бы я каким-то образом ввожу пробел перед 4, но это не так. Из-за чего может такое быть?
     
    Maputo нравится это.
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    Если у Вас так же написано в коде, как и тут в посте, то у Вас там символ переноса строки после кавычки. Перенесите кавычку на другую строку
     
    mazahaler нравится это.
  7. Алекс8

    Алекс8 Новичок

    С нами с:
    18 май 2017
    Сообщения:
    915
    Симпатии:
    202
    strip_tag зачем тут?)
     
    mazahaler нравится это.
  8. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    17
    Симпатии:
    2
    @Maputo, спасибо, теперь все работает!)
    @Алекс8, не обращайте внимания, я просто переписываю код с видео
     
  9. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    17
    Симпатии:
    2
    Кстати, еще вопрос, как мне после добавления вывести надпись о успешном добавлении, если я использую редирект, чтобы избежать повторой отправки? Так не работает:
    PHP:
    1. if($db->exec($sql)){ @header("Location: ". $_SERVER["REQUEST_URI"]);
    2.         echo "<p class='success'>Новая организация была добавлена!</p>";
    3.     }
     
  10. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    @mazahaler, перед редиректом можно в сессии сохранить какое-нибудь значение, а в скрипте проверять - сохранено оно или нет. Если сохранено - вывести сообщение и удалить из сессии сохраненное значение.
     
    mazahaler нравится это.
  11. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    17
    Симпатии:
    2
    @Maputo, я еще ни разу не использовал сессии, но я попробовал так:
    Это добавил перед редиректом:
    PHP:
    1.     if (!isset($_SESSION['flag'])) $_SESSION['flag']=1;
    И вот такой скрипт:
    Код (Javascript):
    1. <script type="text/javascript">
    2.     var flag = <?php echo $_SESSION["flag"] ?>;
    3.     if (flag==1){
    4.         alert('Запись добавлена');
    5.         flag=0;
    6.     }
    7.     </script>
    Но так не работает. Подскажите, как это правильно сделать?
     
  12. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    Например так:
    PHP:
    1. ...
    2. if(isset($_SESSION['new_organisation']))
    3. {
    4.     echo "<p class='success'>Новая организация была добавлена!</p>";
    5.     unset($_SESSION['new_organisation']);
    6. }
    7. ...
    и в том месте где выполняете запрос:
    PHP:
    1. ...
    2. if($db->exec($sql))
    3. {
    4.     $_SESSION['new_organisation'] = ' ';
    5.     @header("Location: ". $_SERVER["REQUEST_URI"]);
    6. }
    7. ...
     
    mazahaler нравится это.
  13. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    17
    Симпатии:
    2
    @Maputo, почему-то не работает, может я что-то не в нужном месте написал?
    PHP:
    1. <?php
    2. if(isset($_POST['addOrg']))
    3. {
    4.     session_start();
    5.  
    6.     $MainID_Ref=strip_tags(trim($_POST['MainID_Ref']));
    7.     $ParentType=strip_tags(trim($_POST['ParentType']));
    8.     $ObjectType=strip_tags(trim($_POST['ObjectType']));
    9.     $Name=strip_tags(trim($_POST['Name']));
    10.     $PrefixKod=strip_tags(trim($_POST['PrefixKod']));
    11.     $FTPServer=strip_tags(trim($_POST['FTPServer']));
    12.     $FTPUser=strip_tags(trim($_POST['FTPUser']));
    13.     $FTPPassword=strip_tags(trim($_POST['FTPPassword']));
    14.     $FTPPath=strip_tags(trim($_POST['FTPPath']));
    15.     $JurnalTemplate=strip_tags(trim($_POST['JurnalTemplate']));
    16.     $UnicStr=strip_tags(trim($_POST['UnicStr']));
    17.     $SendMessageUser=strip_tags(trim($_POST['SendMessageUser']));
    18.     $TName=strip_tags(trim($_POST['TName']));
    19.     $KodODU=strip_tags(trim($_POST['KodODU']));
    20.     $KodKPO=strip_tags(trim($_POST['KodKPO']));
    21.     $FTPPort=strip_tags(trim($_POST['FTPPort']));
    22.     $JurnalModification=$_POST['JurnalModification'];
    23.  
    24.  
    25.     $sql="INSERT INTO dbdeviceuniversalitem (MainID_Ref,ParentType,ObjectType,Name,
    26.    PrefixKod,FTPServer,FTPUser,FTPPassword,FTPPath,JurnalTemplate,UnicStr,SendMessageUser,TName,
    27.    KodODU,KodKPO,FTPPort,JurnalModification) VALUES (
    28.    '$MainID_Ref','$ParentType','$ObjectType','$Name',
    29.    '$PrefixKod','$FTPServer','$FTPUser','$FTPPassword',
    30.    '$FTPPath','$JurnalTemplate','$UnicStr','$SendMessageUser','$TName',
    31.    '$KodODU','$KodKPO','$FTPPort','$JurnalModification')";
    32.  
    33.    
    34.     if(isset($_SESSION['new_organisation']))
    35.     {
    36.         echo "<p class='success'>Новая организация была добавлена!</p>";
    37.         unset($_SESSION['new_organisation']);
    38.     }
    39.  
    40.     if($db->exec($sql)){
    41.         $_SESSION['new_organisation'] = ' ';
    42.         @header("Location: ". $_SERVER["REQUEST_URI"]);
    43.     }
    44.    
    45. }
    46.  
    47. ?>
     
  14. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    @mazahaler, стартовать сессию лучше в начале скрипта. Внутри Вашего условия работать это не будет, так как этот участок кода работает только при отправке данных, а после смены локации массив $_POST опустошается.
    То что в строчках с 34 по 38 поставьте до 2й строчки, ну и старт сессии должен быть в самом начале.
     
    mazahaler нравится это.
  15. mazahaler

    mazahaler Новичок

    С нами с:
    2 ноя 2017
    Сообщения:
    17
    Симпатии:
    2
    @Maputo, теперь все работает. Большое вам спасибо за уделенное время.
     
    Maputo нравится это.
  16. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.462
    Симпатии:
    541
    Адрес:
    Лень
    да нахрена советуешь код с пупком
    --- Добавлено ---
    нету exit;
     
  17. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    Я не советую код с пупком - я помог исправить существующую ошибку. А исправлять то что автор не просит - это никому не нужно.
    И зачем exit?
     
  18. Sail

    Sail Новичок

    С нами с:
    1 ноя 2016
    Сообщения:
    96
    Симпатии:
    29
    Вызовом header() не прекращается выполнение скрипта.
     
  19. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    Это верно. Уточню вопрос - зачем в данном случае exit?
     
  20. artoodetoo

    artoodetoo Старожил
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    8.047
    Симпатии:
    387
    Адрес:
    из России с любовью
    затем. зачем выполнять код после header location, если результат никто не увидит? это блин самообман.

    это работает так: браузер, получив заголовок с location, не показывает полученный документ, а сразу образается к новому адресу.
     
  21. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    В данном случае самообман - считать, что этот exit автору очень нужен. Читайте код товарищи - там две фигурные скобочки и больше ничего.
    И комментарии читайте:
     
  22. artoodetoo

    artoodetoo Старожил
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    8.047
    Симпатии:
    387
    Адрес:
    из России с любовью
    это из разряда "надо ли ходить на выборы, если твой кандидат всё равно не победит" ))) может он потому и не побеждает, что его сторонники такие расслабленные.

    чувак, если не делать этого ВСЕГДА, наступит день и случится лажа. код изменяется. сейчас это последняя команда, завтра будет не последняя. не надо экономить буквы.
     
  23. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    670
    Симпатии:
    97
    Не согласен, что это надо делать всегда. Это надо делать тогда, когда это действительно необходимо. Еслиб это надо было делать всегда Zend включил бы инструкцию exit в исполнение header при смене локации.
    P.S.: по логике, да - exit тут не помешал бы. Но что в дальнейшем будет с этим кодом мы не знаем.;)
     
  24. artoodetoo

    artoodetoo Старожил
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    8.047
    Симпатии:
    387
    Адрес:
    из России с любовью
    не хочешь - не делай. заготавливай грабли.

    вот слава богу, что не всё на свете zend сделал за нас. потому что примеров дурной услужливости хватает:
    - register globals,
    - safe mode,
    - $_POST, который обычно содержит переменные post, но знает не про все методы,
    - magic quotes,
    - auto buffering,
    - непредсказуемый include_path,
    - и т.д.
    всё с благими намерениями…
     
  25. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    3.462
    Симпатии:
    541
    Адрес:
    Лень
    Зачем презервативы, когда можно самому контролировать ?
     
    artoodetoo нравится это.