Модераторы: 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   Вверх
corpsehunter
Дата 28.2.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все, понял. Т.е. темы рефератов уже хранятся в базе, надо только в нужные поля добавить фамилии.
Т.к. поля уже существуют, то надо использовать не INSERT, а UPDATE:
Код

UPDATE ref SET name=$a WHERE (id = $e)

--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 28.2.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



не записывает.
Блин 3 день уже мучаюсь.
PM MAIL   Вверх
corpsehunter
Дата 28.2.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все правильно и не должно:
В show.php, когда ты выводишь список, каждой ссылке "Фамилия" должен соответствовать номер темы:
Код

while( $row = mysql_fetch_object( $res ) )
 {  $i = $row -> id
print "<br><a href=\"?action=add&th=$i\">Фамилия:</a> " . $row -> name .", №: " . $row -> id . ", Тема: " . $row -> title . ".";  }
?>

Теперь в переменной $th будет номер темы, которой соответствует данная фамилия. И исправь 1.php - в нем надо передать эту перменную в add.php
Код

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

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


Шустрый
*


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

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



Ураа у меня получилось.
в форме дописал 
<input type="hidden" name="id" value=<?echo $_GET['id'];?>>

теперь у меня такой вопрос как запретить повторную запись в поле

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


Эксперт
****


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

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



а что пишет? Какие ошибки? Напечатайте запрос:
Код

echo "UPDATE ref SET name=$a WHERE id = $e";



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


Бывалый
*


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

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



Исправь запрос на такой:
Код

UPDATE ref SET name=$a WHERE (id = $e) AND (name != '')


P.S. Только я не помню точно, знак "не равно" может не так пишется smile
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
PARROT
Дата 28.2.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

echo "UPDATE ref SET `name`='$a' WHERE id = '$e'";


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

 or die(mysql_error());



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


Бывалый
*


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

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



Цитата(corpsehunter @ 28.2.2007,  14:15)
Исправь запрос на такой:
Код

UPDATE ref SET name=$a WHERE (id = $e) AND (name != '')


P.S. Только я не помню точно, знак "не равно" может не так пишется smile

Вспомнил, надо не так, вот так:
Код

UPDATE ref SET name=$a WHERE (id = $e) AND (name is NULL)


P.S. Еще немного исправил запрос smile

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


Шустрый
*


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

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



А как запретить повторную запись в поле.
то есть если поле заполнино вывести сообщение если пустое то вывести форму для заполнения фамилии?
PM MAIL   Вверх
corpsehunter
Дата 1.3.2007, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Сделай так:
Код

while( $row = mysql_fetch_object( $res ) ) {
    $i = $row -> id;
    print ($row->name='')?"<br><a href='?action=add&th=$i'>Фамилия:</a> ":$row -> name;
    print ", №: " . $row -> id . ", Тема: " . $row -> title . ".";
}

Если поле "Фамилия" будет пустое, то выводится ссылка на добавление, если эта тема занята, то выводится фамилия того, кто занял эту тему.
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 1.3.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Помогите найти ошибку.
Код

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='add.php' method='post'>
Фамилия
<input type='hidden' name='id' value=".$_POST['id'].">
<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>");
}
}


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


Бывалый
*


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

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



Вот, попробуй это. Она должна вызываться с id, равным номеру выбранной темы.
Код

<form action="add.php?action=add&id=$_POST['id']" method='post'>Фамилия    
    <input type='text' name='name'>    
    <input type='submit' name='submit' value='Добавить'>
</form>    
<?php
if($_GET['action'] == "add"){
    $name = mysql_escape_string($_POST['name']);    
    $sql = "SELECT count(*) FROM referat WHERE name=$name";    
    if (!mysql_result($query,0)) {
        $a=$_POST['name'];    
        $e=$_POST['id'];    
        $sql="UPDATE ref SET name=$a WHERE (id = $e)";    
        echo ("Информация изменена. <a href='show.php'>Назад</a>\n");    
    }    
    else {    
        exit ("<br><B><span style='color: red';>Извините но фамилия уже существует</span></B> <a href='123.php'>Вернуться</a>");    
    }
}
?>

--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 1.3.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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>");}

в чем ошибка, где напутал. выводит сразу ошибку
"Извините но фамилия уже существует"
PM MAIL   Вверх
corpsehunter
Дата 1.3.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Тогда пробуй это. Только в скобочках у одного ифа надо проверить извлеченную из БД фамилию. Сам сделаешь, на вскидку не помню как делать, а лезть не охота.
Код

<?php
if($_GET['action'] == "add"){
    $name = mysql_escape_string($_POST['name']);    
    $sql = "SELECT count(*) FROM referat WHERE name=$name";    
    if (!mysql_result($query,0)) {
        $e=$_POST['id'];    
        $sql="UPDATE ref SET name=$name WHERE (id = $e)";    
        echo ("Информация изменена. <a href='show.php'>Назад</a>\n");    
    }    
    else exit ("<br><B><span style='color: red';>Извините но фамилия уже существует</span></B> <a href='123.php'>Вернуться</a>");    
}
else {
    $sql = "SELECT name FROM referat WHERE id=$id";    
    if (<здесь проверяешь, если извлеченная фамилия равна '', то>) {
?>
<form action="add.php?action=add&id=$_POST['id']" method='post'>Фамилия    
    <input type='text' name='name'>    
    <input type='submit' name='submit' value='Добавить'>
</form>    
<?php
    } else print "<br><B><span style='color: red';>Извините но тема уже занята</span></B> <a href='123.php'>Вернуться</a>";
}
?>

--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 1.3.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



else {
    $sql = "SELECT name FROM referat WHERE id=$id";
    if ($row->name == '0') {

ни так случаем?
PM MAIL   Вверх
corpsehunter
Дата 1.3.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Сделай лучше так:
Код

$sql = "SELECT count(*) FROM referat WHERE (id=$id) AND (name IS NULL)";    
if (mysql_result($query,0)) {

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


Шустрый
*


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

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



ругается на 
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
PM MAIL   Вверх
mishaSL
Дата 1.3.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

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




M
mishaSL
Пользуйтесь тегами Код (code=php) для повышения читабельности текста/кода


Цитата(nurv_ad @  1.3.2007,  21:54 Найти цитируемый пост)
ругается на 
if (mysql_result($query,0))


Переменная $query должна содержать результат функции mysql_query().



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
corpsehunter
Дата 1.3.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Точно, мой косякsmile
В запросе написал одну переменную, а в ифе использовал другую, да еще и функцию забыл написать...

Код

$sql = mysql_query("SELECT count(*) FROM referat WHERE (id=$id) AND (name IS NULL)");    
if (mysql_result($sql,0)) {


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


Шустрый
*


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

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



Я ща опупею, да сколько можно, волосы буду рвать. вроде все верно, но все равно выдает что запись уже есть. Посмотреть можно по ссылуке которую давал выше. 


Подключаемся к базе
далее следующее
Код

$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 . "."; }
if($_GET['action'] == "add"){
 //------------------
$sql = mysql_query("SELECT count(*) FROM referat WHERE (id=$id) AND (name IS NULL)");
if (mysql_result($sql,0)) {
 //Все нормально, такого имени нету.
 echo "
 <form name='add' action='123.php' method='post'>
 Фамилия
 <input type='hidden' name='id' value=".$_POST['id'].">
 <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='123.php'>Назад</a>n");

 }
 else
 {
 //Ошибка, уже есть.
 exit ("
 <B><span style='color: red';>Извините но фамилия уже существует</span></B> <a href='123.php'>Вернуться</a>");
 }
 }


Добавлено @ 22:22 
А может в самой таблице что.

Код

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 ;

#
# Дамп данных таблицы `referat`
#

INSERT INTO `referat` VALUES (1, 'Общественное питание и его место на потребительском рынке', '');
INSERT INTO `referat` VALUES (2, 'Проблемы и тенденции развития общественного питания', '');


Добавлено @ 22:23 
Too 
corpsehunter

Огромное спасибо что откликнулся помочь.

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


Бывалый
*


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

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



Косяк явно в этом условии, так что попробуй еще вот так, должно работать:
Код

$sql = mysql_query("SELECT count(*) AS 'count' FROM 'referat' WHERE (id=$id) AND (name IS NULL)");
if (mysql_result('count',0)) {

И еще, вместо этого:

Код

$sql="INSERT INTO referat (id, title, name) VALUES (NULL, '','$a')";


поставть это, чтобы не новая запись добавлялась, а в уже существующую записывалась фамилия:

Код

$sql="UPDATE ref SET name=$a WHERE (id = $e)";

--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 1.3.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ругается на эту запись.
if (mysql_result('count',0)) {
PM MAIL   Вверх
corpsehunter
Дата 1.3.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



возможно так нельзя. Тогда верни $sql и можешь убрать "AS count".
Попробуй, должно работать.
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 1.3.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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 
Код

<?php
$host = "localhost";
$port = "3306";
$user = "root";
$pass = "0.00";
$dbnm = "plexa_ref";
$h = ( empty( $port ) ) ? $host : $host . ":" . $port;
$db = mysql_connect( $host , $user , $pass );
if( !$db )
{
print ("error !");
exit();
}
if( ! mysql_select_db( $dbnm ) )
{
print ("error !");
exit();
}
$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 . "."; }
if($_GET['action'] == "add"){
 //------------------
$sql = mysql_query("SELECT count(*) FROM 'referat' WHERE (id=$id) AND (name IS NULL)");
if (mysql_result($sql,0)) {
 //Все нормально, такого имени нету.
 echo "
 <form name='add' action='123.php?action=add&id=".$row->id."' method='post'>
 Фамилия
 <input type='hidden' name='id' value=".$_POST['id'].">
 <input type='text' name='name'>
 <input type='submit' name='submit' value='Добавить'>
 </form>
 ";
 @$a=$_POST['name'];
 @$e=$_POST['id'];
 $sql="UPDATE referat SET name=$a WHERE (id = $e)";
 echo ("Информация изменена. <a href='123.php'>Назад</a>n");

 }
 else
 {
 //Ошибка, уже есть.
 echo ("
 <br><B><span style='color: red';>Извините но фамилия уже существует</span></B> <a href='123.php'>Вернуться</a>");
 }
 }
?>


PM MAIL   Вверх
corpsehunter
Дата 1.3.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Последняя идея. Попробуй сделать такую проверку:
Код

$sql = mysql_query("SELECT name FROM 'referat' WHERE (id=$id)");
$arr = mysql_fetch_object( $res );
if ($arr->name ='') {

--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 1.3.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



блин я не знаю что делать. пишет что 
Извините но фамилия уже существует

Добавлено @ 23:27 
Выкладываю сам скрипт может кто посмотрит  и исправит буду надеятся на это, а то уже не знаю что и делать.


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  123.rar 0,84 Kb
PM MAIL   Вверх
corpsehunter
Дата 2.3.2007, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Use&Enjoy

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  123.zip 0,82 Kb
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
nurv_ad
Дата 2.3.2007, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Огромное спасибо все работает, посмотрел код и понял учится мне еще и учится и научится делать сночало правильные мысли.
посмотрел ког и понял он проще и удобнее чем вообще я писал.

Огромное еще раз спасибо.


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


 




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


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

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