| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Добавление лишь в одно поле таблицы базы |
| Автор: nurv_ad 26.2.2007, 23:53 | ||
| Доброго времени суток. У меня возникла такая вот потребность. Раньше с базами не приводилось работать а вот щас надо сделать маленький скриптик. заключается в том: Есть база id|title|name в базе хранятся названия тем рефератов пользователь защедший на страницу, может нажать на поле фамилия и внести туда свои данные (при этом добавление в поле данных происходит только один раз, дальнейшая запись запрещена) Читал help в инете но дальше создание и выведение данных не продвинулся
как сделать чтоб можно было добавить токо фамилию и один раз. Скрипт делается для сайта своей группы. Заранее благодарен. Добавлено @ 23:57 Извините наверное стоит перенести тему в базу данных - mysql |
| Автор: corpsehunter 27.2.2007, 01:32 | ||||
Если я правильно понял, то человек вводит свою фамилию, ему рандомно присваивается тема результата и человек с такой фамилие не может добавить себя еще раз. Если это так, то тебе надо что-то типа такого:
Про рефераты позаботишься сам (если я правильно понял задачу...)
Это, кстати, таблица, а не база |
| Автор: nurv_ad 27.2.2007, 02:13 |
| суть в том что, на против названия темы будет фамилия, при нажатии на нее выводится форма и записываетс язначение в поле name при этом фамилия присваивается к таму ID каторая у поля Title? при этом надо чтоб ни кто другой не мог писать в данном ID Добавлено @ 02:14 кстати сори. Спасибо за код... щас мы его немного подделаем. |
| Автор: nurv_ad 27.2.2007, 04:39 | ||||
Правильно ли я делаю. Поправьте если не так. Добавлено @ 04:50
гдет ошибка а где ни как не пойму. |
| Автор: Alex13 27.2.2007, 10:17 | ||||||
Ошибка номер раз:
Наверное, все-таки $port... Ошибка номер два-с и три-с:
Надо пользоваться массивами $_GET[] и $_POST[] для получения данных извне. И в таком случае условие будет выглядеть вот так:
Четвертая ошибка - открывающих фигурных скобок больше, чем закрывающих. Пятая - вы про принцип "HTML - отдельно, PHP - отдельно" слышали? Шестая - за такое оформление кода сажать надо. Года на полтора. С единственной книжкой - "Оформление кода для чайников". |
| Автор: corpsehunter 27.2.2007, 10:52 |
| Нафига тебе выводить весь html-код с помощью echo? Лучше, тогда помести php-сценарий в отдельном файле, а после выполнения скрипта делай редирект, например, на главную страницу (ну, или обратно, если охота). Потом, вместо print("msg") и exit() используй die("msg"). Это ничего не даст, но код будет компактнее и после if можно будет не ставить скобок. Советую использовать всегда что-то одно - либо print, либо echo. P.S. Список рефератов советую выводить с помощью выпадающего списка или радиобутонов. P.S.S. А вообще, действительно, как то страшно все выглядит, исправь - посмотрим... |
| Автор: nurv_ad 27.2.2007, 14:43 | ||||||
| извините за столь серьезно режущий глазу код, я же токо учусь использовать mysql получилось следующее в базу данные вносятся но создается отдельное поле с пустым title и заполненым name. а как сделать чтоб он добавлял name к тому же title где и нажимал добавить фамилию т.е. есть записи в базе id title и name человек допустим хочет записаться под темой номер 1 в базе у нее id = 1 show.php
1.php
add.php
|
| Автор: PARROT 27.2.2007, 19:16 |
в запрос дописать условие по которому будет обновляться именно запись под номером $numb |
| Автор: corpsehunter 27.2.2007, 20:13 | ||
Все правильно - как был сформулирован вопрос - такое и решение Вот такой тогда еще вопрос: если поле id в таблице у тебя соответствует номеру темы, то зачем его делать автоинкрементом. Автоинкремент - поле, заполняемое автоматически с увеличением на 1, начиная от 1 (если не указано другое) - для первой записи 1, для второй 2 и т.д., т.е. у тебя номер этого поля будет соответствовать не теме реферата, а порядку добавления пользователей в таблицу. Если ты собираешься делать именно так, то, во-первых, убираешь автоинкремент, во-вторых, например, заводишь массив с темами - номер темы - это "индекс элемента + 1", в третьих, если $i - номер элемента, а $title[] - массив, то запрос на добавление будет выглядеть так: $sql = "INSERT INTO referat (id, title, name) VALUES ('$i', '$title[$i+1]', '$name')"; P.S. Скобки (id, title, name) можно опустить, т.к. в данном случае порядок и количество столбоцов соответствует тому, что указано после VALUES. |
| Автор: nurv_ad 27.2.2007, 23:29 | ||
| еще раз смысл. Автоинкримент поставил так как я думаю это все равно мне не так принципиально, скрипт будет использован несколько раз всего. номер темы не принципиально важен просто для списка. задача только одна есть. Фамилия: | № темы (id по умолчанию) | Title -- | №1 | История сталинграда мне всего навсего надо, чтоб студен нажав на фамилию
получил форму, в форме лишь указав фамилию, которая запишется в то поле name к которому присвоено ID = №1 (но при этом надо запретить повторную запись в базу) Мне не понятно как указать запросу на то чтоб он смотрел на то к какой теме записывать name Добавлено @ 23:31 то что делаю вот http://nurv-ad.net.ru/plexa/referat/show.php |
| Автор: corpsehunter 28.2.2007, 01:37 |
| Тебе надо при нажатии на ссылку "Фамилия" добавить еще одну переменную, например номер, а потом, по номеру определять тему (ну или можно весь текст темы). Выглядеть это будет примерно так: http://nurv-ad.net.ru/plexa/referat/show.php?action=add&i=1 & - обозначает, что передатеся не одна переменная, а i=1 - переменная и ее значение. Это для первой темы |
| Автор: nurv_ad 28.2.2007, 01:37 | ||||
| тут вот мучаюсь а точнее я уже не знаю что я делаю. Мне всего лишь нужно чтоб записывалось имя в именно данно поле.
Добавлено @ 01:38 одновременно добавили щас попробую твой вариант Добавлено @ 01:45 а можно сделать так
|
| Автор: nurv_ad 28.2.2007, 02:04 | ||
помогите с запросом, что ни как не могу составить
|
| Автор: corpsehunter 28.2.2007, 02:28 |
| А в чем проблема с запросом? Кстати, где у тебя храняться темы рефератов? Если только в виде html-текста, то ты их не сможешь добавить в базу. Не знаю, как ты хочешь сделать, но могу предложить вариант, чтобы на той страничке, ссылку на которую ты дал, напротив рефератов, ктороые заняты, вместо ссылки фамилия появлялась фамилия того, кто ее выбрал. |
| Автор: nurv_ad 28.2.2007, 03:45 | ||||||
| вот это я и хочу сделать но для этого надо чтоб была произведена запись фамилии в базу темы хранятся в title добавляю сами темы <form action=\"\" method=post> <input name=seenform type=hidden value=y> Название темы <input name=title size=100><button type=submit>записать</button> <br> <input name=name size=20> </form> я вот тут на форумах отписал разных, может не правильно выразился с заданием. Прошу прощения но я повтарю все целиком может уже будет понятнее. Помогите разобраться Задача: Есть созданная база с темами рефератов. Студен может подписаться под темой, написав свою фамилию, но при этом надо чтоб повторная запись фамилии был запрещен. Что уже есть: выводятся данные Фамилия | ID | Название темы но почему при заполнении формы данные в поле name не заносятся. Помогите решить проблему. Заранее благодарен. Делаю следующее: # # Структура таблицы `referat` # CREATE TABLE `referat` ( `id` int(2) NOT NULL auto_increment, `title` varchar(255) default NULL, `name` varchar(50) default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=41 ; INSERT INTO `referat` VALUES (1, 'Общественное питание и его место на потребительском рынке', ''); INSERT INTO `referat` VALUES (2, 'Проблемы и тенденции развития общественного питания', ''); (и т.д.) show.php
1.php
add.php
|
| Автор: corpsehunter 28.2.2007, 11:33 | ||
| Все, понял. Т.е. темы рефератов уже хранятся в базе, надо только в нужные поля добавить фамилии. Т.к. поля уже существуют, то надо использовать не INSERT, а UPDATE:
|
| Автор: nurv_ad 28.2.2007, 13:45 |
| не записывает. Блин 3 день уже мучаюсь. |
| Автор: corpsehunter 28.2.2007, 14:11 | ||||
| Все правильно и не должно: В show.php, когда ты выводишь список, каждой ссылке "Фамилия" должен соответствовать номер темы:
Теперь в переменной $th будет номер темы, которой соответствует данная фамилия. И исправь 1.php - в нем надо передать эту перменную в add.php
Теперь вроде все должно работать. |
| Автор: nurv_ad 28.2.2007, 14:11 |
| Ураа у меня получилось. в форме дописал <input type="hidden" name="id" value=<?echo $_GET['id'];?>> теперь у меня такой вопрос как запретить повторную запись в поле |
| Автор: PARROT 28.2.2007, 14:12 | ||
а что пишет? Какие ошибки? Напечатайте запрос:
|
| Автор: corpsehunter 28.2.2007, 14:15 | ||
Исправь запрос на такой:
P.S. Только я не помню точно, знак "не равно" может не так пишется |
| Автор: PARROT 28.2.2007, 14:26 | ||||
кавычки зависят от того строка это или число, одинарные или двойные. кроме того проверяем на ошибки:
|
| Автор: corpsehunter 28.2.2007, 14:31 | ||||||
Вспомнил, надо не так, вот так:
P.S. Еще немного исправил запрос |
| Автор: nurv_ad 1.3.2007, 01:12 |
| А как запретить повторную запись в поле. то есть если поле заполнино вывести сообщение если пустое то вывести форму для заполнения фамилии? |
| Автор: corpsehunter 1.3.2007, 02:14 | ||
Сделай так:
Если поле "Фамилия" будет пустое, то выводится ссылка на добавление, если эта тема занята, то выводится фамилия того, кто занял эту тему. |
| Автор: nurv_ad 1.3.2007, 18:05 | ||
Помогите найти ошибку.
|
| Автор: corpsehunter 1.3.2007, 18:59 | ||
Вот, попробуй это. Она должна вызываться с id, равным номеру выбранной темы.
|
| Автор: nurv_ad 1.3.2007, 19:40 |
| ID у меня уже берется до этого $res = mysql_query( "SELECT * FROM referat" ); while( $row = mysql_fetch_object( $res ) ) { print " <a href='?action=add&id=".$row->id."'><br>Фамилия:</a> " . $row->name .", ¹: " . $row->id . ", Тема: " . $row->title . "."; } id берется правильно и записывает в базу правильно дале я хочу сделать следующее после if($_GET['action'] == "add"){ 1. проверяем есть ли запись в поле name если нет 2. выводим форму записи фамилии 3. если в поле name есть запись 4. то выводим сообщение об ошибки вот тут натворил делов а теперь не могу понять в чем ошибка. if($_GET['action'] == "add"){ //------------------ $name = mysql_escape_string($_POST['name']); $sql = "select count(*) as c from referat where name='$name'"; $result=mysql_query($sql); $row = mysql_fetch_object( $result ); if ($row->c == '0') { //Все нормально, такого имени нету. echo " <form name='add' action='123.php?action=add&id=".$_POST['id']." method='post'> Фамилия <input type='text' name='name'> <input type='submit' name='submit' value='Добавить'> </form> "; @$a=$_POST['name']; @$e=$_POST['id']; $sql="INSERT INTO referat (id, title, name) VALUES (NULL, '','$a')"; echo ("Информация изменена. <a href='show.php'>Назад</a>\n"); } else { //Ошибка, уже есть. exit ("<br><B><span style='color: red';>Извините но фамилия уже существует</span></B> <a href='123.php'>Вернуться</a>");} в чем ошибка, где напутал. выводит сразу ошибку "Извините но фамилия уже существует" |
| Автор: corpsehunter 1.3.2007, 19:59 | ||
Тогда пробуй это. Только в скобочках у одного ифа надо проверить извлеченную из БД фамилию. Сам сделаешь, на вскидку не помню как делать, а лезть не охота.
|
| Автор: nurv_ad 1.3.2007, 21:39 |
| else { $sql = "SELECT name FROM referat WHERE id=$id"; if ($row->name == '0') { ни так случаем? |
| Автор: corpsehunter 1.3.2007, 21:50 | ||
Сделай лучше так:
Достает количество записией с соответсвующей темой и пустой фамилией (т.е. либо 0, либо 1) и если 1, то фамилия пуста и можно добавлять. |
| Автор: nurv_ad 1.3.2007, 21:54 |
| ругается на if (mysql_result($query,0)) не может быть такого что у меня уже до этого встречается if($_GET['action'] == "add"){ $name = mysql_escape_string($_POST['name']); $sql = "SELECT count(*) FROM referat WHERE name=$name"; if (!mysql_result($query,0)) { Добавлено @ 21:55 http://nurv-ad.net.ru/plexa/referat/123.php Добавлено @ 21:58 Warning: mysql_result(): supplied argument is not a valid MySQL result resource |
| Автор: mishaSL 1.3.2007, 22:08 | ||
Переменная $query должна содержать результат функции mysql_query(). |
| Автор: corpsehunter 1.3.2007, 22:13 | ||
| Точно, мой косяк В запросе написал одну переменную, а в ифе использовал другую, да еще и функцию забыл написать...
|
| Автор: nurv_ad 1.3.2007, 22:19 | ||||
| Я ща опупею, да сколько можно, волосы буду рвать. вроде все верно, но все равно выдает что запись уже есть. Посмотреть можно по ссылуке которую давал выше. Подключаемся к базе далее следующее
Добавлено @ 22:22 А может в самой таблице что.
Добавлено @ 22:23 Too corpsehunter Огромное спасибо что откликнулся помочь. |
| Автор: corpsehunter 1.3.2007, 22:36 | ||||||
Косяк явно в этом условии, так что попробуй еще вот так, должно работать:
И еще, вместо этого:
поставть это, чтобы не новая запись добавлялась, а в уже существующую записывалась фамилия:
|
| Автор: nurv_ad 1.3.2007, 22:45 |
| ругается на эту запись. if (mysql_result('count',0)) { |
| Автор: corpsehunter 1.3.2007, 22:56 |
| возможно так нельзя. Тогда верни $sql и можешь убрать "AS count". Попробуй, должно работать. |
| Автор: nurv_ad 1.3.2007, 22:58 | ||
| Warning: mysql_result(): supplied argument is not a valid MySQL result resource in m:\www\www\www\plexa\referat\123.php on line 26 Line 26 if (mysql_result($sql,0)) { Добавлено @ 22:59
|
| Автор: corpsehunter 1.3.2007, 23:14 | ||
Последняя идея. Попробуй сделать такую проверку:
|
| Автор: nurv_ad 1.3.2007, 23:22 |
| блин я не знаю что делать. пишет что Извините но фамилия уже существует Добавлено @ 23:27 Выкладываю сам скрипт может кто посмотрит и исправит буду надеятся на это, а то уже не знаю что и делать. |
| Автор: corpsehunter 2.3.2007, 03:54 |
| Use&Enjoy |
| Автор: nurv_ad 2.3.2007, 06:45 |
| Огромное спасибо все работает, посмотрел код и понял учится мне еще и учится и научится делать сночало правильные мысли. посмотрел ког и понял он проще и удобнее чем вообще я писал. Огромное еще раз спасибо. |