За последние 24 часа нас посетили 19470 программистов и 1608 роботов. Сейчас ищут 975 программистов ...

Данные вводятся в БД при открытии страницы!Как исправить?

Тема в разделе "PHP и базы данных", создана пользователем Евгений_Rus31, 20 апр 2011.

  1. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Здраствуйте! Люди умные нужна ваша подсказка. Когда загружается страница с кодом, то автоматом добавляется поле в таблицу причем пустое!Как исправить, что б данные в таблицу добавлялись только при нажатии на кнопку Ввести данные! Заранее благодарю!

    Вот код:
    <?php
    include ('config.php'); - файл присоединение к базе данных
    $email = $_POST['email'];
    $address = $_POST['address'];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $sql = 'INSERT INTO members(email, address, first_name, last_name)
    VALUES("'.$email.'", "'.$address.'", "'.$first_name.'", "'.$last_name.'")';

    if(!mysql_query($sql))
    {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';}
    else
    {echo '<center><p><b>Данные добавлены!</b></p></center>';}

    ?>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Страница управления</title>
    </head>
    <body>

    <form method='post' action='/insert_data.php'>
    Введите имя: <input type='text' size='30' name='first_name' /><br />
    Введите фамилию: <input type='text' size='30' name='last_name' /><br />
    Введите E-mail: <input type='text' size=45 name='email' /><br />
    Введите адрес: <input type='text' size='100' name='address'/><br />
    <input type='submit' value='Добавить запись' />

    </body>
    </html>
     
  2. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Нужно добавить атрибут name к кнопке и делать проверку- нажата ли кнопка?
    PHP:
    1.  
    2. <?php
    3. include ('config.php'); - файл присоединение к базе данных
    4. if(isset($_POST['add']))
    5. {
    6.      $email = $_POST['email'];
    7.      $address = $_POST['address'];
    8.      $first_name = $_POST['first_name'];
    9.      $last_name = $_POST['last_name'];
    10.      $sql = 'INSERT INTO members(email, address, first_name, last_name)
    11.     VALUES("'.$email.'", "'.$address.'", "'.$first_name.'", "'.$last_name.'")';
    12.  
    13.      if(!mysql_query($sql))
    14.      {
    15.            echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';
    16.      }
    17.      else
    18.      {
    19.            echo '<center><p><b>Данные добавлены!</b></p></center>';
    20.      }
    21. }
    22. ?>
    23.  
    24. <html>
    25. <head>
    26. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    27. <title>Страница управления</title>
    28. </head>
    29. <body>
    30.  
    31. <form method='post' action='/insert_data.php'>
    32. Введите имя: <input type='text' size='30' name='first_name' /><br />
    33. Введите фамилию: <input type='text' size='30' name='last_name' /><br />
    34. Введите E-mail: <input type='text' size=45 name='email' /><br />
    35. Введите адрес: <input type='text' size='100' name='address'/><br />
    36. <input type='submit' value='Добавить запись'  name="add"/>
    37.  
    38. </body>
    39. </html>
    40.  
    41.  
    42.  
     
  3. Benjamin

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

    С нами с:
    23 янв 2009
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Тула
    А где </form>?
     
  4. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    А у тебя где? Я просто скопировал и вставил
    HTML:
    1.  
    2.  <input type='submit' value='Добавить запись'  name="add"/>
    3.  </form>
    4.   </body>
    5.   </html>
    6.  
     
  5. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Спасибо большое все заработало!Даже без </form>? можно и без него обходиться или это плохой тон? И подскажите как сделать так что б после нажатия кнопки добавлялись поля и после этого переходило на нужную страницу?
     
  6. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    1)Лучше, наверное, расставлять все нужные закрывающие тэги. Вдруг на одной странице понадобится несколько форм.
    2) после успешного добавления новой записи переход на другую страницу можно осуществить так
    header ("нужная страница");
    Единственно нужно помнить, что функция header сработает, если не было никакого вывода в браузер. Таким образом вместо вывода сообщения, что запись добавилась, нужно вызвать эту функцию
    PHP:
    1.  
    2. <?php
    3. include ('config.php'); - файл присоединение к базе данных
    4. if(isset($_POST['add']))
    5. {
    6.       $email = $_POST['email'];
    7.       $address = $_POST['address'];
    8.       $first_name = $_POST['first_name'];
    9.       $last_name = $_POST['last_name'];
    10.       $sql = 'INSERT INTO members(email, address, first_name, last_name)
    11.      VALUES("'.$email.'", "'.$address.'", "'.$first_name.'", "'.$last_name.'")';
    12.  
    13.       if(!mysql_query($sql))
    14.       {
    15.             echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';
    16.       }
    17.       else
    18.       {
    19.             //echo '<center><p><b>Данные добавлены!</b></p></center>';
    20.             header ("нужная страница");
    21.       }
    22.  }
    23.  
     
  7. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Жаль но пишет такую ошибку : Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\1\config.php:30) in Z:\home\localhost\www\1\insert_data.php on line 19
     
  8. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Если в config.php нет никакого вывода, то могу только предположить что после закрывающего тэга ?>
    есть пробел. Поэтому попробуй в config.php удалить закрывающий тэг ?>
     
  9. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
     
  10. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    В config.php есть вывод на экран текста! Это мешает header или тут в другом проблема? И как можно организовать выход на другую страницу если есть вывод в браузер?
     
  11. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Если есть вывод, то никак нельзя. Попробуй убрать вывод из config.php.
    Вообще-то логика работы скрипта обычно такая
    1) подсоединяются нужные php файлы и стартуется сессия
    2) определяется что нужно сделать в соответствии приходящими по GET или POST данными
    3) Изменяются при необходимости данные в базе данных
    4) формируется вывод и выводится в браузер
     
  12. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    спс все понятно! Еще такой код сочинил как в нем сделать так что б при вводе фамилии которой в базе не сущиствует выводило на экран, чуть ниже строки: echo 'Выбранные данные:'; надпись такой фамилии в базе не найдено. Заранее благодарю!
    Вот код:

    <html>
    <?php
    include "config.php";
    ?>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Страница управления</title>
    </head>
    <body>

    <form method='post'>

    Введите фамилию: <input type='text' size='30' name='last_name' /><br />

    <input type='submit' value='Выбрать' name="add"/><br /><br />


    <?php

    if(isset($_POST['add']))
    {
    $last_name = $_POST['last_name'];


    $sql="SELECT * FROM members WHERE last_name='$last_name'";


    $res=mysql_query($sql);


    echo 'Выбранные данные:';
    //В цикле выводим по очереди все полученные строки
    while ($memberinfo=mysql_fetch_array($res))
    {
    echo '<br /> <br />
    '.$memberinfo["last_name"].'
    '.$memberinfo["first_name"].' <br />
    '.$memberinfo["address"].' <br />
    '.$memberinfo["email"].'
    ';
    }

    }
    ?>

    </form>
    </body>
    </html>
     
  13. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    есть функция mysql_num_rows, которая возвращает количество записей в результирующем наборе записей
    PHP:
    1.  
    2. $sql="SELECT * FROM members WHERE last_name='$last_name'";
    3. $res=mysql_query($sql);
    4. $nrows=mysql_num_rows();// в $nrows количество записей.
    5. if($nrows==0)
    6. {
    7.      echo "Нет данных";
    8. }
    9. else
    10. {
    11.      // твой вывод для найденных записей
    12. }
    13.  
     
  14. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Все спс большое все понятно! mysql_num_rows(); это надо запомнить! ))
     
  15. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Что то не получается! Выводит постоянно нет данных а нужные записи не выводит даже если они и есть!Может что то не туда вставил посмотрите плс код:
    <html>

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Страница управления</title>
    </head>
    <body>

    <form method='post'>

    Введите фамилию: <input type='text' size='30' name='last_name' /><br />

    <input type='submit' value='Выбрать' name="add"/><br /><br />
    </form>
    <?php
    include "config.php";
    if(isset($_POST['add']))
    {
    $last_name = $_POST['last_name'];


    $sql="SELECT * FROM members WHERE last_name='$last_name'";

    $res=mysql_query($sql);

    if($nrows==0)
    {
    echo "Нет данных";
    }
    else
    {
    echo 'Выбранные данные:';

    //В цикле выводим по очереди все полученные строки
    while ($memberinfo=mysql_fetch_array($res))
    {
    echo '<br /> <br />
    '.$memberinfo["last_name"].'
    '.$memberinfo["first_name"].' <br />
    '.$memberinfo["address"].' <br />
    '.$memberinfo["email"].'
    ';
    }
    }
    }
    ?>
    </body>
    </html>
     
  16. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Там страку пропустил , но со строкой ошт\ибку вообще пишет:
    Warning: Wrong parameter count for mysql_num_rows() in Z:\home\localhost\www\1\index.php on line 26
    Нет данных


    Вот код:
    <html>

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Страница управления</title>
    </head>
    <body>

    <form method='post'>

    Введите фамилию: <input type='text' size='30' name='last_name' /><br />

    <input type='submit' value='Выбрать' name="add"/><br /><br />
    </form>
    <?php
    include "config.php";
    if(isset($_POST['add']))
    {
    $last_name = $_POST['last_name'];


    $sql="SELECT * FROM members WHERE last_name='$last_name'";

    $res=mysql_query($sql);

    $nrows=mysql_num_rows();
    if($nrows==0)
    {
    echo "Нет данных";
    }
    else
    {
    echo 'Выбранные данные:';

    //В цикле выводим по очереди все полученные строки
    while ($memberinfo=mysql_fetch_array($res))
    {
    echo '<br /> <br />
    '.$memberinfo["last_name"].'
    '.$memberinfo["first_name"].' <br />
    '.$memberinfo["address"].' <br />
    '.$memberinfo["email"].'
    ';
    }
    }
    }
    ?>
    </body>
    </html>
     
  17. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Все спасибо умная мысля призодит опосля! Надо было вставить переменную! Сори

    $nrows=mysql_num_rows($res);
     
  18. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Подскажите еще такое дело как сделать так что б вводимые в поля Last_name и First_name символы были только текстом, а при введении туда цифр выводило сообщение что неправельно введена фамилия или имя! Заранее благодарю.
    Вот код:
    <?php
    include "config.php";

    if(isset($_POST['add']))
    {



    $email = $_POST['email'];
    $address = $_POST['address'];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $sql = 'INSERT INTO members(email, address, first_name, last_name)
    VALUES("'.$email.'", "'.$address.'", "'.$first_name.'", "'.$last_name.'")';

    if(!mysql_query($sql))
    {
    echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';
    }
    else
    {


    }
    }
    ?>


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Страница управления</title>
    </head>
    <body>

    <form method='post' action=''>
    Введите имя: <input type='text' size='30' name='first_name' /><br />
    Введите фамилию: <input type='text' size='30' name='last_name' /><br />
    Введите E-mail: <input type='text' size=45 name='email' /><br />
    Введите адрес: <input type='text' size='100' name='address'/><br />
    <input type='submit' value='Добавить запись' name="add"/>
    </form>
    </body>
    </html>
     
  19. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Наверное можно использовать функцию preg_match с шаблоном $pattern = '/[0-9]/';

    Тогда preg_match($pattern, $subject) вернет 0 если нет цифр и 1 если есть хотя бы одна цифра
    Здесь $subject проверяемая строка
     
  20. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    С числами все получилось большое спс! Но образовался еще вопросик. Как сделать так что б проверялись на наличие цифр две строки без повторения функции preg_match с шаблоном $pattern = '/[0-9]/'; а все сделать в одной этой функции. И еще у меня без команды exit(); всеравно добавляется строка с командой exit(); все работает верно но стерается вся форма, можно как то организовать правельнее код без переноса кода формы в начало кода? Заранее благодарю
     
  21. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    Вот код:

    <?php
    include "config.php";

    if(isset($_POST['add']))
    {
    $email = $_POST['email'];
    $address = $_POST['address'];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $sql = 'INSERT INTO members(email, address, first_name, last_name)
    VALUES("'.$email.'", "'.$address.'", "'.$first_name.'", "'.$last_name.'")';

    $pattern = '/[0-9]/';
    $p=preg_match($pattern, $last_name);
    if($p==1)
    {
    echo "Неверно введена фамилия";
    exit();
    }

    if(!mysql_query($sql))
    {
    echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';

    }
    else
    {


    }
    }
    ?>


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Страница управления</title>
    </head>
    <body>

    <form method='post' action=''>
    Введите имя: <input type='text' size='30' name='first_name' /><br />
    Введите фамилию: <input type='text' size='30' name='last_name' /><br />
    Введите E-mail: <input type='text' size=45 name='email' /><br />
    Введите адрес: <input type='text' size='100' name='address'/><br />
    <input type='submit' value='Добавить запись' name="add"/>
    </form>
    </body>
    </html>
     
  22. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Для начала почитай про функцию preg_match. Если она не устраивает, поищи что нибудь другое
    Логика скрипта такая:
    1) если нажата кнопка добавить, то
    - если все данные правильные, то добавить новую запись и перейти на другую страницу
    - если нет, то вывести сообщение об ошибке и вывести форму
    2) если не нажата кнопка добавить, то вывести форму

    Согласно этой логике и нужно кодировать.
    В связи с повторным выводом формы возникает потребность сохранения и вывода в случае ошибки введенных пользователем данных и текста ошибки
    PHP:
    1.  
    2. <?php
    3. include "config.php";
    4. $err='';
    5. if(isset($_POST['add']))
    6. {
    7.     $email = $_POST['email'];
    8.     $address = $_POST['address'];
    9.     $first_name = $_POST['first_name'];
    10.     $last_name = $_POST['last_name'];
    11.     $pattern = '/[0-9]/';
    12.  
    13.     $p=preg_match($pattern, $last_name);
    14.     {
    15.         $err.="Неверно введена фамилия<br>";
    16.     }
    17.     $p=preg_match($pattern, $first_name);
    18.     {
    19.         $err.="Неверно введено имя<br>";
    20.     }
    21.     if($err=='')
    22.     {
    23.         $sql = 'INSERT INTO members(email, address, first_name, last_name) VALUES("'.$email.'", "'.$address.'", "'.$first_name.'", "'.$last_name.'")';
    24.         if(!mysql_query($sql))
    25.         {
    26.             echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';
    27.         }
    28.         else
    29.         {
    30.              // тут действия при успешном добавлении данных
    31.              exit;
    32.         }
    33.     }
    34. }
    35. else
    36. {
    37.     $email = '';
    38.     $address = '';
    39.     $first_name = '';
    40.     $last_name = '';
    41. }
    42. ?>
    43. <html>
    44. <head>
    45. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    46. <title>Страница управления</title>
    47. </head>
    48. <body>
    49. <?php
    50. if($err!='')
    51. {
    52.    echo $err;
    53. }
    54.  
    55. echo "<form method='post' action=''>
    56. Введите имя: <input type='text' size='30' name='first_name' value='$first_name' /><br />
    57. Введите фамилию: <input type='text' size='30' name='last_name' value='$last_name' /><br />
    58. Введите E-mail: <input type='text' size=45 name='email' value='$email' /><br />
    59. Введите адрес: <input type='text' size='100' name='address' value='$address'/><br />
    60. <input type='submit' value='Добавить запись' name='add'/>
    61. </form>";
    62. ?>
    63. </body>
    64. </html>
    65.  
     
  23. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    что то теперь вообще ниче правильно не работает ))) в любом случае выводит надпись Неверно введена фамилия и Неверно введено имя причем одновременно и без добавления в базу информации.
     
  24. Евгений_Rus31

    Евгений_Rus31 Активный пользователь

    С нами с:
    20 апр 2011
    Сообщения:
    61
    Симпатии:
    0
    и там где дальнейшие действия после успешного добавления данных - мне больше от этого ниче не надо надо просто что б добавляло инфу - значит надо удалить exit ? или как?
     
  25. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    1)нужно добавить проверку
    if($p==1)
    после
    $p=preg_match($pattern, $last_name);
    $p=preg_match($pattern, $first_name);

    PHP:
    1.  
    2. $p=preg_match($pattern, $last_name);
    3.       if($p==1)
    4.       {
    5.           $err.="Неверно введена фамилия<br>";
    6.       }
    7.       $p=preg_match($pattern, $first_name);
    8.       if($p==1)
    9.       {
    10.           $err.="Неверно введено имя<br>";
    11.       }
    12.  
    2) Если нужно, чтобы выводило форму то exit убери, а если чтобы скрипт больше ничего не делал, то оставь