Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Добавление лишь в одно поле таблицы базы


Автор: nurv_ad 26.2.2007, 23:53
Доброго времени суток.
У меня возникла такая вот потребность.
Раньше с базами не приводилось работать а вот щас надо сделать маленький скриптик.

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

Есть база
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

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

Код

//запрашиваем количество записей с фамилией $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 

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

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

Автор: nurv_ad 27.2.2007, 04:39
Код

<?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 ;


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

Автор: Alex13 27.2.2007, 10:17
Ошибка номер раз:
Код

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

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

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

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

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

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


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

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

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

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

P.S. Список рефератов советую выводить с помощью выпадающего списка или радиобутонов.
P.S.S. А вообще, действительно, как то страшно все выглядит, исправь - посмотрим... smile 

Автор: nurv_ad 27.2.2007, 14:43
извините за столь серьезно режущий глазу код, я же токо учусь использовать 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);

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

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

Автор: corpsehunter 27.2.2007, 20:13
Цитата(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.

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

Фамилия: | № темы  (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 
то что делаю вот 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 - переменная и ее значение. Это для первой темы smile 

Автор: nurv_ad 28.2.2007, 01:37
тут вот мучаюсь а точнее я уже не знаю что я делаю.
Мне всего лишь нужно чтоб записывалось имя в именно данно поле.
Код

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

Автор: nurv_ad 28.2.2007, 02:04
помогите с запросом, что ни как не могу составить

Код

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

Автор: 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

Код

<?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'];
?> 


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

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

Автор: nurv_ad 28.2.2007, 13:45
не записывает.
Блин 3 день уже мучаюсь.

Автор: corpsehunter 28.2.2007, 14:11
Все правильно и не должно:
В 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>

Теперь вроде все должно работать.

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

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

Автор: PARROT 28.2.2007, 14:12
а что пишет? Какие ошибки? Напечатайте запрос:
Код

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

Автор: corpsehunter 28.2.2007, 14:15
Исправь запрос на такой:
Код

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


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

Автор: PARROT 28.2.2007, 14:26
Код

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


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

 or die(mysql_error());

Автор: corpsehunter 28.2.2007, 14:31
Цитата(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

Автор: nurv_ad 1.3.2007, 01:12
А как запретить повторную запись в поле.
то есть если поле заполнино вывести сообщение если пустое то вывести форму для заполнения фамилии?

Автор: corpsehunter 1.3.2007, 02:14
Сделай так:
Код

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

Если поле "Фамилия" будет пустое, то выводится ссылка на добавление, если эта тема занята, то выводится фамилия того, кто занял эту тему.

Автор: nurv_ad 1.3.2007, 18:05
Помогите найти ошибку.
Код

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

Автор: corpsehunter 1.3.2007, 18:59
Вот, попробуй это. Она должна вызываться с 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>");    
    }
}
?>

Автор: 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
Тогда пробуй это. Только в скобочках у одного ифа надо проверить извлеченную из БД фамилию. Сам сделаешь, на вскидку не помню как делать, а лезть не охота.
Код

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

Автор: 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
Сделай лучше так:
Код

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

Достает количество записией с соответсвующей темой и пустой фамилией (т.е. либо 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

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


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


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

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

Код

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

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


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

$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

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

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

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

Автор: 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 
Код

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


Автор: corpsehunter 1.3.2007, 23:14
Последняя идея. Попробуй сделать такую проверку:
Код

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

Автор: nurv_ad 1.3.2007, 23:22
блин я не знаю что делать. пишет что 
Извините но фамилия уже существует

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

Автор: corpsehunter 2.3.2007, 03:54
Use&Enjoy

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

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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)