|
|
|
| Здравствуйте господа. Нарыл на просторах интернета вот такое всплывающее окно, с затемнением фона:
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf8'>
<style type="text/css">
#wrap{
display: none;
opacity: 0.8;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
padding: 16px;
background-color: rgba(1, 1, 1, 0.725);
z-index: 100;
overflow: auto;
}
#window{
width: 400px;
height: 400px;
margin: 50px auto;
display: none;
background: #fff;
z-index: 200;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
padding: 16px;
}
.close{
margin-left: 364px;
margin-top: 4px;
cursor: pointer;
}
</style>
</head>
<body>
<script type="text/javascript">
//Функция показа
function show(state){
document.getElementById('window').style.display = state;
document.getElementById('wrap').style.display = state;
}
</script>
<!-- Задний прозрачный фон-->
<div onclick="show('none')" id="wrap"></div>
<!-- Само окно-->
<div id="window">
<img class="close" onclick="show('none')" src="http://sergey-oganesyan.ru/wp-content/uploads/2014/01/close.png">
</div>
<center><button class="myButton" onclick="show('block')">Показать окно</button></center>
</body>
</html>
|
Хочу сделать удаление строки из базы MySQL, окно служит для предупреждения об удалении,
т.е. "да" или "нет". Если "нет", возвращаемся назад, а если "да", то активируем процедуру удаления. Вот для "да" мне нужно передавать id строки из базы этому окну. Подскажите пожалуйста, как это реализовать? | |
|
|
|
|
|
|
|
для: Ruthless
(04.09.2014 в 10:08)
| | Вы вываливаете код какого-то окна, его стили, которые к сути вопроса отношения не имеют.
Наверное же нужно показывать кнопки окна (Да/Нет) без этого окна, а тем более его стилей, и ваши действия по ним, и более всего интересует что у вас происходит на действие Да.
Второе, что необходимо знать, так где у вас в html-коде "прячется" id этой записи, которую надо удалить.
Третье, это знать что означает в вашем случае "удалить" - сделать асинхронный запрос к серверу или перегрузить страницу, а id для удаления как GET параметр в URL, или это будет форма?
Иначе любой в праве ответить вам так: щелкать кнопку и сказать серверу удаляй. Вас это устроит? А если нет, то показывайте данные, которые к вопросу имеют прямое отношение, а не то, что вы там где-то нарыли. | |
|
|
|
|
|
|
|
для: confirm
(04.09.2014 в 10:35)
| | Имеем данные в таблице выводимой из базы MySQL
echo "<table border='0' cellapdding='0' cellspacing='3'>";
echo "<form method='POST'>";
echo "<tr><td><button type='submit' name='add' value='1'>Добавить</button></td><td><button type='submit' name='del' value='1'>Удалить</button></td><td><button type='submit' name='ed' value='1'>Открыть карточку пользователя</button></td></tr>";
echo "</table>";
echo "<table width='100%' border='0' cellapdding='0' cellspacing='0' onclick='setRadio(event.target || event.srcElement)'>";
echo "<tr><th class='th3'> </th><th class='th3'>Фамилия</th><th class='th3'>Имя</th><th class='th3'>Отчество</th><th class='th3'>Логин</th><th class='th3'>Настройки доступа</th></tr>";
$rime = mysql_query("SELECT * from users WHERE user_id > 0") or die(mysql_error());
while($row = mysql_fetch_array($rime)) {
echo "<tr><td class='td3' width='20'><input type='radio' name='id_d' value='{$row['id']}' class='radiobtn'></td><td class='td3_left'>{$row['user_familiya']}</td><td class='td3_left'>{$row['user_imya']}</td><td class='td3_left'>{$row['user_otchestvo']}</td><td class='td3'>{$row['user_login']}</td><td class='td3'></td></tr>";
}
echo "</form>";
echo "</table>";
|
Далее идет код самого окна в которое нужно передавать ID строки из таблицы
echo "<div id='window'>";
echo "<table cellpadding='0' cellspacing='0' border='0'><tr bgcolor='#0085cc'>";
echo "<td width='99%' height='33' align='center'><b><font color='#FFFFFF'>Удаление пользователя</font></b></td>";
echo "<td align='right'><img class='close' onclick=\"show('none')\" src='images/close.png'></td><td> </td>";
echo "</tr></table>";
echo "<table cellpadding='0' cellspacing='8' border='0' width='100%'><tr><td align='center'>";
echo "<br>";
echo "<h3>Вы действительно хотите удалить пользователя?</h3>";
echo "<h2><a href='index.php?act=delete&id={$_GET['id']}'>Да</a> <a href='index.php?str=1'>Нет</a></h2>";
echo "</td></tr></table>";
echo "</div>";
|
| |
|
|
|
|
|
|
|
для: Ruthless
(04.09.2014 в 14:23)
| | Если окно, это диалог, то не должно быть кнопки:
<center><button class="myButton" onclick="show('block')">Показать окно</button></center>
так как диалог подразумевает реакцию на действие, а значит отображаться он должен в том случае, если выбрано действие в форме означающее удаление. Вот только радиокнопка все таки это выбор одного из многих, если выбор "удалить" это и есть выбор радиокнопки, то это не лучшее решение, для этого нужен флажок - чекбокс. Вот тогда можно выбрать удаление нескольких из многих.
И не должно быть кнопки:
<img class="close" onclick="show('none')" src="http://sergey-oganesyan.ru/wp-content/uploads/2014/01/close.png">
Это ведь диалог, а значит он должен закрываться только кнопками Да и Нет, плюс при закрытии его должна выполняться и операция разрешить/нет. Если чекбокс и выбор многого из многих, и нужно реагировать только на выбор, а не отправлять форму, то при Нет, нужно сбросить выбранный флажок, и закрыть диалог, если да, то просто закрыть диалог. Если же нужна автоматическая отправка формы, то значит отправить форму при любом выборе. Правда такое поведение при флажках бессмысленно, собственно бессмысленно и при радиокнопках, как и само их применение для этой операции.
Вот таким образом, а что вам нужно, так бог его знает, вы ведь просите ответа, ничего не поясняя при этом. | |
|
|
|
|
|
|
|
для: confirm
(04.09.2014 в 14:47)
| | Те два фрагмента кода, которые Вы указали, это тот самый код который я нашел на просторах интернета. Ниже я показал в какой код хочу это вставить. Для чего я все это делаю, для того, что есть таблица со списком пользователей, и с ней нужно производить 3 действия, это добавить пользователя (я уже сделал, так как туда не нужно из таблицы ничего засылать), это удалить пользователя (вот тут нужен ID этого самого пользователя) и открыть карточку пользователя, где представленна более развернутая информация о пользователе (тут тоже нужен ID). При добавлении пользователя всплывает окно с формой, где идет запрос на Ф.И.О. пользователя, логин и пароль. При удалении так же должно всплывать окно, с вопросом вы действительно хотите удалить и 2 действия "Да" или "Нет". "Да" передаем PHP-скрипту ID на удаление, "Нет" значит возвращаемся назад. Ну и с просмотром карточки пользователя, тоже всплывает окно с более подробной информацией и возможностью удаления и изменения отдельных полей.
Почему мне не подходит checkbox, потому что я не хочу чтобы производились действия более чем с одной строчкой из базы. | |
|
|
|
|
|
|
|
для: Ruthless
(04.09.2014 в 15:39)
| | Вы не понимаете о чем вам говорят.
У вас форма, в которой выбирается что-то для удаления. Хотите удалять одного из... пожалуйста. Но зачем куда-то передавать id, если его должна отправлять форма? Или для чего у вас форма, для красоты?
А если отправляет форма, то какой ее элемент должен хранить этот id? Выбираете радиокнопкой, значит она и должна содержать этот id, и по щелчку Да, отправляется форма где ... вот тут и закоряка скрывается, ибо при выборе флажка id будет отправлено, а нет, значит не отправляется. Работа же радиокнопки в группе, это совсем иная логика, и сервер обязательно получит какое либо значение, если конечно не сбросить выбор кнопки, но какой в них тогда смысл?
А более всего у вас бардаком то, что форма, в ней куча юзеров, которых нужно жмахать радиокнопками, а потом плевать на форму и отправлять выбор вот так:
<a href='index.php?act=delete&id={$_GET['id']}'>Да</a> <a href='index.php?str=1'>Нет</a>
|
Вот нахрена тогда форма? Вам не кажется что в логике вашего подхода к добавление/редактирование/удаление бардак? | |
|
|
|
|
|
|
|
для: confirm
(04.09.2014 в 16:00)
| | Не понимаю, какой бардак может быть в логике выбора нужного элемента, из списка, и его удаления? Форма у меня не для красоты, я привел кусок кода, того что у меня есть. В самом начале я хотел решить вопрос только при помощи PHP, а в последующем возникло пожелание сделать всплывающее окно именно с затемненным фоном, а это PHP не умеет. Пришлось искать нужный скрипт, чтобы его интегрировать. Вот как его прикрутить к моему коду и как сделать так чтобы оно работало, вопрос. С этим вопросом я пришел сюда, в надежде что кто-то подскажет. | |
|
|
|
|
|
|
|
для: Ruthless
(04.09.2014 в 16:22)
| | РНР на клиенте вообще ничего не делает, всплывающими окнами тоже не занимается, потому как РНР от клиента за много, много верст.
Дело не в этом. Вопрос - нахрена вам форма с выбором "Добавить", "Открыть карточку пользователя" и радиокнопки, которые вообще не имеют метки (текста поясняющего для выбор чего они), если по радиокноке-Х вываливается окно, которое забивает на форму (а что тогда ее выводить?) и передает выбор GET-запросом? Нахрена вообще тогда делать выбор чем бы то ни было - хоть кнопкой, хоть флажками, толку то от них ведь нет никакого в этом случае?
Или не понимаете всей бессмысленности?
Есть у меня пользователи, вывожу их список. Если я знаю, что Петров и Иванов невменяемы, то выбираю их обеих для удаления, отправляю форму и удаляю их. Зачем мне смотреть для этого их карточки? Это называется групповой операцией.
В этом списке помимо групповой операции удаления можно выбрать индивидуально редактирование, например, достаточно по фамилии пользователя щелкнуть, и GET запрос на редактирование. А в карточке Иванова или Петрова помимо редактирования/обновления тоже можно выбрать удаление, и это уже индивидуальная операция.
Но список где можно удалять только одного, это просто список, без формы, где кнопки это ссылки, а "удалить" любой элемент, та же ячейка таблицы может служить источником этого, а диалог подтверждения это ОДНА ссылка, для выбора Да, а нет, просто закрывает диалог. Передать же в такую ссылку id удаляемого, можно по разному, самое простое это по идентификатору.
Например, ячейка таблицы для выбора "удалить", имеет атрибут id равный del-34, где 34 id пользователя. Кнопка удаления диалога имеет id по которому к ней можно обратиться, и она имеет только часть url, остальное подставляется из ячейки источника таблицы:
<td id="id-35" onclick="document.getElementById('del').href += this.id.replace('-','=')">Удалить</td>
//кнопка диалога Нет закрывает диалог, обязательно уничтожая объект, иначе, если просто прячется,
//нужно удалять из кнопки Да поставляемую часть url
<a id="del" href="index.php?act=delete&">Да</a> <a onclick="cloce_wnd()">Нет</a>
|
И все будет работать, и тогда еще есть какая-то логика. А вот у вас не понять что, что к чему, зачем вообще эти радиокнопки, которые еще надо определять по строке таблицы, причем одному только вам известно, что после этого можно удалить. Ну вызывайте диалог просто по щелчку на TR.
Вот в чем у вас бардак - куча элементов на странице не понять для чего. | |
|
|
|
|
|
|
|
для: confirm
(04.09.2014 в 17:05)
| | Упс, моя ошибка. Я совсем забыл, то что можно сделать на Javascript, нельзя сделать при помощи PHP. Я то все размышляю с позиции PHP. Мдя, вот засада. Спасибо за ответы и за советы. Похоже с этими окнами у меня ничего не выйдет, ибо для меня начинается дремучий лес... | |
|
|
|
|
|
|
|
для: Ruthless
(04.09.2014 в 17:33)
| | Да у вас и в РНР не все в порядке:
<?
$rime = mysql_query("SELECT * from users WHERE user_id > 0") or die(mysql_error());
|
Во-первых что это такое WHERE user_id > 0 - а разве может быть в таблице ID равное 0? Следовательно:
<?
$rime = mysql_query("SELECT * from users") or die(mysql_error());
|
Во-вторых - or die (mysql_error());, и это не смотря на то, что перед этим вы вывалили клиенту добрую часть страницы, включая огрызок таблицы. Как это понимать? И светить ошибки на реальном сервере mysql_error(), решение неразумное.
В третьих - для получения строки ресурса кроме mysql_fetch_array существуют еще и mysql_fetch_assoc, mysql_fetch_row, mysql_fetch_object. Ознакомтесь с ними и не гоняйте вы по два массива без надобности. | |
|
|
|
|
|
|
|
для: confirm
(04.09.2014 в 17:58)
| | Спасибо огромное за помощь, я не знал что у меня так много ошибок в коде, но я сюда пришел за другим. Иначе я знаю, есть форум по ПХП. Спасибо Вам. | |
|
|
|
|
|
|
|
для: confirm
(04.09.2014 в 17:58)
| | И все таки, объясните пожалуйста, как загнать переменную в
<center><button class="myButton" onclick="show('block')">Показать окно</button></center>
|
и как ее вывести в том самом верхнем скрипте? | |
|
|
|
|
|
|
|
для: Ruthless
(05.09.2014 в 15:51)
| | Это не ошибки, а не знание предмета соответствующего и отсутствие логики в коде. В конце концов сядьте и подумайте о том, что диалог выбора одного из двух значений не может(!) иметь кнопки <button class="myButton" onclick="show('block')">Показать окно</button>, потому, что это диалог! Ваша система выводя вам диалоги просит вас нажать кнопку для их показа? Глупо было бы да? Так а что вы до сих пор несете ахинею? И не может у диалога Да/Нет третьей кнопки - Закрыть!
И слой перекрывающий окно в режиме диалога требующего один из двух вариантов ответа ну просто никак не должен вытворять такое - <div onclick="show('none')" id="wrap"></div> - закрывать этот диалог.
И стили для диалога у вас такие, словно по принципу кашу маслом не испортишь.
Если удалять пользователя, значит речь идет об администрировании. Сколько этих админок я уже написал, и ни от одного заказчика не поступало просьбы сделать диалог Да/Нет. Оно и понятно, если бы речь шла от двух тех позициях редактируемых, еще куда ни шло, но при большом их числе, а это всегда так, этот диалог кроме нервотрепки ничего не дает. И владелец выбирая групповую операцию всегда понимает, что делает.
Кроме этого, хотел бы я посмотреть на вас за работой в административном разделе за задачами переноса/удаления данных множественных, при этом возможность этого возможна только в единственном числе. Попробуйте, может тогда и логика появится.
И даже в индивидуальном редактировании задавать вопрос Да/Нет... ну бог с ним, будем считать это вкусом. А вообще же, он и там нафик не нужен этот диалог, потому как понятие данные, это понятие резиновое, и удалять приходится не только сам объект, но бывает и его характеристики, и что опять трепать нервы вопросами? Хотя, если уж хочется, и надо подумать - казнить или помиловать, глядя на диалог. А если для того чтобы случайно не ..., так такие вещи нужно помещать последними опциями, выделяя их особо, так что и без диалога есть над чем подумать.
Ну если так хочется, то вот диалог Да/Нет как реакция на выбор удаления из формы редактирования. И если вам так хочется плевать на форму и удалять выбором в диалоге, что конечно возможно в режиме индивидуального редактирования, то это и сделано. Так как у вас диалог не создается, присутствует всегда, просто стили определяют его видимость, то id пользователя сразу и прописывается кнопке удаления в диалоге. А как передать из списка переменную в диалог я писал выше.
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
body {
margin: 0;
font: 12px Arial;
}
.content {
padding: 15px;
}
.del {
color: #f00;
cursor: pointer;
}
table {
width: 100%;
border-collapse: separate;
font: 12px Arial;
}
th {
background: #bbb;
padding: 10px
}
td {
padding: 10px;
border-bottom: 2px solid #ddd;
}
#over{
display: none;
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: #000;
opacity: 0.5;
z-index: 100;
}
#dialog{
display: none;
position: fixed;
width: 400px;
padding: 20px;
top: 210px;
left:50%;
margin-left:-200px;
background: #fff;
border-radius: 5px;
z-index: 200;
}
.msg {
height: 40px;
font-size: 16px;
font-weight: bold;
text-align: center;
color: #CB1B1B;
}
button {
width: 120px;
padding: 3px 0;
float: right;
text-transform: uppercase;
}
form button {
margin-top: 20px;
}
.btdlg {
width: 80px;
margin-left: 10px;
}
</style>
<script>
function initial() {
dlg = document.getElementById('dialog');
ovr = document.getElementById('over');
}
function modeDialog(m) {
if(m) {
dlg.style.display = 'block';
ovr.style.display = 'block';
} else {
dlg.style.display = 'none';
ovr.style.display = 'none';
}
}
</script>
</head>
<body onload="initial()">
<div class="content">
<?
$user = array(
1 => array('Петоров', 'А нам все равно, а нам все равно...'),
array('Иванов', 'Не смертельно.'),
array('Сидоров', 'Пжалуйста, не надо! Восемь детей! Жена на 6-ом месяце! Кому кормить?'),
array('Никифоров', 'Пофиг, себя я прокормлю.')
);
if(!$_GET && !$_POST) {
?>
<form action="?" method="post">
<table><tr><th>Пользователь</th><th>Редактирование</th><th>Удаление</th></tr>
<?
foreach($user as $k=>$v) echo '<tr><td>'.$v[0].'</td><td><a href="?edt='.$k.'">редактировать</a></td><td><label><input type="checkbox" name="del[]" value='.$k.' /> выбрать</label></td></tr>';
?>
</table>
<button>Удалить</button>
</form>
<?
}
if($del = $_GET['del'] OR $del = $_POST['del']) {
echo '<pre>';
print_r($del);
echo '</pre>';
}
if($id = (int)$_GET['edt']) {
?>
<form action="?" method="post">
<?
echo '<p>'.$user[$id][0].'</p><text>'.$user[$id][1].'</text><p><a class="del" onclick="modeDialog(1)">Удалить</a></p>';
?>
<button>Обновить</button>
</form>
<?
}
?>
</div>
<div id="over"></div>
<div id="dialog"><div class="msg">Вы действительно хотите удалить?</div><button onclick="modeDialog(0)" class="btdlg">Нет</button><button class="btdlg" onclick="location = '?del=<?=$id ? $id : 0?>'">Да</button></div>
</body>
</html>
|
show('none') и show('block') - это плохо, так как такое состояние можно описать 0 и 1, а проверять число это гораздо быстрее, чем строку. Тем более, что строки в данном случае совсем не требуется. | |
|
|
|
|
|
|
|
для: Ruthless
(04.09.2014 в 10:08)
| | Самый простой способ - спросить у пользователя при помощи window.confirm():
<a href="delete.php?..." onclick="return window.confirm('Вы действительно хотите удалить эту запись?')">Удалить запись</a>
|
delete.php и должен содержать код, который удаляет запись из БД. Как его написать - обращайтесь в соседний раздел. | |
|
|
|
|
|
|
|
для: Commander
(04.09.2014 в 12:26)
| | Да, это самое простое решение, но тут нужно окно которое затемняет задний фон, да и окошко нужно посимпатичнее.
Спасибо большое за ответ. | |
|
|
|
|
2 Кб |
|
|
для: Ruthless
(04.09.2014 в 14:04)
| | Вот, делал как-то давным-давно по аналогичной проблеме для Владимир55.
(Кнопку "Закрыть" добавите сами. ОК?) | |
|
|
|
|
|
|
|
для: Deed
(04.09.2014 в 21:39)
| | Скрипт замечательный, но мне-бы что нибудь на базе того, что я выложил. Мдя... Опять-таки Javascript у меня :((((((((( | |
|
|
|
|
|
|
|
для: Ruthless
(05.09.2014 в 12:22)
| | Лады...Но - завтра. Щас тяжело. Пришел с корпоратива. О, вай мэ... | |
|
|
|
|
1.6 Кб |
|
|
для: Ruthless
(05.09.2014 в 12:22)
| | Вот | |
|
|
|
|
|
|
|
для: Deed
(06.09.2014 в 09:07)
| | Да уж, такое можно написать действительно только после глубокой пьянки. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2014 в 10:51)
| | шО НЕ ТАК???
Шо, Ajax еще расписать? | |
|
|
|
|
|
|
|
для: Deed_drinking
(06.09.2014 в 11:36)
| | Да и без него не понять что. Пора бы писать не механически, а как-то размышляя что-ли.
Кроме этого, автору задавался вопрос о применении jQuery, ответом было нет. И если задача, это только окно, не более, то втюривать ему такие примеры, ну это крайне не уважительно. А из-за своей лени не изучать Javascript и поэтому везде плюхать на jQuery, так это вообще из рук вон, тем более и на нем вы пишите такое...
Ну а коли предлагаете на нем, то поясняйте, что это за фрукт, ибо для него это все лес темный. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2014 в 12:12)
| | Даренному коню, как-бы, в зубы не смотрят.
Чем могу, как говорится.
Тем паче неофиту понять логику jQuery и легче, и нагляднее.
И вообще, пусть заключение о "ценности" ответа дает спрашивающий.
А я пошел за пивом... | |
|
|
|
|
|
|
|
для: Deed_drinking
(06.09.2014 в 12:44)
| | Да и мне было бы по-барабану, но дело как раз в том, что спрашивающий постоянно повторяет, что для него JS, это темный лес. Понять при этом при чем тут ваш пример и во что это выливается, или наоборот нужен jQuery, если не только диалог.
jQury еще не означает "пустяк" и писать такую хрень как вы пишите, ценность которой нулевая, а по не знанию вообще, будет конечно принята на ура.
Писака, либо пить, либо думать и писать. И если пьете не подсовывайте всякую дурь вопрошающим. А вот думая вы могли бы действительно написать ценное. Пора бы, не в первый же раз. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2014 в 13:17)
| | Слышишь, гуру, не груби, а?
Ревнуешь- остынь, парниша. Но не груби. Не тебе оценивать ответ и решать, помог он человеку или нет.
Нарколог, блядь, нашелся... | |
|
|
|
|
|
|
|
для: Deed_drinking
(06.09.2014 в 14:52)
| | Я не грублю, и не дева, чтобы ревновать, а вот оценивать имею право, как и любой другой. Поэтому и пишу оценку свою - хрень полная, а причина - не думаете, а если бы думали, уверен, что было бы на Ок. | |
|
|
|
|
|
|
|
для: confirm
(06.09.2014 в 14:58)
| | Мдя....
На этом форуме тоже демагоги завелсь. Вместо помощи, одни упреки и разбор кода. И еще, confirm добрее нужно быть. От Вас, к моему великому сожалению, я кроме упреков по этой статье, ничего не услышал. Спасибо Вам. | |
|
|
|
|
|
|
|
для: Ruthless
(08.09.2014 в 13:58)
| | Это где и в чем я вас упрекнул? В том что неоднократно повторял, что вы не понимаете что такое диалоговое окно ожидающее одно из двух решений? Ну так без понимания этого вы и пишите то, что совсем не годиться.
А что касается демагогии, ну так если это даже по вашему и так звучит, ну так не вам сказано, а нравится собирать мусор, пожалуйста, уж этого то я вам вроде бы как не запрещаю. Так что не по адресу. | |
|
|
|
|
|
|
|
для: Ruthless
(04.09.2014 в 10:08)
| | как залюбили эти темы.............................. | |
|
|
|
|