Страница 1 из 2

Как передать name переключателя (radio)

СообщениеДобавлено: 17 сен 2016, 02:11
dimondack
Здравствуйте

На закреплённой области имеется кнопка по нажатию которой необходимо передать name переключателя (radio) для дальнейшей обработки,

дело в том что radiobuton-ы
также находятся на закреплённой области,

в пределах закреплённой области есть реакция на нажатые button-ы

Код: Выделить всё
<div class="menu"><h3>
<label><input type="radio"
 onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
 name="Info" value="Info">Info</label>
<br>
<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
name="Notice" value="Notice">Notice</label>
<br>
-button-ы
.....
....
 if(isset($_POST["Notice"])) echo 'Выбран Notice';
 else  echo 'Не выбрано';
</h3></div>





А вот дальше реакции уже нет

Можно что нибудь подсказать.....


Далее,за закреплённой областью работает PHP , где происходит запрос в базу

и хорошо бы нажатые button-ы

$notice= 5;
$error=3;
$info=6;
$warning=4;
$debug=7;


передать в запрос,
но это уже можно придумать как


Вот весь скрипт
377.php
Код: Выделить всё
<?php header('Content-type: text/html; charset=utf-8');?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<title>Объект</title>
<style>
   .menu {
    position: fixed;
    right: 7.3px;
   left: 7.3px;
    top: 0%;
    padding: 10px;
    background: #d3edf0;
    border: 1px solid #333;
   }
   .text {
    height: 45px;
   }
     
  }
 
  .button {
    width: 218px;
   height:25px;
   float: right;
   color: #323232;
   font-weight: bold;
   padding: 0;
   
    margin: -15px 0 0;
}
.button:hover{
text-shadow:1px 1px 1px white,1px 1px 1px white,1px 1px 1px white;
color: #a52727;
}


#centerLayer {
      position: absolute;   /* Абсолютное позиционирование */
    width: 180px; /* Ширина слоя в пикселах */
    height: 97px; /* Высота слоя в пикселах */
    left: 95%; /* Положение слоя от левого края */
    top: 10%; /* Положение слоя от верхнего края */
    margin-left: -170px; /* Отступ слева, включает padding и border */
    margin-top: -10px;   /* Отступ сверху */
    background: #fc0; /* Цвет фона */
    border: solid 1px black; /* Параметры рамки вокруг */
    padding: 10px; /* Поля вокруг текста */
     /* overflow: auto;Добавление полосы прокрутки */
   
   }
  </style>


 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="keywords" content="">
<meta name="description" content="">

</head>

<body>

<div class="menu"><h3>
<form action="377.php" method="post" id="form1"> - Здесь по нажатию кнопки " ЗАПРОС" вызываю сам себя что бы обновить страницу
<?php
/*Эти инструкции для того чтобы отобразить время и проверить соединение с базой
надо было чем то заполнить закреплённую область
*/
echo '<strong>';
echo 'Дата:  ';
$d= date("Y-m-d");
echo $d;
echo '<br>';
$t= date("H:i:s");
echo 'Время:  ';
echo $t;
echo '</strong>';
echo '<br>';
$link = mysql_connect("localhost", "root", "12345")
        or die("Could not connect : " . mysql_error());
         print "Connected successfully";
         mysql_close($link);
?>


<input class="button" type="submit"  name="submit1" value=" ЗАПРОС">

<div id="centerLayer">
 
<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
 name="All" value="All" checked>All</label>
<br>
<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
name="Error" value="Error" >Error</label>
<br>
<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
name="Warning" value="Warning">Warning</label>
<br>
 <label><input type="radio"
 onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
 name="Info" value="Info">Info</label>
<br>
<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
name="Notice" value="Notice">Notice</label>
<br>



<?php
//Здесь это работает
if(isset($_POST["Notice"])) echo 'Выбран Notice';
 else  echo 'Не выбрано';
//, но мне нужно не здесь,
// а дальше
// не в закреплённой области
?>
                     

  </div>

 </h3></div>

 
<div class="text"></div>


 

<?php
/* А вот здесь уже не работает
 Вопрос как передать сюда ...... */
/*Мне нужно передать нажатые radiobutton  передать сюда*/
/* Проверяем radiobutton*/
if(isset($_POST["Notice"])) echo 'Выбран Notice';
 else  echo 'Не выбрано';
/* Проверяем radiobutton*/
/*
В конечном итоге  необходимо  нажатые radiobutton
$notice= 5;
$error=3;
$info=6;
$warning=4;
$debug=7;
 обработать и разместить в этот  запрос
$query = "SELECT DeviceReportedTime, Priority, Message FROM SystemEvents WHERE FromHost = $nm AND DeviceReportedTime >= $nd  AND Priority in ( 3, 4, 5, 6, 7) ORDER BY DeviceReportedTime DESC ";

Вопрос как передать сюда ......

*/

$d= date("Y-m-d");
$nd= "'".$d." "."00:00:00"."'";
$nm="'hostname.ru'";
echo '<br>';
echo '<br>';
    /* Соединяемся, выбираем базу данных */
    $connection = mysql_connect("localhost", "root", "12345")
        or die("Could not connect : " . mysql_error());
  //  print "Connected successfully";
   echo '<br>';
    mysql_select_db("Syslog") or die("Could not select database");



    /* Выполняем SQL-запрос */
    $query = "SELECT DeviceReportedTime, Priority, Message FROM SystemEvents WHERE FromHost = $nm AND DeviceReportedTime >= $nd  AND Priority in ( 3, 4, 5, 6, 7) ORDER BY DeviceReportedTime DESC ";
   $result = mysql_query($query) or die("Query failed : " . mysql_error());


  echo '<br>';
   /* Выводим результаты в html */
    print '<table border="1" cellpadding="7" cellspacing="0">';
   
  while ($db1 = mysql_fetch_array($result, MYSQL_ASSOC)) {
       
      
      print '<tr>';
      $dvt=$db1['DeviceReportedTime'];
      print '<td bgcolor="#D3EDF6"  valign="top" align="left">'.$dvt.'</td>';
      
       $mhost=$db1['Message'];
      print '<td width="90%" valign="top">'.$mhost.'</td>'; 
   
   }
   
   print '</table>';
   
     
 
    /* Освобождаем память от результата */
    mysql_free_result($result);
   

    /* Закрываем соединение */
    mysql_close($connection);
   
?>

</body>

</html>

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 17 сен 2016, 10:36
root
Не совсем понимаю, что вы назвали "закрепленной областью", но скрипту php абсолютно все равно в какой части скрипта вы проверяете существование/значение переменной в $_POST.
Судя по всему вы считаете что это не работает по той причине что вы не видите текста "Не выбрано" или "Выбрано" на экране. Да ?
Ну так понятное дело, т.к. этот текст находится ЗА вашим div menu. Уберите из вашего CSS из .menu position: fixed и текст сразу появится ;)
http://subnets.ru/tmp/dimondack.php

P.S. radio я бы на checkbox заменил, т.к. они более подходят для множественного выбора.

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 17 сен 2016, 21:12
dimondack
:D :D
Спасибо, сдвинулся с места
Просто без отладчика непривычно , ну как ещё в переменную заглянуть.....
вот и начал на консоль выводить для проверки


оставил radiobutton-ы , что то они мне больше нравяться
вот что получилось
Код: Выделить всё
<?php
$fullstr='1'.','.' '.'2'.','.' '.'3'.','.' '.'4'.','.' '.'5'.','.' '.'6'.','.' '.'7';
$str=$fullstr;

    $str='1'.','.' '.'2';
    if(isset($_POST["Error"]))$str= $str.','.' '.'3';
    if(isset($_POST["Info"]))$str= $str.','.' '.'6';
    if(isset($_POST["Notice"]))$str= $str.','.' '.'5';
    if(isset($_POST["Debug"]))$str= $str.','.' '.'7';
    if(isset($_POST["Warning"]))$str= $str.','.' '.'4';
 
 if($str=='1'.','.' '.'2')$str=$fullstr;

    /* Выполняем SQL-запрос */
    $query = "SELECT DeviceReportedTime, Priority, Message FROM SystemEvents WHERE FromHost = $nm AND DeviceReportedTime >= $nd  AND Priority in ( $str ) ORDER BY DeviceReportedTime DESC ";
   


что вы назвали "закрепленной областью"


Под этой областью подразумеваю часть экрана свободное от прокрутки,
ну как в Excel где закрепляют верхнюю строку, ставят фильтры ...

сообщений из базы , как правило, много и приходится прокручивать, что бы посмотреть
а верх неподвижен

например на mail - телепрограмма так построена

а у меня это
Код: Выделить всё
   .menu {
   position: fixed;
    right: 7.3px;
   left: 7.3px;
    top: 0%;
    padding: 10px;
    background: #d3edf0;
    border: 1px solid #333;
   }
   .text {
    height: 45px;
   }

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 18 сен 2016, 10:07
root
А, ясно, осознал теперь.

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 18 сен 2016, 17:19
dimondack
Задумал что бы при обновлении/загрузки страницы сохранялся выбор и визуально было видно, что нажимал radiobutton,
что бы не забыть чего выбирал :D :D

Нашёл похожий пример вот здесь http://phpforum.su/index.php?showtopic=51905
в этом примере при обновлении/загрузки страницы происходит случайный выбор radiobutton
Код: Выделить всё
<?php
$checked = array (
                      'checked',
                      ''
                     );

 function check()
 {
    global $checked;
    return $checked[randChecked($checked)];
 }
 
   
 function randChecked($arr)
 {
    return rand(0, count($arr) - 1);
 }
?>
<input type="radio"  value="Milk" <?php echo check(); ?> > Milk<br>
<input type="radio"  value="Butter" <?php echo check(); ?> > Butter<br>
<input type="radio"  value="Apple" <?php echo check(); ?> > Apple<br>
<input type="radio"  value="Car" <?php echo check(); ?> > Car<br>
<input type="radio"  value="Cheese" <?php echo check(); ?> > Cheese


и это пример работает

по этому принципу построил свой вариант
,а вот моё творчество никак не хочет работать
Код: Выделить всё
<?php
    /*
   $mserror = $_POST["Error"];
   $msinfo = $_POST["Info"];
   $msnotice = $_POST["Notice"];
   $msdebug = $_POST["Debug"];
   $mswarning = $_POST["Warning"];
   */
$checked = array ('checked','');

 function check($p)
 {
   global $checked;
//   echo $p;
 
   if(isset($_POST["$p"]))return  $checked[0];
   else return $checked[1];
   
 }
 
   echo check('Error');
 
    /*
 if(isset($_POST["Error"]))$che= 'checked' ;
      else $che= 'unchecked';
    if(isset($_POST["Info"]))$chi= $checked[0];
       else $chi= $checked[1];   
    if(isset($_POST["Notice"]))$chn= $checked[0];
      else $chn= $checked[1];
    if(isset($_POST["Debug"]))$chd= $checked[0];
      else $chd= $checked[1];
    if(isset($_POST["Warning"]))$chw= $checked[0];    
       else $chw= $checked[1];
   */

?>

<input type="radio" onMouseDown="this.isChecked=this.checked;" onClick="this.checked=!this.isChecked;" value="Error"
<?php echo  check("Error"); ?>
> Error<br>
<input type="radio" onMouseDown="this.isChecked=this.checked;" onClick="this.checked=!this.isChecked;" value="Warning"
<?php echo  check("Warning"); ?>
> Warning<br>
<input type="radio" onMouseDown="this.isChecked=this.checked;" onClick="this.checked=!this.isChecked;" value="Info"
<?php echo  check("Info"); ?>
> Info<br>
<input type="radio" onMouseDown="this.isChecked=this.checked;" onClick="this.checked=!this.isChecked;" value="Notice"
<?php echo  check("Notice"); ?> 
> Notice<br>
<input type="radio" onMouseDown="this.isChecked=this.checked;" onClick="this.checked=!this.isChecked;" value="Debug"
<?php echo  check("Debug"); ?>
> Debug<br>
 
   


разные варианты пробовал и через if else пробовал,
наконец через функцию, на мой взгляд оптимальный вариант,
ведь просто нужно проверить isset
и в результате в нужном месте тега input приложить атрибут checked или ни чего не приложить

Может чего неправильно делаю
Может кто поделиться опытом

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 19 сен 2016, 09:34
root
dimondack писал(а):Задумал что бы при обновлении/загрузки страницы сохранялся выбор и визуально было видно, что нажимал radiobutton

Для это лучше использовать или COOKIE или SESSION.

dimondack писал(а):а вот моё творчество никак не хочет работать

Я бы делал по другому. Объявите массив с возможными значениями и с него и кнопки рисуйте и там же проверяйте set или не set. Примерно вот так:
Код: Выделить всё
<?php
if(session_status() == 1){
    session_start();
}
$variants=array("Notice","Warning","Error","All");
if (count($_POST)>0){
    $_SESSION=$_POST;
}
foreach ($variants as $v){
    if (!isset($_POST[$v])){unset($_SESSION[$v]);}
    printf("<label><input type=\"radio\" id=\"%s\" name=\"%s\" value=\"%s\"%s>%s</label><BR>",$v,$v,$v,isset($_SESSION[$v]) ? " checked" : "",$v);
}
var_dump($_SESSION);
?>


P.S. PHP должен быть собран с поддержкой сессий.

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 21 сен 2016, 20:12
dimondack
Заработало !!!

Код: Выделить всё
<div id="centerLayer">

<?php
 
 function check($p)
 {
   global $checked;
//   echo $p;
 
   if(isset($_POST[$p]))return  'checked';
   else return '';
   
 }
 
?>

<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
name="Error" value="Error"  <?php echo check("Error"); ?>>Error</label>
<br>
<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
name="Warning" value="Warning" <?php echo check("Warning"); ?>>Warning</label>
<br>
 <label><input type="radio"
 onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
 name="Info" value="Info" <?php echo check("Info"); ?>>Info</label>
<br>
<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
name="Notice" value="Notice" <?php echo check("Notice"); ?>>Notice</label>
<br>
<label><input type="radio"
onMouseDown="this.isChecked=this.checked;"
  onClick="this.checked=!this.isChecked;"
name="Debug" value="Debug" <?php echo check("Debug"); ?>>Debug</label>
<br>
  </div>
====================================================================
 while ($db1 = mysql_fetch_array($result, MYSQL_ASSOC)) {
       
      
      
      print '<tr>';
      $dvt=$db1['DeviceReportedTime'];
      print '<td bgcolor="#D3EDF6" width="10%" valign="top" align="left">'.$dvt.'</td>';
      
       $mhost=$db1['Message'];
      print '<td width="85%" valign="top">'.$mhost.'</td>'; 
/*   */   
        $pr=$db1['Priority'];
      switch($pr)
      {
  case 3:
        print '<td  bgcolor="#FF0000" width="5%" valign="center">Error</td>';
      print '</tr>';
   break;
 
  case 4:
        print '<td  bgcolor="#FFFF00" width="5%" valign="center">Warning</td>';
      print '</tr>';
   break;
 
  case 5:
        print '<td  bgcolor="#FF7F50" width="5%" valign="center">Notice</td>';
      print '</tr>';
   break;
 
  case 6:
        print '<td  bgcolor="#6495ED" width="5%" valign="center">Info</td>';
      print '</tr>';
   break;
 
 case 7:
        print '<td  bgcolor="#00FF00" width="5%" valign="center">Debug</td>';
      print '</tr>';
 break;
 
 default:
         print '<td  bgcolor="#FFFAFA" width="5%" valign="center"></td>';
       print '</tr>';
    
         
      }
   }






Для это лучше использовать или COOKIE или SESSION.


Это интересная тема
Для меня это пока слишком...
И до этого тоже доберусь :)

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 22 сен 2016, 08:58
root
Поздравляю.

Там нет ничего сложного. Пример работы с SESSION я уже привел выше, с COOKIE не сложнее.

P.S. пользуй ф-цию mysql_fetch_assoc
P.S.S. mysql деприкейтнули, рекомендую переходить на mysqli или PDO, чтобы потом, после обновления php, если вдруг, все продолжало работать.

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 22 сен 2016, 10:42
dimondack
P.S. пользуй ф-цию mysql_fetch_assoc.




$db1 = mysql_fetch_assoc($result);
быстрее ? чем
$db1 = mysql_fetch_array($result, MYSQL_ASSOC);

или синтаксис проще ?


P.S.S. mysql деприкейтнули, рекомендую переходить на mysqli или PDO, чтобы потом, после обновления php, если вдруг, все продолжало работать

mysqli или PDO

А что лучше ?



"Однако с появлением PHP 5 и MySQL 4.1 все изменилось"http://phpclub.ru/detail/article/mysqli

У меня
mysql Ver 14.14 Distrib 5.5.47, for debian-linux-gnu (i686) using readline 6.3

mysql> select version();
+-------------------------+
| version() |
+-------------------------+
| 5.5.47-0ubuntu0.14.04.1 |
+-------------------------+
1 row in set (0.00 sec)

mysqli - значит версия выше ??

Re: Как передать name переключателя (radio)

СообщениеДобавлено: 22 сен 2016, 13:48
dimondack
понял
вот он mysqli

в действии
Код: Выделить всё
<?php

/* Подключение к серверу MySQL */
$link = mysqli_connect(
            'localhost',  /* Хост, к которому мы подключаемся */
            'user',       /* Имя пользователя */
            'password',   /* Используемый пароль */
            'world');     /* База данных для запросов по умолчанию */

if (!$link) {
   printf("Невозможно подключиться к базе данных. Код ошибки: %s\n", mysqli_connect_error());
   exit;
}

/* Посылаем запрос серверу */
if ($result = mysqli_query($link, 'SELECT Name, Population FROM City ORDER BY Population DESC LIMIT 5')) {

    print("Очень крупные города:\n");

    /* Выборка результатов запроса */
    while( $row = mysqli_fetch_assoc($result) ){
        printf("%s (%s)\n", $row['Name'], $row['Population']);
    }

    /* Освобождаем используемую память */
    mysqli_free_result($result);
}

/* Закрываем соединение */
mysqli_close($link);
?>