Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление лишь в одно поле таблицы базы, как реализовать 
:(
    Опции темы
nurv_ad
Дата 26.2.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



Доброго времени суток.
У меня возникла такая вот потребность.
Раньше с базами не приводилось работать а вот щас надо сделать маленький скриптик.

заключается в том:

Есть база
id|title|name

в базе хранятся названия тем рефератов
пользователь защедший на страницу, может нажать на поле фамилия и внести туда свои данные (при этом добавление в поле данных происходит только один раз, дальнейшая запись запрещена)

Читал help в инете но дальше создание и выведение данных не продвинулся
Код

<?php
 $host = "";    // Имя хоста
 $port = "";         // Номер порта, 3306 - по умолчанию
 $user = "";         // Имя пользователя
 $pass = "";    // Пароль
 $dbnm = "plexa_ref";         // Имя Базы Данных
 $h = ( empty( $post ) ) ? $host : $host . ":" . $port;
 $db = mysql_connect( $h , $user , $pass );
 if( !$db )   // Если соединиться не удалось:
  {
   print ("Извиняй ошибка вышла");
   exit();
  }
 if( ! mysql_select_db( $dbnm ) )  // Если нет такой БД
  {
   print ("Ваще нет такой базу че гонишь то??");
   exit();
  }
$res = mysql_query( "SELECT `*` FROM `referat`" );
while( $row = mysql_fetch_object( $res ) )
 {  print "<br>Фамилия: " . $row -> name .", №: " . $row -> id . ", Тема: " . $row -> title . ".";  }
?>
// так вывожу данные из базы
$res = mysql_query( "SELECT `*` FROM `referat`" );
while( $row = mysql_fetch_object( $res ) )
 {  print "<br>Фамилия: " . $row -> name .", ¹: " . $row -> id . ", Тема: " . $row -> title . ".";  }


как сделать чтоб можно было добавить токо фамилию и один раз.

Скрипт делается для сайта своей группы.
Заранее благодарен.

Добавлено @ 23:57 
Извините наверное стоит перенести тему в базу данных - mysql
PM MAIL   Вверх
corpsehunter
Дата 27.2.2007, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Если я правильно понял, то человек вводит свою фамилию, ему рандомно присваивается тема результата и человек с такой фамилие не может добавить себя еще раз. Если это так, то тебе надо что-то типа такого:

Код

//запрашиваем количество записей с фамилией $surname
$query=mysql_query("SELECT count(*) FROM referat WHERE name=$surname");
//если количество записей не равно нулю, то записываем в таблицу фамилию.
if (!mysql_result($query,0))
    $query=mysql_query("INSERT INTO referat (name) VALUES ($surname)");

Про рефераты позаботишься сам (если я правильно понял задачу...)

Цитата

Есть база
id|title|name

Это, кстати, таблица, а не база smile 

Это сообщение отредактировал(а) corpsehunter - 27.2.2007, 01:34
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 27.2.2007, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



суть в том что, на против названия темы будет фамилия, при нажатии на нее выводится форма и записываетс язначение в поле name при этом фамилия присваивается к таму ID каторая у поля Title? при этом надо чтоб ни кто другой не мог писать в данном ID

Добавлено @ 02:14 
кстати сори. Спасибо за код... щас мы его немного подделаем.

PM MAIL   Вверх
nurv_ad
Дата 27.2.2007, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



Код

<?php
 $host = "";    // Имя хоста
 $port = "";         // Номер порта, 3306 - по умолчанию
 $user = "";         // Имя пользователя
 $pass = "";    // Пароль
 $dbnm = "plexa_ref";         // Имя Базы Данных
 $h = ( empty( $post ) ) ? $host : $host . ":" . $port;
 $db = mysql_connect( $h , $user , $pass );
 // Соединяемся с Сервером Баз Данных
 if( !$db )   // Если соединиться не удалось:
  {
   print ("Извиняй ошибка вышла");
   // Пишем ошибку и завершаем выполнение скрипта.
   exit();
  }
 // иначе выбираем Базу Данных для работы
 if( ! mysql_select_db( $dbnm ) )  // Если нет такой БД
  {
   print ("Ваще нет такой базу че гонишь то??");
   // Пишем ошибку и завершаем выполнение скрипта.
   exit();
  }
$res = mysql_query( "SELECT `*` FROM `referat`" );
while( $row = mysql_fetch_object( $res ) )
 {  print "<br><a href=\"?action=add\">Фамилия:</a> " . $row -> name .", №: " . $row -> id . ", Тема: " . $row -> title . ".";  }
if ($action == "?action=add" ){
{
$query=mysql_query("SELECT count(*) FROM referat WHERE name=$name");
//если количество записей не равно нулю, то записываем в таблицу фамилию.
if (!mysql_result($query,0))
    $query=mysql_query("INSERT INTO referat (name) VALUES ($name)");
echo ("
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">
<title>Добавь себя в список</title>
<link rel=\"stylesheet\" type=\"text/css\" title=\"Style\" href=\"./css/style.css\">
</head>
<body>

<form action=\"\" method=post>
<input name=seenform type=hidden value=y>
Название темы <input name=name size=100><button type=submit>Подтвердить</button>
<br>
<input name=name size=20>
</form>
</body>
</html>
");}}
?>



Правильно ли я делаю. Поправьте если не так.

Добавлено @ 04:50 
Код

#
# Структура таблицы `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=36 ;


гдет ошибка а где ни как не пойму.
PM MAIL   Вверх
Alex13
Дата 27.2.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



Ошибка номер раз:
Код

$h = ( empty( $post ) ) ? $host : $host . ":" . $port;

Наверное, все-таки $port...

Ошибка номер два-с и три-с:
Код

if ($action == "?action=add" ){

Надо пользоваться массивами $_GET[] и $_POST[] для получения данных извне.
И в таком случае условие будет выглядеть вот так:
Код

if($_GET['action']=="add") //и само добавление


Четвертая ошибка - открывающих фигурных скобок больше, чем закрывающих.

Пятая - вы про принцип "HTML - отдельно, PHP - отдельно" слышали?

Шестая - за такое оформление кода сажать надо. Года на полтора. С единственной книжкой - "Оформление кода для чайников".


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
corpsehunter
Дата 27.2.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Нафига тебе выводить весь html-код с помощью echo? Лучше, тогда помести php-сценарий в отдельном файле, а после выполнения скрипта делай редирект, например, на главную страницу (ну, или обратно, если охота).
Потом, вместо print("msg") и exit() используй die("msg"). Это ничего не даст, но код будет компактнее и после if можно будет не ставить скобок.
Советую использовать всегда что-то одно - либо print, либо echo.

P.S. Список рефератов советую выводить с помощью выпадающего списка или радиобутонов.
P.S.S. А вообще, действительно, как то страшно все выглядит, исправь - посмотрим... smile 
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 27.2.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



извините за столь серьезно режущий глазу код, я же токо учусь использовать mysql

получилось следующее в базу данные вносятся но создается отдельное поле с пустым  title и заполненым name.
а как сделать чтоб он добавлял name к тому же title где и нажимал добавить фамилию
т.е. есть записи в базе
id title и name
человек допустим хочет записаться под темой номер 1
в базе у нее id = 1

show.php
Код

 $host = "localhost";    // Имя хоста
 $port = "3306";         // Номер порта, 3306 - по умолчанию
 $user = "root";         // Имя пользователя
 $pass = "";    // Пароль
 $dbnm = "plexa_ref";         // Имя Базы Данных
 $h = ( empty( $port ) ) ? $host : $host . ":" . $port;
 $db = mysql_connect( $h , $user , $pass );
/* Соединение с сервером базы данных */
mysql_connect ($host, $user, $pass);
/* Выбор базы данных */
mysql_select_db($dbnm);
$res = mysql_query( "SELECT `*` FROM `referat`" );
while( $row = mysql_fetch_object( $res ) )
 {  print "<br><a href=\"?action=add\">Фамилия:</a> " . $row -> name .", №: " . $row -> id . ", Тема: " . $row -> title . ".";  }
?>
<?PHP
error_reporting (E_ALL ^ E_NOTICE);

if($_GET['action'] == "add"){
   include("1.php");
}


1.php
Код

<form name="add" action="add.php"  method="post">
Фамилия<br>
<input type="text" name="name">
<input type="submit" name="submit" value="Добавить">
</form>

add.php
Код

/* Соединение с сервером базы данных */
mysql_connect ($host, $user, $pass);
/* Выбор базы данных */
mysql_select_db($dbnm);
$name = $_POST["name"];
$sql = "INSERT INTO referat (name) VALUES ('$name')";
/* Исполнение SQL запроса */
$result = mysql_query($sql);

PM MAIL   Вверх
PARROT
Дата 27.2.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Цитата(nurv_ad @  27.2.2007,  14:43 Найти цитируемый пост)
в базе у нее id = 1

в запрос дописать условие по которому будет обновляться именно запись под номером $numb


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
corpsehunter
Дата 27.2.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Цитата(nurv_ad @ 27.2.2007,  14:43)
получилось следующее в базу данные вносятся но создается отдельное поле с пустым  title и заполненым name.

Все правильно - как был сформулирован вопрос - такое и решение smile 

Вот такой тогда еще вопрос: если поле 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.
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 27.2.2007, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



еще раз смысл. 
Автоинкримент поставил так как я думаю это все равно мне не так принципиально, скрипт будет использован несколько раз всего. номер темы не принципиально важен просто для списка. задача только одна
есть.

Фамилия: | № темы  (id по умолчанию) | Title 
-- | №1 | История сталинграда

мне всего навсего надо, чтоб студен нажав на фамилию 
Код

$res = mysql_query( "SELECT `*` FROM `referat`" );
while( $row = mysql_fetch_object( $res ) )
 {  print "<br><a href=\"?action=add\">Фамилия:</a> " . $row -> name .", №: " . $row -> id . ", Тема: " . $row -> title . ".";  }
error_reporting (E_ALL ^ E_NOTICE);

if($_GET['action'] == "add"){
   include("add.php");
}


получил форму, в форме лишь указав фамилию, которая запишется в то поле name к которому присвоено ID = №1 (но при этом надо запретить повторную запись в базу)

Мне не понятно как указать запросу на то чтоб он смотрел на то к какой теме записывать name

Добавлено @ 23:31 
то что делаю вот тут
PM MAIL   Вверх
corpsehunter
Дата 28.2.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Тебе надо при нажатии на ссылку "Фамилия" добавить еще одну переменную, например номер, а потом, по номеру определять тему (ну или можно весь текст темы). Выглядеть это будет примерно так:
http://nurv-ad.net.ru/plexa/referat/show.p...ion=add&i=1
& - обозначает, что передатеся не одна переменная, а i=1 - переменная и ее значение. Это для первой темы smile 
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 28.2.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



тут вот мучаюсь а точнее я уже не знаю что я делаю.
Мне всего лишь нужно чтоб записывалось имя в именно данно поле.
Код

mysql_select_db($dbnm);
$a=$_GET['name'];
$e=$_GET['id'];
$sql="INSERT INTO ref (name) VALUES ('$a') WHERE WHERE id='$e'";
$result=mysql_query($sql);
echo "Спасибо. <a href=\"show.php\">Назад</a>\n";
echo $_FILES['userfile']['error'];


Добавлено @ 01:38 
одновременно добавили smile
щас попробую твой вариант

Добавлено @ 01:45 
а можно сделать так 
Код

$e=$_GET['id'];

а в ссылке
?action=add&i=$e

PM MAIL   Вверх
nurv_ad
Дата 28.2.2007, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



помогите с запросом, что ни как не могу составить

Код

mysql_select_db($dbnm);
$a=$_GET['name'];
$e=$_GET['id'];
$sql="INSERT INTO ref (id, title, name) VALUES ('$e', '','$a')";
$result=mysql_query($sql);


Это сообщение отредактировал(а) nurv_ad - 28.2.2007, 02:05
PM MAIL   Вверх
corpsehunter
Дата 28.2.2007, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



А в чем проблема с запросом?

Кстати, где у тебя храняться темы рефератов? Если только в виде html-текста, то ты их не сможешь добавить в базу.

Не знаю, как ты хочешь сделать, но могу предложить вариант, чтобы на той страничке, ссылку на которую ты дал, напротив рефератов, ктороые заняты, вместо ссылки фамилия появлялась фамилия того, кто ее выбрал.
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 28.2.2007, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



вот это я и хочу сделать но для этого надо чтоб была произведена запись фамилии в базу

темы хранятся в 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

Код

<?PHP
error_reporting (E_ALL ^ E_NOTICE);

if($_GET['action'] == "add"){
   include("1.php");
}
?>
<?php
 $host = "localhost";    // Имя хоста
 $port = "3306";         // Номер порта, 3306 - по умолчанию
 $user = "root";         // Имя пользователя
 $pass = "*******";    // Пароль
 $dbnm = "plexa_ref";         // Имя Базы Данных
 $h = ( empty( $port ) ) ? $host : $host . ":" . $port;
 $db = mysql_connect( $host , $user , $pass );
 // Соединяемся с Сервером Баз Данных
 if( !$db )   // Если соединиться не удалось:
  {
   print ("Извиняй ошибка вышла");
   // Пишем ошибку и завершаем выполнение скрипта.
   exit();
  }
 // иначе выбираем Базу Данных для работы
 if( ! mysql_select_db( $dbnm ) )  // Если нет такой БД
  {
   print ("Ваще нет такой базу че гонишь то??");
   // Пишем ошибку и завершаем выполнение скрипта.
   exit();
  }
$res = mysql_query( "SELECT `*` FROM `referat`" );
while( $row = mysql_fetch_object( $res ) )
 {  print "<br><a href=\"?action=add\">Фамилия:</a> " . $row -> name .", №: " . $row -> id . ", Тема: " . $row -> title . ".";  }
?>


1.php

Код

<html>
<body>
<form name="add" action="add.php"  method="post">
Фамилия<br>
<input type="text" name="name">
<input type="submit" name="submit" value="Добавить">
</form>
</body>
</html>


add.php

Код

<?
 $host = "localhost";    // Имя хоста
 $user = "root";         // Имя пользователя
 $pass = "*****";    // Пароль
 $dbnm = "plexa_ref";         // Имя Базы Данных

/* Соединение с сервером базы данных */
mysql_connect ($host, $user, $pass);
/* Выбор базы данных */
mysql_select_db($dbnm);
$a=$_GET['name'];
$e=$_GET['id'];
$sql="INSERT INTO ref (id, title, name) VALUES ('$e', '','$a')";
$result=mysql_query($sql);
echo "Спасибо! Информация изменена. <a href=\"show.php\">Назад</a>\n";
echo $_FILES['userfile']['error'];
?> 



Это сообщение отредактировал(а) nurv_ad - 28.2.2007, 03:46
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.