Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
<!DOCTYPE HTML>
<html lang="de">
<head>
<meta charset="utf-8">
<title>ToDo-APP</title>
<link rel="stylesheet" href="css/Lil-Helper.css">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link rel="stylesheet" href="css/webfonts/all.css">
<link rel="stylesheet" href="css/own.css">
<style>
#frm-tasks button
{
padding: 0 18px;
}
</style>
</head>
<body>
<?php
mysqli_report(MYSQLI_REPORT_STRICT);
try
{
$con = new mysqli('localhost', 'testuser', 'testpasswd', 'testdb');
$action = Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
[110]POST['action'] ?? 'list';
if(!empty( Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
[110]POST["text"]))
{
$eingabe = Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
[110]POST["text"];
try
{
$stmt = $con->prepare('INSERT INTO work(text) VALUES(?)');
$stmt->bind_param('s', Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
[110]POST["text"]);
$stmt->execute();
}
catch (mysqli_sql_exception $e)
{
$msg = $e->getMessage();
echo "<div>Error processing statement: $msg;</div>";
}
}
if('del' === $action && isset( Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
[110]POST['rows']) && is_array( Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
[110]POST['rows']))
{
try{
$stmt = $con->prepare('DELETE FROM `work` WHERE `work`.`id` = ?');
$stmt->bind_param('i', $row);
foreach ( Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
[110]POST['rows'] as $row)
{
$stmt->execute();
if($e = $stmt->error)
echo "<div>DB Error: $e</div>";
}
}
catch (mysqli_sql_exception $e)
{
$msg = $e->getMessage();
echo "<div>Error processing statement: $msg;</div>";
}
}
?>
<header class="lil-menu lil-flex lil-flex-center align-center">
<a href="index.html" class="lil-brand">
<h3>To-Do</h3>
</a>
<a class="lil-menu-item currentLink" href="index.html">ToDo</a>
<a class="lil-menu-item" href="#archive">Archiv</a>
<a class="lil-menu-item" href="#Sprachen">Sprachen</a>
</header>
<div class="main">
<div class="lil-box">
<h3 class="lil-font-rot lil-big-font lil-space lil-font-style" style="font-size: 4rem;">ToDo</h3>
<div class="lil-box">
<!--form action="index.php" method="post"-->
<form id="frm-tasks" action="" method="post">
<input class="lil-input" name="text" type="text">
<button type="submit" class="lil-button-green" name="action" value="add">Hinzufügen</button>
<?php
try
{
$res = $con->query('SELECT id, text FROM work');
if(0 < $res->num_rows)
{
?>
<table>
<thead>
<tr>
<th></th><th>ID</th> <th>Aufgabe</th>
</tr>
</thead>
<tbody>
<?php
while($dsatz = mysqli_fetch_object($res))
{
?>
<tr>
<td><input type="checkbox" name="rows[]" value="<?php echo $dsatz->id;?>"></td><td><?php echo $dsatz->id;?></td> <td><?php echo $dsatz->text;?></td>
</tr>
<?php
}
?>
</tbody>
</table>
<button type="submit" class="lil-button-red lil-button-small" name="action" value="del">Löschen</button>
<?php
}
}
catch (mysqli_sql_exception $e)
{
$msg = $e->getMessage();
echo "<div>Error processing statement: $e->msg;</div>";
}
?>
</form>
</div>
</div>
</div>
<!-- not needed atm script src="js/jquery-3.3.1.min.js"></script-->
<h2>POST</h2>
<?php
var_dump( Как обсуждалось в комментарии, у вас может быть несколько флажков, формирующих параметр массива: <input name="theName[1]">
с явным ключом и name="theName[]"
с неявным ключом.
Более того, вы должны использовать подготовленные операторы для предотвращения атак SQL-инъекций. Представьте, что злоумышленник отправляет запрос с одинарной кавычкой '
в поле, то есть он завершает разделитель строк SQL и добавляет произвольный код SQL. Подготовленные операторы используют заполнители, а параметры отправляются отдельно.
Вы также должны обрабатывать ошибки. В приведенном ниже коде ошибки выводятся в виде HTML, однако вы должны определить свою собственную функцию ведения журнала, а не просто echo
в поток. Это может выводить HTML на серверы разработки, но записывать на диск на производственных серверах.
Это рабочий пример, протестированный на PHP7.3 с MariaDB 10:
[110]POST);
}
catch (mysqli_sql_exception $e)
{
$msg = $e->getMessage();
echo "<div>Error connecting DB: $msg;</div>";
}
?>
</body>
</html>
Создание нагло на усилии MrTopf:
import re
rx = re.compile("((?:@\w+ +)+)(.*)")
t='@abc @def @xyz Hello this part is text and my email is foo@ba.r'
a,s = rx.match(t).groups()
l = re.split('[@ ]+',a)[1:-1]
print l
print s
печать:
['abc', 'определение', 'xyz']
Привет эта часть является текстом, и моим электронным письмом является foo@ba.r
Справедливо привлеченный к ответу hasen j, позвольте мне разъяснить, как это работает:
/@\w+ +/
соответствует единственному тегу - сопровождаемый по крайней мере одним алфавитно-цифровым или _ сопровождаемый по крайней мере одним пробелом. + является жадным, поэтому если будет больше чем одно пространство, то оно захватит их всех.
Для соответствия любому количеству этих тегов мы должны добавить плюс (одна или несколько вещей) к шаблону для тега; таким образом, мы должны сгруппировать его с круглыми скобками:
/(@\w+ +)+/
то, которое соответствует одному или нескольким тегам, и, будучи жадным, соответствует всем им. Однако те круглые скобки теперь возятся с нашими группами получения, таким образом, мы отменяем это путем превращения их в анонимную группу:
/(?:@\w+ +)+/
Наконец, мы превращаем это в группу получения и добавляем другого для подметания остальных:
/((?:@\w+ +)+)(.*)/
Последняя разбивка, которая подведет итог:
((?:@\w+ +)+)(.*)
(?:@\w+ +)+
( @\w+ +)
@\w+ +
Обратите внимание, что в рассмотрении этого, я улучшился, это - \w не должно было быть в наборе, и это теперь допускает несколько пробелов между тегами. Спасибо, hasen-j!
[i.strip('@') for i in t.split(' ', 2)[:2]] # for a fixed number of @def
a = [i.strip('@') for i in t.split(' ') if i.startswith('@')]
s = ' '.join(i for i in t.split(' ') if not i.startwith('@'))
Как насчет этого:
слово foreach, проверить
2.1. если слово запускается с затем Нажатие для первого списка
2.2. иначе просто присоединитесь к остающимся словам пробелами.
[редактирование: это реализует то, что было предложено Osama выше]
Это создаст L на основе переменные с начала строки, и затем однажды не, var найден, просто захватите остальную часть строки.
t = '@one @two @three some text afterward with @ symbols@ meow@meow'
words = t.split(' ') # split into list of words based on spaces
L = []
s = ''
for i in range(len(words)): # go through each word
word = words[i]
if word[0] == '@': # grab @'s from beginning of string
L.append(word[1:])
continue
s = ' '.join(words[i:]) # put spaces back in
break # you can ignore the rest of the words
Можно осуществить рефакторинг это, чтобы быть меньшим количеством кода, но я пытаюсь сделать то, что продолжается очевидный.
t='@abc @def Hello this part is text'
words = t.split(' ')
names = []
while words:
w = words.pop(0)
if w.startswith('@'):
names.append(w[1:])
else:
break
text = ' '.join(words)
print names
print text
Вы могли бы также использовать регулярные выражения:
import re
rx = re.compile("@([\w]+) @([\w]+) (.*)")
t='@abc @def Hello this part is text and my email is foo@ba.r'
a,b,s = rx.match(t).groups()
Но это все зависит от того, как Ваши данные могут быть похожими. Таким образом, Вы, возможно, должны были бы скорректировать его. То, что это делает, в основном создает группу через () и проверяет на то, что позволяется в них.
Вот просто другое изменение, которое использует разделение () и никакой regexpes:
t='@abc @def My email is red@hjk.com'
tags = []
words = iter(t.split())
# iterate over words until first non-tag word
for w in words:
if not w.startswith("@"):
# join this word and all the following
s = w + " " + (" ".join(words))
break
tags.append(w[1:])
else:
s = "" # handle string with only tags
print tags, s
Вот более короткое, но возможно немного загадочная версия, которая использует regexp для нахождения первого пространства сопровождаемым символом non-@:
import re
t = '@abc @def My email is red@hjk.com @extra bye'
m = re.search(r"\s([^@].*)$", t)
tags = [tag[1:] for tag in t[:m.start()].split()]
s = m.group(1)
print tags, s # ['abc', 'def'] My email is red@hjk.com @extra bye
Это не работает правильно, при отсутствии тегов или никакого текста. Формат является underspecified. Необходимо будет обеспечить больше тестовых сценариев для проверки.