Здраствуйте! Люди умные нужна ваша подсказка. Когда загружается страница с кодом, то автоматом добавляется поле в таблицу причем пустое!Как исправить, что б данные в таблицу добавлялись только при нажатии на кнопку Ввести данные! Заранее благодарю! Вот код: <?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>
Нужно добавить атрибут name к кнопке и делать проверку- нажата ли кнопка? PHP: <?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 { 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='Добавить запись' name="add"/> </body> </html>
А у тебя где? Я просто скопировал и вставил HTML: <input type='submit' value='Добавить запись' name="add"/> </form> </body> </html>
Спасибо большое все заработало!Даже без </form>? можно и без него обходиться или это плохой тон? И подскажите как сделать так что б после нажатия кнопки добавлялись поля и после этого переходило на нужную страницу?
1)Лучше, наверное, расставлять все нужные закрывающие тэги. Вдруг на одной странице понадобится несколько форм. 2) после успешного добавления новой записи переход на другую страницу можно осуществить так header ("нужная страница"); Единственно нужно помнить, что функция header сработает, если не было никакого вывода в браузер. Таким образом вместо вывода сообщения, что запись добавилась, нужно вызвать эту функцию PHP: <?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 { //echo '<center><p><b>Данные добавлены!</b></p></center>'; header ("нужная страница"); } }
Жаль но пишет такую ошибку : 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
Если в config.php нет никакого вывода, то могу только предположить что после закрывающего тэга ?> есть пробел. Поэтому попробуй в config.php удалить закрывающий тэг ?>
В config.php есть вывод на экран текста! Это мешает header или тут в другом проблема? И как можно организовать выход на другую страницу если есть вывод в браузер?
Если есть вывод, то никак нельзя. Попробуй убрать вывод из config.php. Вообще-то логика работы скрипта обычно такая 1) подсоединяются нужные php файлы и стартуется сессия 2) определяется что нужно сделать в соответствии приходящими по GET или POST данными 3) Изменяются при необходимости данные в базе данных 4) формируется вывод и выводится в браузер
спс все понятно! Еще такой код сочинил как в нем сделать так что б при вводе фамилии которой в базе не сущиствует выводило на экран, чуть ниже строки: 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>
есть функция mysql_num_rows, которая возвращает количество записей в результирующем наборе записей PHP: $sql="SELECT * FROM members WHERE last_name='$last_name'"; $res=mysql_query($sql); $nrows=mysql_num_rows();// в $nrows количество записей. if($nrows==0) { echo "Нет данных"; } else { // твой вывод для найденных записей }
Что то не получается! Выводит постоянно нет данных а нужные записи не выводит даже если они и есть!Может что то не туда вставил посмотрите плс код: <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>
Там страку пропустил , но со строкой ошт\ибку вообще пишет: 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>
Все спасибо умная мысля призодит опосля! Надо было вставить переменную! Сори $nrows=mysql_num_rows($res);
Подскажите еще такое дело как сделать так что б вводимые в поля 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>
Наверное можно использовать функцию preg_match с шаблоном $pattern = '/[0-9]/'; Тогда preg_match($pattern, $subject) вернет 0 если нет цифр и 1 если есть хотя бы одна цифра Здесь $subject проверяемая строка
С числами все получилось большое спс! Но образовался еще вопросик. Как сделать так что б проверялись на наличие цифр две строки без повторения функции preg_match с шаблоном $pattern = '/[0-9]/'; а все сделать в одной этой функции. И еще у меня без команды exit(); всеравно добавляется строка с командой exit(); все работает верно но стерается вся форма, можно как то организовать правельнее код без переноса кода формы в начало кода? Заранее благодарю
Вот код: <?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>
Для начала почитай про функцию preg_match. Если она не устраивает, поищи что нибудь другое Логика скрипта такая: 1) если нажата кнопка добавить, то - если все данные правильные, то добавить новую запись и перейти на другую страницу - если нет, то вывести сообщение об ошибке и вывести форму 2) если не нажата кнопка добавить, то вывести форму Согласно этой логике и нужно кодировать. В связи с повторным выводом формы возникает потребность сохранения и вывода в случае ошибки введенных пользователем данных и текста ошибки PHP: <?php include "config.php"; $err=''; if(isset($_POST['add'])) { $email = $_POST['email']; $address = $_POST['address']; $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $pattern = '/[0-9]/'; $p=preg_match($pattern, $last_name); { $err.="Неверно введена фамилия<br>"; } $p=preg_match($pattern, $first_name); { $err.="Неверно введено имя<br>"; } if($err=='') { $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 { // тут действия при успешном добавлении данных exit; } } } else { $email = ''; $address = ''; $first_name = ''; $last_name = ''; } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Страница управления</title> </head> <body> <?php if($err!='') { echo $err; } echo "<form method='post' action=''> Введите имя: <input type='text' size='30' name='first_name' value='$first_name' /><br /> Введите фамилию: <input type='text' size='30' name='last_name' value='$last_name' /><br /> Введите E-mail: <input type='text' size=45 name='email' value='$email' /><br /> Введите адрес: <input type='text' size='100' name='address' value='$address'/><br /> <input type='submit' value='Добавить запись' name='add'/> </form>"; ?> </body> </html>
что то теперь вообще ниче правильно не работает ))) в любом случае выводит надпись Неверно введена фамилия и Неверно введено имя причем одновременно и без добавления в базу информации.
и там где дальнейшие действия после успешного добавления данных - мне больше от этого ниче не надо надо просто что б добавляло инфу - значит надо удалить exit ? или как?
1)нужно добавить проверку if($p==1) после $p=preg_match($pattern, $last_name); $p=preg_match($pattern, $first_name); PHP: $p=preg_match($pattern, $last_name); if($p==1) { $err.="Неверно введена фамилия<br>"; } $p=preg_match($pattern, $first_name); if($p==1) { $err.="Неверно введено имя<br>"; } 2) Если нужно, чтобы выводило форму то exit убери, а если чтобы скрипт больше ничего не делал, то оставь