[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: не работает изменение данных в БД
Зодчий
Добрый день!Не работает изменение данных. По echo на страницу выводятся,след-но переменные до сюда доходят.Проблема в запросе.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>
Добавление нового узла связи</title>
</head>
<body
style="background-color:#4c5866">
<img
src="img/logo.gif" width="300" height="100">
<table>
<tr>
<td
align="center">
<?php

if (isset($_POST['ud_name']))
{
$ud_name = $_POST['ud_name'];
}
if (isset($_POST['ud_address']))
{
$ud_address = $_POST['ud_address'];
}
if (isset($_POST['ud_note']))
{
$ud_note = $_POST['ud_note'];
}
$db = mysql_connect("localhost","aleks","12345");
mysql_select_db("work",$db);
mysql_query("SET NAMES cp1251");
mysql_query("SET CHARACTER SET cp1251");
mysql_query("SET character_set_client = cp1251");
mysql_query("SET character_set_connection = cp1251");
mysql_query("SET character_set_results = cp1251");
$result = mysql_query ("UPDATE ud SET ud_address='$ud_address', ud_note='$ud_note' WHERE ud_name='$ud_name'");
echo "$ud_name";
echo "$ud_address";
echo "$ud_note";
?>
</td>
</tr>
<tr>
<td
align="left">
<form
name="form" action="work_Greeting.php" method="POST" enctype="application/x-www-form-urlencoded">
<p
style="text-align: left"><button>Вернуться на главную страницу</button>
</form>
<form>
<INPUT
TYPE="button" VALUE=" Заполнить снова " ONCLICK="history.back(-1)">
</form>
</td>
</tr>
</table>
</body>
</html>


Я только учусь...



Спустя 32 минуты, 58 секунд (14.03.2011 - 17:23) Trianon написал(а):
после любой из этих функций
mysql_connect
mysql_select_db
mysql_query
следует проверять результат на успех выполнения.

пример:
$db = mysql_connect("localhost","aleks","12345") 
or die("Error on mysql connect<br>". mysql_error());


далее. Из этих вот запросов
mysql_query("SET NAMES cp1251");
mysql_query("SET CHARACTER SET cp1251");
mysql_query("SET character_set_client = cp1251");
mysql_query("SET character_set_connection = cp1251");
mysql_query("SET character_set_results = cp1251");
нужен лишь верхний.

Спустя 8 минут, 26 секунд (14.03.2011 - 17:31) Зодчий написал(а):
После коннекта с БД ошбки нет.
После изменения у меня написано
if ($result == 'true')
{
echo "изменено!";
}
else
{
echo "Ошибка!!!";
}
Выдает всегда изменено.

Спустя 2 минуты, 21 секунда (14.03.2011 - 17:33) Зодчий написал(а):
После коннекта с БД ошбки нет.
После изменения у меня написано
if ($result == 'true')
{
echo "изменено!";
}
else
{
echo "Ошибка!!!";
}
Выдает ошибка.

Спустя 1 минута, 37 секунд (14.03.2011 - 17:35) imbalance_hero написал(а):
Зодчий
$result = mysql_query ("UPDATE `ud` SET `ud_address`='".$ud_address."', `ud_note`='".$ud_note."' WHERE `ud_name`='".$ud_name."'") or die(mysql_error());

Если теперь ошибки не будет, значит изменения сработали!

Спустя 2 минуты, 46 секунд (14.03.2011 - 17:38) Зодчий написал(а):
Цитата (imbalance_hero @ 14.03.2011 - 14:35)
Зодчий
Если теперь ошибки не будет, значит изменения сработали!

Написал "изменено".Но в БД результата нет.

Спустя 2 минуты, 34 секунды (14.03.2011 - 17:40) Trianon написал(а):
во первых $result никогда не вернет 'true'

во вторых, true означает вовсе не то, что поле изменено,
а лишь то, что запрос принят и исполнен.

Корректный запрос вполне себе может
-изменить значения каких-то полей
-присвоить полям значения, которые в них и так уже были.
- не найти строк, удовлетворяющих условию WHERE
Во всех этих ситуациях запрос вернет true

Спустя 1 минута, 11 секунд (14.03.2011 - 17:42) imbalance_hero написал(а):
Зодчий
Какие изменения будут? Скорее всего данные ты не передаёшь.
сделай перед этим
echo '<pre>';
print_r($_POST);

Потом сам запрос:
$result = mysql_query ("UPDATE `ud` SET `ud_address`='".$_POST['ud_address']."', `ud_note`='".$_POST['ud_note']."' WHERE `ud_name`='".$_POST['ud_name']."'") or die(mysql_error());

Спустя 5 минут, 17 секунд (14.03.2011 - 17:47) Зодчий написал(а):
imbalance_hero
Array
(
[ud_address] => Адрес
[ud_note] => тест
[submit] => Изменить
)
Адрестест

Эти поля я ввел в форме.
Аналогично сработали
echo "$ud_name";
echo "$ud_address";
echo "$ud_note"; прописанные у меня.

Спустя 4 минуты, 26 секунд (14.03.2011 - 17:51) Trianon написал(а):
а в таблице какие строки есть?

Спустя 34 секунды (14.03.2011 - 17:52) Зодчий написал(а):
может проблема раньше.Выкладываю все 3 файла
Суть.В первом-выбираем из списка.во втором-вносим данные.Третий собственно само изменение


work_update.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>
Изменение информации</title>
</head>
<body
style="background-color:#4c5866">
<table
width="100%">
<tr>
<td
align=center> Выберите</td>
</tr>
</table>
<form
action="work_update_ud_script.php" name="update" method="POST">
<table>
<tr
align="left">
<td><?php

$db = mysql_connect("localhost","aleks","12345");
mysql_select_db("work",$db);
mysql_query("SET NAMES cp1251");
mysql_query("SET CHARACTER SET cp1251");
mysql_query("SET character_set_client = cp1251");
mysql_query("SET character_set_connection = cp1251");
mysql_query("SET character_set_results = cp1251");

$r = mysql_query("SELECT `ud_name` FROM `ud` WHERE 1") or die(mysql_error());
for ($data=array();$row=mysql_fetch_assoc($r);$data[]=$row);

?>
<select
name="ud_name">
<?php
foreach ($data as $region) {?>
<option
value="<?=htmlspecialchars($region['ud_name'])?>"><?=htmlspecialchars($region['ud_name'])?></option>
<?
}?>

</select>
</td>
</tr>
<tr
align="center"><td><p><input name="submit" type="submit" value="Выбрать"></td></tr>
</table>
</form>
</body>

</html>



work_update_ud_script.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>
Изменение информации об Узле</title>
</head>
<body
style="background-color:#4c5866">
<table
width="100%">
<tr>
<td
align=center> Выберите какой Узел Вы хотите изменить</td>
</tr>
</table>
<form
name="old" method="POST">
<tr><td>
Текущее имя узла:</td>
<td><?php

if (isset($_POST['ud_name']))
{
$ud_name = $_POST['ud_name'];
}
echo "$ud_name<br>";
?>
</td></tr>
<tr><td>
Текущий адрес:</td>
<td><?php

$db = mysql_connect("localhost","aleks","12345");
mysql_select_db("work",$db);
mysql_query("SET NAMES cp1251");
mysql_query("SET CHARACTER SET cp1251");
mysql_query("SET character_set_client = cp1251");
mysql_query("SET character_set_connection = cp1251");
mysql_query("SET character_set_results = cp1251");
$query = "SELECT `ud_address` FROM ud WHERE `ud_name`='$ud_name'";
$result = mysql_query($query);
while ($r = mysql_fetch_array($result))
{
echo $r['ud_address']."<br />";
}
?></td></tr>
</form>
<form
action="work_update_ud_script_2.php" method="post" name="form">
<p>
Измените адрес узла:<br><input name="ud_address" type="text" size="50" maxlength="70"></p>
<p>
Можете изменит доп.данные:<br><input name="ud_note" type="text" size="100" maxlength="70"></p>
<p><input
name="submit" type="submit" value="Изменить">
</body>
</html>


work_update_ud_script_2.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>
Добавление нового узла</title>
</head>
<body
style="background-color:#4c5866">
<img
src="img/logo.gif" width="300" height="100">
<table>
<tr>
<td
align="center">
<?php

/*if(!empty($_POST['ud_name']) && !empty($_POST['ud_address']))
{ */

if (isset($_POST['ud_name']))
{
$ud_name = $_POST['ud_name'];
}
if (isset($_POST['ud_address']))
{
$ud_address = $_POST['ud_address'];
}
if (isset($_POST['ud_note']))
{
$ud_note = $_POST['ud_note'];
}
$db = mysql_connect("localhost","aleks","12345")
or die("Error on mysql connect<br>". mysql_error());
mysql_select_db("work",$db);
mysql_query("SET NAMES cp1251");
mysql_query("SET CHARACTER SET cp1251");
mysql_query("SET character_set_client = cp1251");
mysql_query("SET character_set_connection = cp1251");
mysql_query("SET character_set_results = cp1251");
echo '<pre>';
print_r($_POST);
$result = mysql_query ("UPDATE `ud` SET `ud_address`='".$_POST['ud_address']."', `ud_note`='".$_POST['ud_note']."' WHERE `ud_name`='".$_POST['ud_name']."'") or die(mysql_error());
echo "$ud_name";
echo "$ud_address";
echo "$ud_note";


?>
</td>
</tr>
<tr>
<td
align="left">
<form
name="form" action="work_Greeting.php" method="POST" enctype="application/x-www-form-urlencoded">
<p
style="text-align: left"><button>Вернуться на главную страницу</button>
</form>
<form>
<INPUT
TYPE="button" VALUE=" Заполнить снова " ONCLICK="history.back(-1)">
</form>
</td>
</tr>
</table>
</body>
</html>

Спустя 1 минута, 36 секунд (14.03.2011 - 17:54) Зодчий написал(а):
Trianon

ud_id------ud_name----------ud_address------ud_note
49----------Узел №1--------------Адрес 1
47----------Тест №2--------------Адрес 2
48----------Тест №3--------------Адрес 3

Спустя 13 минут, 18 секунд (14.03.2011 - 18:07) Trianon написал(а):
попробуйте вывести через echo текст запроса перед исполнением.

PS. и как бы, наверное, стоит оформлять код?
Неудобно же читать.

Спустя 25 минут, 24 секунды (14.03.2011 - 18:32) imbalance_hero написал(а):
Array
(
[ud_address] => Адрес
[ud_note] => тест
[submit] => Изменить
)

if (isset($_POST['ud_name']))
{
$ud_name = $_POST['ud_name'];
}


Где?

Спустя 25 минут, 5 секунд (14.03.2011 - 18:57) Trianon написал(а):
imbalance_hero

>Где?

в первом посте автора.

Не сбивайте его с пути, он и без Вас собъется.

Спустя 1 час, 11 минут, 20 секунд (14.03.2011 - 20:09) imbalance_hero написал(а):
Зодчий
$_POST из страницы в страницу не передаётся. Чтобы передать, значение помещай во второй странице в форму:
<input type="hidden" name="ud_name" value="<?php echo $_POST['ud_name']; ?>" />

Спустя 13 часов, 10 минут, 50 секунд (15.03.2011 - 09:19) Зодчий написал(а):
Как не передается?
Вот это берет из $_POST

if (isset($_POST['ud_name']))
{
$ud_name = $_POST['ud_name'];
}
if (isset($_POST['ud_address']))
{
$ud_address = $_POST['ud_address'];
}
if (isset($_POST['ud_note']))
{
$ud_note = $_POST['ud_note'];
}

А вот это выводит.
      echo "$ud_name";
echo "$ud_address";
echo "$ud_note";

Вывод значений есть,значит, данные из формы до страницы дошли.

Спустя 16 минут, 52 секунды (15.03.2011 - 09:36) imbalance_hero написал(а):
Зодчий
из первой страницы на вторую перешли из формы! Со второй на третью - не перешли, так как в форме их не было!

Спустя 22 минуты, 37 секунд (15.03.2011 - 09:59) Зодчий написал(а):
imbalance_hero, как не перешли?
В первой форме-выбираем,что изменяем.Выбрали. Перешли на вторую.Здесь отображается текущее значение, и поля для ввода новых значений.Вводим например Адрес 222 и Доп.данные.Переходим на третью форму.
Видим введенные во второй форме данные.
Скрины приложил

Спустя 55 секунд (15.03.2011 - 10:00) Зодчий написал(а):
Форма2

Спустя 40 секунд (15.03.2011 - 10:01) Зодчий написал(а):
форма3

Спустя 9 минут, 19 секунд (15.03.2011 - 10:10) Зодчий написал(а):
а понял...значение ud_name не передается из второй в третью.

Спустя 22 минуты, 27 секунд (15.03.2011 - 10:32) Зодчий написал(а):
А как сделать чтобы
В подписи этой кнопки было не просто $_POST['ud_name'], а например Изменить $_POST['ud_name']

<input type="hidden" name="ud_name" value="<?php echo $_POST['ud_name']; ?>" />

Спустя 40 секунд (15.03.2011 - 10:33) imbalance_hero написал(а):
Зодчий
его надо отдельно передавать в скрытом input, я выше показал пример.
На второй страницы в форму добавь:
<input type="hidden" name="ud_name" value="<?php echo $_POST['ud_name']; ?>" />

Спустя 47 секунд (15.03.2011 - 10:34) imbalance_hero написал(а):
Зодчий
Вообще вся форма делается на одной странице, а не на нескольких, тогда не будут возникать такие проблемы, как у тебя.

Спустя 5 минут, 36 секунд (15.03.2011 - 10:39) Зодчий написал(а):
imbalance_hero, всмысле выбирается Узел, открываются доп поля для редактирования, редактируется и сохраняется?Я не нашел как это сделать на чистом PHP.

Спустя 2 часа, 17 минут, 8 секунд (15.03.2011 - 12:56) Trianon написал(а):
Вот Вам чистый php.
Ни на грош оформления, одна голая логика.
Сугубо под Вашу таблицу и Ваше описание желаемых действий.
Разбирайтесь.

<?php

$ud_id = @$_POST['ud_id'];
$ud_id_r = @$_POST['ud_id_r'];
$ud_name = @$_POST['ud_name'];
$ud_address = @$_POST['ud_address'];
$ud_note = @$_POST['ud_note'];

mysql_connect("localhost","aleks","12345")
or die("Error on mysql connect<br>". mysql_error());
mysql_select_db($db = "work")
or die("Cannot select database $db <br>". mysql_error());
mysql_query($sql = "SET NAMES 'cp1251'")
or die("Error on sql: <br>$sql<br>". mysql_error());

echo "
<form method=post>
Select node:
<SELECT name=ud_id >
<option value=0 >--select node--</option>"
;

$res = mysql_query($sql = "SELECT ud_id, ud_name FROM ud ORDER BY ud_name")
or die("Error on sql: <br>$sql<br>". mysql_error());
while($row = mysql_fetch_assoc($res))
{
$id = htmlspecialchars($row['ud_id']);
$name = htmlspecialchars($row['ud_name']);
$sel = $id == $ud_id ? 'selected=selected ' : '' ;
echo "
<option value=
$id $sel >$name</option>";
}
echo "
</SELECT>
<br />"
;
if(!empty($ud_id))
{

$res = mysql_query($sql = "SELECT ud_id, ud_name, ud_address, ud_note FROM ud WHERE ud_id = ".(int)$ud_id)
or die("Error on sql: <br>$sql<br>". mysql_error());
$row = mysql_fetch_assoc($res);
if(!$row)
echo "Node id ".htmlspecialchars($node_id)." not found. Select other node!<br/>";
else
{
if($ud_id == $ud_id_r && $ud_address !== null && $ud_note !== null)
{
$e_address = "'". mysql_real_escape_string($ud_address)."'";
$e_note = "'". mysql_real_escape_string($ud_note )."'";
$res = mysql_query($sql = "
UPDATE ud
SET ud_address =
$e_address,
ud_note =
$e_note
WHERE ud_id = ".(int)$ud_id)
or die("Error on sql: <br>$sql<br>". mysql_error());

if(mysql_affected_rows())
{
echo "record successfully updated<br>Now values are: <br>";
$res = mysql_query($sql = "SELECT ud_id, ud_name, ud_address, ud_note FROM ud WHERE ud_id = ".(int)$ud_id)
or die("Error on sql: <br>$sql<br>". mysql_error());
$row = mysql_fetch_assoc($res);
}

}

$id = htmlspecialchars($row['ud_id']);
$name = htmlspecialchars($row['ud_name']);
$address = htmlspecialchars($row['ud_address']);
$note = htmlspecialchars($row['ud_note']);
echo "
<input type=hidden name=ud_id_r value=
\"$id\" />
<br />
name:
<input name=ud_name value=
\"$name\" disabled=disabled />
<br />
address:
<input name=ud_address value=
\"$address\" />
<br />
note:
<input name=ud_note value=
\"$note\" />
<br />"
;
}
}

echo " <input type=submit />
</form>"
;

?>

Спустя 1 час, 33 минуты, 58 секунд (15.03.2011 - 14:30) Зодчий написал(а):
Trianon, огромное спасибо!
Буду разбираться!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.