Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Редактирование записей в БД MySQL
alcalin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 5
Пользователь №: 42485
На форуме: 11 месяцев, 13 дней
Карма:




Здравствуйте! Столкнулся с проблемой:
Есть вот такая страница:
<form name="edit" action="" method="post">
<table
id="items-table">
<?php
while ($row = mysqli_fetch_assoc($items)) {?>
<tr>
<td>
Номер <?= $row["num"] ?></td>
<td>
<input
type="radio" name="group<?=$row["num"]?>" value="0" <?php if($row["status"] == 0) {echo "checked";}?> >Свободная
</td>
<td>
<input
type="radio" name="group<?=$row["num"]?>" value="1" <?php if($row["status"] == 1) {echo "checked";}?>>Продана
</td>
<td>
<input
type="radio" name="group<?=$row["num"]?>" value="2" <?php if($row["status"] == 2) {echo "checked";} ?>>Резерв
</td>
<td><input
type="submit" value="Сохранить"></td>
</tr>
<?
}}
$status = $http_get_vars["group"];
echo $status;
// $id = $row["num"];
// $query = "update $table set status = $status where num = '$id'";
// mysqli_query($dbc,$query) or die ("ERROR".mysql_error());

?>
</table>
</form>

Вкратце что она делает: в таблице список квартир и у них есть статус: свободна(0), продана(1), резерв(2). На форму выводится 3 радио и чекнут тот, какое значение бд. Рядом с каждой записью есть кнопка. Требуется при изменении чекнутого радио и нажатии на кнопку записывать в бд новое значение поля статус(0,1,2). Я нуб в PHP b требуется ваша помощь, знатоки) Помогите пожалуйста записать изменение значения в бд.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1761
Пользователь №: 19760
На форуме: 7 лет, 2 месяца
Карма: 59




Дык под формой уже готовый код.


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
alcalin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 5
Пользователь №: 42485
На форуме: 11 месяцев, 13 дней
Карма:




Он не работает
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1761
Пользователь №: 19760
На форуме: 7 лет, 2 месяца
Карма: 59




Цитата (alcalin @ 4.02.2016 - 08:54)
Он не работает

В смысле не работает? Сообщение об ошибке есть? Раскомментировать пробовали?

И судя по
<?}}


Скорее всего выше есть еще один условный оператор.


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
alcalin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 5
Пользователь №: 42485
На форуме: 11 месяцев, 13 дней
Карма:




Вот обновил код
<form name="edit" action="" method="get">
<table
id="items-table">
<?php
while ($row = mysqli_fetch_assoc($items)) {?>
<tr>
<td>
Номер <?= $row["num"] ?></td>
<td>
<input
type="radio" name="group<?=$row["num"]?>" value="0" <?php if($row["status"] == 0) {echo "checked";}?> >Свободная
</td>
<td>
<input
type="radio" name="group<?=$row["num"]?>" value="1" <?php if($row["status"] == 1) {echo "checked";}?>>Продана
</td>
<td>
<input
type="radio" name="group<?=$row["num"]?>" value="2" <?php if($row["status"] == 2) {echo "checked";} ?>>Резерв
</td>
<td><input
type="submit" value="Сохранить"></td>
</tr>
<?
}?>
</table>
</form>
<?php

$id = $row["num"];
$status = $_GET[$http_get_vars["group"]];
$query = "update $table set status = $status where num = '$id'";
mysqli_query($dbc,$query) or die ("ERROR".mysql_error());
echo $status;
?>


В конце выдает ERROR
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1761
Пользователь №: 19760
На форуме: 7 лет, 2 месяца
Карма: 59




1) $HTTP_GET_VARS и $http_get_vars - разные переменные. Названия переменных регистрозависимы.
2) Запись $status = $_GET[$http_get_vars["group"]]; взорвала мне мозг. Вы уверены что в $HTTP_GET_VARS["group"] хранится индекс для $_GET массива? Вы понимаете, что $HTTP_GET_VARS почти то же самое что $_GET?
3) Почему вы убрали фигурную скобку?
4) Вы уверены, что выше есть подключение к БД и оно успешно?
5) Какое сообщение об ошибке вы получили? Я, конечно, догадываюсь, но хотелось бы уточнить...


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
alcalin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 5
Пользователь №: 42485
На форуме: 11 месяцев, 13 дней
Карма:




Подключение к бд точно есть и оно успешно, т.к. Данные для вывода на страницу берутся из SQL таблицы.
А в конце просто ERROR. Я же прописал вывод сообщения при выполнении запроса
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1761
Пользователь №: 19760
На форуме: 7 лет, 2 месяца
Карма: 59




mysqli_query($dbc,$query) or die ("ERROR".mysql_error());

Вы используете mysqli, но хотите получить сообщение об ошибке mysql.
То-есть у вас не срабатывает mysqli_query(), по-этому отрабатывает конструкция после or. Скрипт "умирает" и выводит сообщение ERROR + результат работы функции mysql_error().
Ф-ция mysql_error() возвращает сообщение об ошибке последнего соединения с mysql, а так как его не было вам возвращается пустота. Замените на mysqli_error().

Ну и я бы заглянул в error.log на всякий. Посмотреть чем там сервак срет.


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1387
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 18 дней
Карма: 78




раз стоит радиобокс, может стоит переписать имя иначе ?
name="group[<?=$row["num"]?>]"

и обрабатывать данные нужно НЕ всегда, а когда отправлена форма.
Вешаем имя кнопке "сохранить"
<input type="submit" name="editForm" value="Сохранить">

и где-то ДО вывода html пишем следующее
// Если нажали кнопку editForm
if (isset($_GET['editForm'])) {
echo '<pre>';
print_r($_GET);
echo '</pre>';
.....
тут обновляем данные

// перезагружаем страницу , или прописать адрес куда идти дальше
// раскомментировать после отладки
//header('Location: '.$_SERVER['HTTP_REFERER'].'' );
// завершить работу скрипта

die();
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1761
Пользователь №: 19760
На форуме: 7 лет, 2 месяца
Карма: 59




Kusss
Глупая идея.
Написав в адресной строке
http://site.com?editForm=anyValue
получим циклическую переадресацию.

UPD
Хотя не. В реферер будет пусто, а что будет при header('Location: '); Я даже не знаю.

UPD
Проверил. Получим нотис. PHP Notice: Undefined index: HTTP_REFERER


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
alcalin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 5
Пользователь №: 42485
На форуме: 11 месяцев, 13 дней
Карма:




<?
if (isset($_GET['editForm'])){
echo '<pre>';
print_r($_GET);
echo '</pre>';
$query = "UPDATE 'objects' SET status= '".$_GET['Array']."' where num='".$_GET['group']."'";
mysqli_query($dbc,$query);
header("Location: admin.php");
header('Location: '.$_SERVER['HTTP_REFERER'].'' );
die();
}
?>


Вот написал, но скорее всего - это "бред сивой кобылы"
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1761
Пользователь №: 19760
На форуме: 7 лет, 2 месяца
Карма: 59




Я вижу, что вы совершенно не понимаете, что делаете, так что я ретируюсь.
Или платите или ждите энтузиаста, который вам все это разжует. А объяснять основы основ пересказывая учебники - не для меня.


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
[x] Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1387
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 18 дней
Карма: 78




alcalin
оставляй только
        if (isset($_GET['editForm'])){
echo '<pre>';
print_r($_GET);
echo '</pre>';
die();
}

Если получил массив с выбранными значениями - уже хорошо.
дальше нам нужно отсортировать ключи('num') и значения.
проходим наш массив
foreach ($_GET['group'] AS $key=>$value){
....
}

и тут есть несколько вариантов (можно сразу создать запрос, но новичок запутается), и мы пойдем простым путем.
$edit = array();
foreach ($_GET['group'] AS $key=>$value){
// цифра
if (is_numeric($value))
$edit[$value][] = $key;
}
// если есть что изменять
if (count($edit)){
// тут будет максимум 3 запроса ... по количеству вариантов, если больше это нужно переделать
foreach ($edit AS $value=>$num){
// обновляем ВСЕ num со значением ( 0, 1 ,2 )
$sql = "UPDATE `objects` SET `status`= '$value' WHERE num IN (".implode(', ' $num).") ";
mysqli_query($sql) or die( mysqli_error() );
}
}


add print_r($_GET); нужно для отладки, потом удалить или закомментировать.

Это сообщение отредактировал Kusss - 4.02.2016 - 18:10
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1761
Пользователь №: 19760
На форуме: 7 лет, 2 месяца
Карма: 59




Kusss

$_GET['group'] не будет массивом. Там будет значение выбранное в input radio. Так что этот код не заработает.

И так из любопытства... Представим, что $_GET['group'] все таки массив. А зачем ты сделал два цикла и зачем создаешь еще один массив?


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1387
Пользователь №: 28976
На форуме: 5 лет, 5 месяцев, 18 дней
Карма: 78




Массив
Цитата (Kusss @ 4.02.2016 - 11:43)
раз стоит радиобокс, может стоит переписать имя иначе ?
name="group[<?=$row["num"]?>]"


	$_num = array();
$update = "UPDATE `objects` SET `status` = CASE";
foreach ($_GET['group'] AS $key=>$value){ {

$update .= " WHEN num = $key THEN $value ";
$_num[] = $key;
}
$update .= " END WHERE num IN (".implode(',',$_num).")";

но так будет быстрее.

Цитата
И так из любопытства... Представим, что $_GET['group'] все таки массив. А зачем ты сделал два цикла и зачем создаешь еще один массив?

Разделить все num по 3 корзинкам, и обновить за мах.3 запроса.

Edit: заменил
$_num[] = $value['id'];
на
$_num[] = $key;


Это сообщение отредактировал Kusss - 4.02.2016 - 20:37
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса