- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
<?php
echo count($arr);
$i = count($arr) - 1;
for ($i; $i >= 0; $i--) {
?>
<div class="post" id="p<?php echo $arr[$i]->_id; ?>">
<div class="p_title"><?php echo $arr[$i]->title; ?></div>
<div class="p_content"><?php echo $arr[$i]->content; ?></div>
<div class="p_date"><?php echo $arr[$i]->date; ?></div>
<form id="<?php echo $arr[$i]->_id; ?>" action="index.php" method="get">
<!--<textarea rows="4" cols="50" name="removid" style="display: none;" ><?php echo $arr[$i]->_id; ?></textarea>-->
<input type="text" name="removid" form="<?php echo $arr[$i]->_id; ?>" value="<?php echo $arr[$i]->_id; ?>"/>
<input type="submit" class="p_remove" onclick="dele('<?php echo $arr[$i]->_id; ?>');" form="<?php echo $arr[$i]->_id; ?>" value="Удалить"/>
</form><!--</div>-->
<?php echo $arr[$i]->_id; ?>
</div>
<?php
}
?>
<script>
function dele(param){
var jsVar = "<?php
$removid = $_GET['removid'];
$bulk = new MongoDB\Driver\BulkWrite;
//$bulk->delete(['_id'=> new MongoDB\BSON\ObjectId($removid)]);
$query = new MongoDB\Driver\Query(['_id'=> new MongoDB\BSON\ObjectId($removid)]);
$bulk->delete(['_id'=> new MongoDB\BSON\ObjectId($removid)]);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
try {
$result = $manager->executeBulkWrite('forum.posts', $bulk, $writeConcern);
//header('Location: https://benar.wtf/index.php');
}
catch (MongoDB\Driver\Exception\BulkWriteException $e) {
$result = $e->getWriteResult();
}
?>";
}
</script>
guest8 27.05.2020 19:42 # −999
nblXOMAKAKA 27.05.2020 20:09 # 0
MAKAKA 27.05.2020 20:18 # 0
guest8 27.05.2020 20:55 # −999
nblXOMAKAKA 27.05.2020 20:24 # 0
Начнём с того, что т со второй строки. Куда выведется это echo count($arr);? В каком блоке оно окажется?
Далее: закомментированный HTML-код (<!--) в шаблоне лучше не оставлять. Это приводит к трудноуловимым ошибкам в вёрстке. Сам на такое
onclick="dele... тоже не рекомендуют. Лучше в HTML оставить разметку, а обработчики событий навесить отдельным скриптом после загрузки страницы (google: «ненавязчивый js», «unobtrusive js»). Хотя в принципе пойдёт.
Всё выше — это мои придирки. А теперь о серьёзном. Кошмар начинается на 24-й строке. Код для обращения к СУБД прямо в шаблоне да ещё и в том месте, где должна быть константа для js. Не надо так. Что в итоге сохранится в jsVar?
Ну и наконец, значение $removid, полученное как $_GET['removid'], никак не проверяется, да?
В общем, классика: «just stringing random characters together until it compiles».
Годно.
MAKAKA 27.05.2020 20:28 # +1
Notice
guest8 27.05.2020 20:54 # −999
MAKAKA 27.05.2020 20:58 # +3
Это хороший аргумент.
Вот тебе еще немного
1.Код может и не идеальный, зато понятный в отличие от других языков
2. Ой, можно подумать на ваших С++ было бы лучше
phpBidlokoder2 28.05.2020 00:57 # +1
guest8 28.05.2020 05:12 # −999
jojaxon 28.05.2020 06:15 # +2
nblXOMAKAKA 28.05.2020 10:43 # 0
jojaxon 28.05.2020 11:10 # 0
Либо по-старинке генеришь html на PHP с обычными формами, либо html, js-скрипты и RestAPI отдельно.
nblXOMAKAKA 28.05.2020 11:27 # 0
nblXOMAKAKA 28.05.2020 11:51 # 0
Судя по названию функции, автор ожидает, что этот пыхокод будет выполняться по вызову js-функции dele, т. е. по клику пользователя.
На самом же деле этот код будет выполняться при каждой загрузке страницы, ещё до того, как пользователь куда-нибудь кликнет.
Однако, это может работать, если атрибут action у формы указывает на эту же страницу. Просто когда никаких GET-параметров не передавали, на 24-й строке (где $removid = $_GET['removid'];) вылезет нотис, а в «MongoDB» передастся null, поэтому ничего не удалится. А когда пользователь нажмёт кнопку отправки формы, произойдёт отправка GET-запроса (поскольку функция dele НЕ возвращает false), и код, размещённый с 23-й строки получит нужный GET-параметр.
Итак, обезьяна, написавшая этот код, не думает о том, что исполняется у клиента, а что на сервере, и течёт, а код оказался рабочим (хотя и с пачкой нотисов) по счастливой случайности. Именно поэтому я за «PHP».
Чуть не забыл: использовать метод GET для удаления данных не рекомендуется. Метод POST тут был бы более уместен.
nblXOMAKAKA 28.05.2020 12:01 # 0
Удаляем атрибут onclick и теги <script>, </script> (оставив то, что было в кавычках), в итоге код работает точно так же.
1024-- 28.05.2020 19:12 # 0
Кстати, полезно было бы иметь какую-то РПЦ для того, чтобы такое работало. Только синтаксис поудобнее - чтобы меньше вопросушни.
Либо вложенные блоки <client> и <server>, либо вообще полная неявнушня:
Приложение понимает, какой список функций есть у клиента или сервера, и вызывает их при наличии. Рефлексия и эквивалентность [] и . убраны по максимуму. Компилятор старается объединить или переставить блоки так, чтобы управиться минимумов запросов. Никаких явных запросов нет, только вызовы функций. Асинхрушня спрятана под капотом. Есть стратегии компиляции - "больше на сервере", "больше на клиенте", "минимум передачи данных" и хинты "server function() {}", "client function() {}".
MAMOHT 28.05.2020 19:17 # 0
Кстати, в ASP.NET есть атрибуты runat="server" и runat="client". Как они работают? Какой в итоге HTML- и JS-код получает клиент и что отправляется от клиента серверу?
guest8 28.05.2020 19:27 # −999
MAMOHT 28.05.2020 20:07 # 0
MAKAKA 28.05.2020 20:09 # 0
По сути нажатие её это сабмит формы и вызов обраточика на сервере
MAMOHT 28.05.2020 20:17 # 0
guest8 28.05.2020 21:16 # −999
guest8 28.05.2020 21:17 # −999
guest8 28.05.2020 21:17 # −999
guest8 28.05.2020 21:18 # −999
nblXOMAKAKA 28.05.2020 22:26 # 0
Спасибо. Теперь ясно, откуда берутся «ctl» с цифрами на сайтах.
Я подозревал, что через input type="hidden" должно что-то добавляться, чтобы опознать нажатую кнопку. Значит, ещё добавляется скрипт на стороне клиента, чтобы корректировать это скрытое значение, если кнопок в форме много.
MAKAKA 29.05.2020 02:56 # 0
Общий смысл в том, что ты пишешь так, словно бы у тебя обычная винформа, а не веб.
Нажал кнопк -- вызвался код на C#. Можно переиспользовать веб-форм макак в задачах для веба
nblXOMAKAKA 29.05.2020 13:46 # 0
Кстати, есть ли аналоги runat в каких-нибудь фреймворках на других языках?
guest8 29.05.2020 14:23 # −999
nblXOMAKAKA 29.05.2020 20:04 # 0
1024-- 28.05.2020 19:43 # 0
Такой подход позволит меньше пердолиться по поводу взаимодействия, быстро писать небольшие сайты и прототипы. Если развить инструменты (хинты и другие средства языка, подсказки компилятора), то можно будет писать на таком и приложения побольше.
Например,
можно решить за один запрос. Поскольку x, y, z ортогональны, можно переставить их получение и собрать получение x, z в один запрос к серверу.
bormand 28.05.2020 19:48 # 0
1024-- 28.05.2020 19:53 # 0
guest8 28.05.2020 20:01 # −999
1024-- 28.05.2020 21:22 # 0
Но, думаю, с современными достижениями компитуляции эту питушню можно сгустить до одного запроса, если во время итереции побочные эффекты имеются только на одной стороне. Либо выставить жирное предупреждение на каком-то этапе.
KOPOHABuPYC 28.05.2020 21:23 # 0