[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с обновлением MySQL таблиц
polkovnikk
помогите новичку!
подскажите почему код отказывается обновлять таблицу в MySQL

краткое описание:
это база присутствующих людей!
т.е. когда человек пришел, значение ячейки в БД mesto меняет значение 0 на 1
и наоборот, при уходе с 1 на 0
пример табл.
id famil mesto
1 Petrov 0
но код не работает
код следующего содержания:


Скрытый текст

<?php
$db = mysql_connect("localhost","root","");
mysql_select_db("mns",$db)or die("НЕ МОГУ СОЕДЕНИТЬСЯ С БД!<br />");
$result = mysql_query("SELECT * FROM kerivnik",$db);
$arr = mysql_fetch_array($result);

$mesto = nil;
if ($arr['mesto'] == 0){
   $mesto = 1;}
else {
   $mesto = 0;}

mysql_query("UPDATE  kerivnik SET mesto = `".$mesto ."` WHERE id = `1`");
mysql_close();
?>



подскажите пож......



Спустя 10 минут, 26 секунд (10.02.2012 - 11:47) nugle написал(а):
это
mysql_query("UPDATE  kerivnik SET mesto = `".$mesto ."` WHERE id = `1`");

замени на
mysql_query('UPDATE  `kerivnik` SET `mesto` = "'.$mesto .'" WHERE `id` = "1"');


При выставлении значения, нужно ставить либо одинарные кавычки('), либо двойные("), но не обратные (`)

Спустя 12 минут, 31 секунда (10.02.2012 - 12:00) inpost написал(а):
mysql_query("
UPDATE `kerivnik` SET
`mesto` = '"
.(int)$mesto ."'
WHERE `id` = 1
"
);


Если $mesto будет текстовым, то вместо int -> mysql_real_escape_string

nugle
Свобода выбора кавычек :) Конкуренция! :)

Спустя 3 минуты, 10 секунд (10.02.2012 - 12:03) nugle написал(а):
inpost
ахах) я не люблю в командах использовать двойные кавыки, так как html код мне больше нравится с двойными))) Я уже для себя стиль выбрал)
только зачем к типу приводить? если он и так приведется при занесении в бд, там же не юзер вводит, а скрипт сам подставляет значение и всего лишь два варианта возможно 0 или 1

Спустя 10 минут, 11 секунд (10.02.2012 - 12:13) inpost написал(а):
nugle
Тут важно постоянно это делать на автоматическом уровне. Иначе потом пропустишь случайно, когда запутаешься, какие данные доверенные, а какие - нет.
Я вот так и совершил ошибку в одном из конкурсов наших, в итоге sql-inj. А Николай говорит, что лучше всегда ставить. Получается в скорости работы ты не теряешь, в наборе всё идёт на автомате, зато всегда защищен.
Поэтому это моя привычка, всегда лепить (int).

Спустя 5 минут, 58 секунд (10.02.2012 - 12:19) nugle написал(а):
inpost
Я так никогда не делаю, но теперь учту, спасибо)

Спустя 7 минут, 44 секунды (10.02.2012 - 12:27) polkovnikk написал(а):
Цитата (nugle @ 10.02.2012 - 08:47)
это
mysql_query("UPDATE  kerivnik SET mesto = `".$mesto ."` WHERE id = `1`");

замени на
mysql_query('UPDATE  `kerivnik` SET `mesto` = "'.$mesto .'" WHERE `id` = "1"');


При выставлении значения, нужно ставить либо одинарные кавычки('), либо двойные("), но не обратные (`)

вся соль в том, что изменяет с 0 на 1
а НАОБОРОТ С 1 НА 0 НЕ МЕНЯЕТ.... я уже неделю голову ломаю и не могу ничего сделать...
не пойму...

Спустя 5 минут, 57 секунд (10.02.2012 - 12:33) inpost написал(а):
polkovnikk
Тебе 2 кода дали, ты попробовал оба?
И ещё, ты напиши: echo $mesto и посмотри, точно ли передаётся цифра 0, если будет неудачны оба запроса, включая МОЙ(!!!).

Спустя 1 минута, 53 секунды (10.02.2012 - 12:34) nugle написал(а):
ну правильно
вот этот запрос
$result = mysql_query("SELECT * FROM kerivnik",$db);

вернет не один массив так, что делай так
$result = mysql_query("SELECT * FROM kerivnik where id ='1'",$db);

либо через цикл собирай все id, которым будешь делать апдейт, а после цикла собственно и делай апдейт

Спустя 11 минут, 36 секунд (10.02.2012 - 12:46) polkovnikk написал(а):
Цитата (inpost @ 10.02.2012 - 09:33)
polkovnikk
Тебе 2 кода дали, ты попробовал оба?
И ещё, ты напиши: echo $mesto и посмотри, точно ли передаётся цифра 0, если будет неудачны оба запроса, включая МОЙ(!!!).

не получились оба кода... а переменная $mesto постоянно выдает 1...

Спустя 5 минут, 4 секунды (10.02.2012 - 12:51) inpost написал(а):
polkovnikk
SELECT * FROM `table` WHERE `id` = 1

И выведи echo $arr['mesto'];
И весь код страницы покажи.
И что у тебя в Таблице сейчас записано?
Проверку сделай наоборот:
if($arr['mesto'] == 1)
$mesto = 0;
else
$mesto = 1;

Спустя 1 минута, 4 секунды (10.02.2012 - 12:52) inpost написал(а):
И САМОЕ ВАЖНОЕ:
mysql_query("
UPDATE `kerivnik` SET
`mesto` = '"
.(int)$mesto ."'
WHERE `id` = 1
"
) or die(mysql_error());


Вот сделай таким запрос на обновление!!!

Спустя 9 минут, 43 секунды (10.02.2012 - 13:02) polkovnikk написал(а):
Цитата (inpost @ 10.02.2012 - 09:52)
И САМОЕ ВАЖНОЕ:
<pre class="sh_sourceCode" rel="php"><span class="sh_function">mysql_query</span><span class="sh_symbol">(</span><span class="sh_string">"
    UPDATE  `kerivnik` SET
    `mesto` = '"</span><span class="sh_symbol">.(</span>int<span class="sh_symbol">)</span><span class="sh_variable">$mesto</span> <span class="sh_symbol">.</span><span class="sh_string">"'
    WHERE `id` = 1
"</span><span class="sh_symbol">)</span> <span class="sh_keyword">or</span> <span class="sh_function">die</span><span class="sh_symbol">(</span><span class="sh_function">mysql_error</span><span class="sh_symbol">());</span></pre>

Вот сделай таким запрос на обновление!!!

привожу код УЧИТЫВАЯ ВСЕ СОВЕТЫ

Скрытый текст

<?php
$db = mysql_connect("localhost","root","");
mysql_select_db("mns",$db)or die("НЕ МОГУ СОЕДЕНИТЬСЯ С БД!<br />");
$result = mysql_query("SELECT * FROM kerivnik",$db);
while ($arr = mysql_fetch_array($result)){                        # цикл обработывает все значения таблицы
print_r ($arr);
echo '<br>';
$mesto = nil;
if ($arr['mesto'] == 1){$mesto = 0; print_r($mesto);} else {$mesto = 1; print_r($mesto);}
mysql_query('UPDATE  `kerivnik` SET `mesto` = "'.(int)$mesto .'" WHERE `id` >= "1"') or die("ТА НЕ МОГУ Я! НЕ-МО-ГУ!<br />");
}

mysql_close();

print_r("<form action='1.php' method='post'>   # форма для обновления страницы кнопкой
<input type='submit' value='Send'>
</form>");

?>


РЕЗУЛЬТАТ:
ошибки не выдает!
перемен. $mesto все время выводится == 1
соответственно 1 на 0 не меняет...'
    WHERE `id` = 1

Спустя 6 минут, 55 секунд (10.02.2012 - 13:09) inpost написал(а):
SELECT * FROM `table` WHERE `id` = 1
echo $arr['mesto'];
if($arr['mesto'] == 1)
$mesto = 0;
else
$mesto = 1;
echo $mesto;

// УЖЕ ВИДИШЬ, что МЕСТО получило ДРУГОЕ значение.
Теперь подставляешь в запрос, который я дал.

Спустя 51 секунда (10.02.2012 - 13:10) inpost написал(а):
И код, код данного участка показывай!
И после update сразу сделай вывод! Может у тебя он дважды перезаписывается туда-сюда!

Спустя 4 минуты, 32 секунды (10.02.2012 - 13:14) polkovnikk написал(а):
Цитата (inpost @ 10.02.2012 - 10:10)
И код, код данного участка показывай!
И после update сразу сделай вывод! Может у тебя он дважды перезаписывается туда-сюда!

Код изменил для обработки не одной строки таблицы а всех значений
<?php
$db = mysql_connect("localhost","root","");
mysql_select_db("mns",$db)or die("НЕ МОГУ СОЕДЕНИТЬСЯ С БД!<br />");
$result = mysql_query("SELECT * FROM kerivnik",$db);
while ($arr = mysql_fetch_array($result)){ # цикл обработывает все значения таблицы
print_r ($arr);
echo '<br>';
$mesto = nil;
if ($arr['mesto'] == 1){$mesto = 0; print_r($mesto);} else {$mesto = 1; print_r($mesto);}
mysql_query('UPDATE `kerivnik` SET `mesto` = "'.(int)$mesto .'" WHERE `id` >= "1"') or die("ТА НЕ МОГУ Я! НЕ-МО-ГУ!<br />");
}

mysql_close();

print_r("<form action='1.php' method='post'> # форма для обновления страницы кнопкой
<input type='submit' value='Send'>
</form>");

?>

результат тот же...
все нули меняет на 1, но не наоборот!!!

Спустя 10 минут, 58 секунд (10.02.2012 - 13:25) inpost написал(а):
Я не вижу ни моего кода, ни моего запроса... Ни уж тем более вывода текста, который ты должен был вывести при помощи echo...

Спустя 2 минуты, 16 секунд (10.02.2012 - 13:27) nugle написал(а):
Попробуй так. Добавлять в базу через цикл - не есть хорошо

<?php
$db = mysql_connect("localhost","root","");
mysql_select_db("mns",$db)or die("НЕ МОГУ СОЕДЕНИТЬСЯ С БД!<br />");
$mesto = '';
$id = array(0,1);
$result = mysql_query("SELECT * FROM kerivnik",$db);
while ($arr = mysql_fetch_assoc($result)){ # цикл обработывает все значения таблицы
print_r ($arr);
echo '<br>';

if ($arr['mesto'] == 1)
{
$mesto = 0;
print_r($mesto);
}
else
{
$mesto = 1;
print_r($mesto);
}
$id[$mesto] = '"'.$arr['id'].'",';
}
if(!empty($id[0]))
{
$id[0] = trim($id[0], ',');
mysql_query('UPDATE `kerivnik` SET `mesto` = "0" WHERE `id` in('.$id[0].')') or die("ТА НЕ МОГУ Я! НЕ-МО-ГУ!<br />");
}
if(!empty($id[1]))
{
$id[1] = trim($id[1], ',');
mysql_query('UPDATE `kerivnik` SET `mesto` = "1" WHERE `id` in('.$id[1].')') or die("ТА НЕ МОГУ Я! НЕ-МО-ГУ!<br />");
}

mysql_close();

print_r("<form action='1.php' method='post'> # форма для обновления страницы кнопкой
<input type='submit' value='Send'>
</form>"
);

?>

Спустя 4 дня, 6 минут, 29 секунд (14.02.2012 - 13:34) polkovnikk написал(а):
Прошу прощения за безпокойство!

Но вышеизложенные советы не помогли! Помогло изменение кода до следующего вида!

может кому будет интересно!
Скрытый текст

$db = mysql_connect("localhost","root","");
mysql_select_db("mns",$db)or die("НЕ МОГУ СОЕДЕНИТЬСЯ С БД!<br />");
$result = mysql_query("SELECT * FROM kerivnik",$db);
while ($arr = mysql_fetch_array($result)){
print_r($arr['id']." ".$arr['pib']." ".$arr['misce']);
          $mesto=nil;
          if ($arr['mesto']==1){ $mesto = 0;}
          else {$mesto = 1;}
print_r('<form action="2.php" method="post">
<input name='.$arr['id'].' type="hidden" value='.$mesto.'>
<input type="submit" value="Send">
</form>');
if ($arr['id'] == key($_POST)){

mysql_query('UPDATE  `kerivnik` SET `misce` = '.$mesto.' WHERE `id` ='.$arr['id']) or die("ТА НЕ МОГУ Я! НЕ-МО-ГУ!<br />");
    }
}

mysql_close();


Спустя 1 минута (14.02.2012 - 13:35) inpost написал(а):
не помогли, потому что ты их не выполнил.
Быстрый ответ:

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