Przesyłanie heredoc z kodem HTML / PHP

Przesyłanie heredoc z kodem HTML / PHP
CM
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

Jak można przesłać heredoc z kodem html/php w zmiennej będącej wartością formularza? W sumie, gdyby nie Chrome, to przesłałbym ją tak:

Kopiuj
<input  type = "hidden" name = "kup_wypozycz_1" value = '<?php echo  "$kup_wypozycz_1" ?>'>

ale Chrome nie pozwala, bo ERR_BLOCKED_BY_XSS_AUDITOR
dlatego muszę tak (zamieniłem cudzysłów na apostrof)

Kopiuj
<input  type = "hidden" name = "kup_wypozycz_1" value = '<?php echo '$kup_wypozycz_1' ?>'>

no ale teraz jak odczytuje, to pokazuje mi string, czyli domyślnie dokłada apostrofy.

na stronie pojawia się: $kup_wypozycz_1

myślę jeszcze o tym, jak mógłbym wyczyścić ten "przekaz", np. podczas wywoływania, ale trochę brakuje mi jeszcze wiedzy, aby to "obskubać", zwłaszcza, że pobieram dane z bazy pętlą w tabeli:

Kopiuj
echo $dane_lista_transferowa['kup_wypozycz'];

Czy może ktoś wie, jak to zrobić? Np. przy zastosowaniu jakiejś funkcji, jak str_replace?? preg_replace?
próbowałem:

Kopiuj
echo preg_replace('/[\"']/', '',$dane_lista_transferowa['kup_wypozycz']);

PIERWSZA STRONA (FRAGMENT)

Kopiuj
$wystawiony_pilkarz_1 = $pilkarz_1;

$kup_wypozycz_1 =<<<KUP_WYPOZYCZ
<form action = "b_zespol.php" method = "post">
	<button type = "submit" 
			name = "zawodnik_1" 
			value = "<?php echo $wystawiony_pilkarz_1 ?>"/>KUP / WYPOŻYCZ
	</button>
</form>
KUP_WYPOZYCZ;


?>
<html>
	<body>
		<table>
			<tr>
				<td><?php echo $pilkarz_1 ?></td>
				<td><?php echo $wartosc_pilkarz_1 ?></td>
				<td>
					<form action = "lista_transferowa.php" method = "post">
						<select name = "transfer_1">
					<option value = "<?php echo $transfer_sprzedaży_1?>">na sprzedaż	</option>
					<option value = "<?php echo $transfer_wypozyczenia_1?>">do wypożyczenia</option>
					<option value = "0">wolny strzelec  </option>
						</select>
			<input  type = "hidden" name = "kup_wypozycz_1" value = '<?php echo '$kup_wypozycz_1' ?>'>
			<button type = "submit" name = "zawodnik_1"   value = "<?php echo $pilkarz_1?>">Wystaw</button>
					</form>
				</td>
			</tr>
			<tr>

DRUGA STRONA (FRAGMENT)

Kopiuj
if (isset($_POST['zawodnik_1'], $_POST['transfer_1'])){
	$wystawiony_pilkarz_1 = $_POST['zawodnik_1'];
	$rodzaj_transferu_1   = $_POST['transfer_1'];
	$kup_wypozycz_1   	  = $_POST['kup_wypozycz_1'];
	$sql = mysqli_query($connection, "INSERT INTO lista_transferowa SET
													  wystawiony_pilkarz = '$wystawiony_pilkarz_1', 
													  rodzaj_transferu   = '$rodzaj_transferu_1', 
													  kup_wypozycz	     = '$kup_wypozycz_1'
																  ");

...
$lista_transferowa = mysqli_query ($connection, "SELECT DISTINCT wystawiony_pilkarz, rodzaj_transferu, kup_wypozycz FROM lista_transferowa") or die (mysqli_error());

...
if(mysqli_num_rows($lista_transferowa) > 0) { 
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */ 
    while($dane_lista_transferowa = mysqli_fetch_assoc($lista_transferowa)) { 
        echo $dane_lista_transferowa['wystawiony_pilkarz']; 
        echo $dane_lista_transferowa['rodzaj_transferu'];
		echo $dane_lista_transferowa['kup_wypozycz'];
		echo "<br>";
    }
} 

edytowany 7x, ostatnio: Patryk27
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Korzystam z chrome'a i podaną frazę <input type = "hidden" name = "kup_wypozycz_1" value = '<?php echo "$kup_wypozycz_1" ?>'> mogę wpisać w google, więc to chyba nie jest wina przeglądarki.
Zrzut ekranu 2018-01-10 o 10.11.56.png

Tu masz jeszcze hack na to https://www.bmyers.com/public/Bypassing-the-XSS-AUDITOR-error-in-Chrome.cfm - ale powiedz mi jedno, bo może jeszcze brak kawy mi doskwiera - skoro przypisujesz najpierw cały form do zmiennej $kup_wypozycz_1 - to dlaczego potem używasz tej zmiennej jako value i name w inpucie? przeciez to bez sensu

edytowany 1x, ostatnio: axelbest
CM
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

Hmm... chyba nie do końca się rozumiemy,
próbuję przesłać postem do bazy danych zmienną, która zawiera w sobie heredoc z kodem html/php (tylko echo). O ile udaje mi się przesłać go do bazy, tak nie mogę wywołać zmiennej, bo chrome nie pozwala. Jeśli nadam apostrofy, to w przeglądarce (co zrozumiałe) wyświetla się tylko napis $zmienna. Zobacz o co mi chodzi w kodzie.

edytowany 1x, ostatnio: cmichalska
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Chcesz do bazy zapisywać kod php z formularzem, który następnie trafia do bazy a potem ma być uruchomiony na serwerze i zwrócony do widoku użytkownikowi? Upewniam się tylko, a i sam fakt że przesyłasz tam echo - nic nie zmienia w tej kwestii.

edytowany 2x, ostatnio: axelbest
CM
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

no tak, tak mi wyszło w trakcie pisania (nie widzę innego rozwiązania) i potrzebuję wyświetlić ten formularz obok zmiennej, którą przesłałem wcześniej (muszą być tożsame). Nie wiem bowiem, jak inaczej skojarzyć dane otrzymywane z bazy z ich macierzystym odniesieniem (zmienną). Może da się podczas wywoływania, ale otrzymuję tylko stringi.

a_zespol - lista transferowa - b_zespol
wystawiam na listę transferową, tj. przesyłam postem na stronę z listą i wrzucam do bazy. No i teraz chcę kupić zawodnika z listy. No ale na liście mam już tylko string, który jest tylko cieniem. Gubię tę zmienną, którą wysyłam od a_zespol, a muszę ją utrzymać, bo chcę przerzucić do b_zespol.

a zespol

Kopiuj
$wystawiony_pilkarz_1 = $pilkarz_1;

$kup_wypozycz_1 =<<<KUP_WYPOZYCZ
<form action = "b_zespol.php" method = "post">
	<button type = "submit" 
			name = "zawodnik_1" 
			value = "<?php echo $wystawiony_pilkarz_1 ?>"/>KUP / WYPOŻYCZ
	</button>
</form>
KUP_WYPOZYCZ;


?>
<html>
	<body>
		<table>
			<tr>
				<td><?php echo $pilkarz_1 ?></td>
				<td><?php echo $wartosc_pilkarz_1 ?></td>
				<td>
					<form action = "lista_transferowa.php" method = "post">
						<select name = "transfer_1">
							<option value = "<?php echo $transfer_sprzedaży_1 		?>">na sprzedaż		</option>
							<option value = "<?php echo $transfer_wypozyczenia_1 	?>">do wypożyczenia	</option>
							<option value = "0"										   >wolny strzelec  </option>
						</select>
						<input  type = "hidden" name = "kup_wypozycz_1" value = '<?php echo '$kup_wypozycz_1' ?>'>
						<button type = "submit" name = "zawodnik_1"   value = "<?php echo $pilkarz_1?>">Wystaw</button>
					</form>
					<form action = "b_zespol.php" method = "post">
						<button type = "submit" 
								name = "zawodnik_1" 
								value = "<?php echo $wystawiony_pilkarz_1 ?>"/>KUP / WYPOŻYCZ
						</button>
					</form>
				</td>
			</tr>
			<tr>

lista transferowa

Kopiuj
<?php
session_start();
error_reporting(E_ALL ^ E_NOTICE);
echo "Lista transferowa ";
echo "<br>";
require_once ('dane_mysqli.php');
$connection = mysqli_connect($host, $db_user, $db_password, $db_name) or die ('nie udało się połączyć z bazą danych');
if (isset($_POST['zawodnik_1'], $_POST['transfer_1'])){
	$wystawiony_pilkarz_1 = $_POST['zawodnik_1'];
	$rodzaj_transferu_1   = $_POST['transfer_1'];
	$kup_wypozycz_1   	  = $_POST['kup_wypozycz_1'];
	$sql = mysqli_query($connection, "INSERT INTO lista_transferowa SET
																  wystawiony_pilkarz = '$wystawiony_pilkarz_1', 
																  rodzaj_transferu   = '$rodzaj_transferu_1', 
																  kup_wypozycz	     = '$kup_wypozycz_1'
																  ");
	if ($sql){
...
...
...
	
$sql = mysqli_query($connection, "ALTER IGNORE TABLE `lista_transferowa` ADD UNIQUE INDEX(`wystawiony_pilkarz`)");

$lista_transferowa = mysqli_query ($connection, "SELECT DISTINCT wystawiony_pilkarz, rodzaj_transferu, kup_wypozycz FROM lista_transferowa") or die (mysqli_error());

if(mysqli_num_rows($lista_transferowa) > 0) { 
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */ 
    while($dane_lista_transferowa = mysqli_fetch_assoc($lista_transferowa)) { 
        echo $dane_lista_transferowa['wystawiony_pilkarz']; 
        echo $dane_lista_transferowa['rodzaj_transferu'];
		echo $dane_lista_transferowa['kup_wypozycz'];
		echo "<br>";
    } 
} 

b_zespol

Kopiuj
<?php
session_start();

if (isset($_POST['zawodnik_1'])){
	$wystawiony_pilkarz_1 = $_SESSION['wystawiony_pilkarz_1'];
	$kupoiony_pilkarz_1 = $_POST['zawodnik_1'];
	require_once ('dane_mysqli.php');
	$connection = mysqli_connect($host, $db_user, $db_password, $db_name) or die ('nie udało się połączyć z bazą danych');
	$transfer = mysqli_query ($connection, "INSERT INTO b_zespol_sklad (zawodnicy) SELECT wystawiony_pilkarz FROM lista_transferowa WHERE wystawiony_pilkarz = '$wystawiony_pilkarz_1'");
	$sql = mysqli_query($connection, "ALTER IGNORE TABLE `b_zespol_sklad` ADD UNIQUE INDEX(`zawodnicy`)");
	//echo $wystawiony_pilkarz_1;
}
require_once ('dane_mysqli.php');
$connection = mysqli_connect($host, $db_user, $db_password, $db_name) or die ('nie udało się połączyć z bazą danych');
$b_sklad = mysqli_query($connection, "SELECT zawodnicy FROM b_zespol_sklad");

if(mysqli_num_rows($b_sklad) > 0) {
	while ($b_zawodnicy = mysqli_fetch_assoc($b_sklad)){
		echo $b_zawodnicy['zawodnicy'];
		echo "<br>";
	}
}

mysqli_close($connection);
?>
edytowany 5x, ostatnio: cmichalska
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

W bazie zapisujesz w polu kup_wypozycz id zawodnika i tyle - formularze potem generujesz juz w widoku. Jak byś miała tysiąc rekordów - to tylko powielałabyś bardzo dużo danych. Utwórz jakąś funkcję przy widokach, która dostanie ID zawodnika i generuje forma, będzie to bardziej uniwersalna funkcja.

Dodatkowo - dlaczego przy zapisie do bazy robisz operacje zmieniające strutkrurę tabeli ?
($sql = mysqli_query($connection, "ALTER IGNORE TABLE b_zespol_sklad ADD UNIQUE INDEX(zawodnicy)");)

CM
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

Kilkukrotne naciśnięcie:

Kopiuj
<button type = "submit" name = "zawodnik_1"   value = "<?php echo $pilkarz_1?>">Wystaw</button>

skutkuje powielaniem danych w bazie. Tym sposobem sprawiam, że zawodnik wystawiony na listę, nie trafi tam po raz drugi, a w rzeczy samej (bo za to odpowiadała mi SELECT DISTINCT, że tabela nie będzie zapychana kilkukrotnymi kliknięciami imputa.

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Kilkukrotne kliknięcie można zablokować JavaScriptem - natomiast niezależnie od metody zabezpieczenia - user może to samo kliknąć np w dwóch kartach lub dwóch różnych przeglądarkach, więc i tak możesz mieć zdublowane dane. Używanie distinct'a w celu uniknięcia podwójnych kliknięć to imho słabe rozwiązanie. Rozumiem że to jakiś prosty projekt na studia ew. prywatnie do nauki tak?

CM
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

nie bawię się javaScriptem, na razie uczę się PHP i mySQL. Nie kliknie tego samego na dwóch kartach, bo mam system logowania i rejestracji. Mam też zabezpieczenie przed odświeżeniem i cofnięciem, także, z której strony by nie próbował wejść, nie zdubluje mi danych (sprawdzałem na kilka sposobów, także powinno działać). Klikać może sobie do woli, tylko żeby mi się dane nie dublowały.
To jest projekt treningowy, który realizuję po godzinach. Na co dzień nie zajmuję się programowaniem. Pomyślę nad innym rozwiązaniem, widzę, że to ślepa uliczka, ale i takie są pouczające. Nad systemem transferowym myślę dopiero od wczoraj. także paraliżu nie ma:)

edytowany 2x, ostatnio: cmichalska
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Warszawa
  • Postów:2251
0

Skoro to projekt do samorozwoju wiedzy o phpie - to polecam konkretnie nazywać zmienne, np. unikać="nie stosować" zmiennych typu $temp1 albo $zawodnik_1 - chyba że masz metodę, która operuje na dwóch zawodnikach jednocześnie np porównując ich. Zamiast mysqli - poczytaj troszkę o PDO - a uwierz mi że ta wiedza bardzo Ci się przyda oraz unikniesz potencjalnych sql-injection,

Połączenie z bazą zdefiniuj w jakiejś metodzie (mówię o "metodach" pod kątem OOP, więc jeśli tego nie ogarniasz jeszcze to zamień to słówko na "funkcja") - żeby nie inicjować go przed każdym odczytem/zapisem do bazy.
Unikaj zmiennych globalnych - a zakładam że takowymi są $db_user, $db_password, $db_name - więc jeśli ktoś sprytny by Ci podmienił aktualnego ukrytego inputa i zrobił echo $db_user zamiast echo $wystawiony_pilkarz_1 to pewnie takie dane trafiłyby do bazy, następnie przy wyświetlaniu - użytkownik mógłby je podejrzeć. W JS'ie taka blokada jest bardzo prosta - o ile korzystasz z jQuery to https://stackoverflow.com/questions/2830542/prevent-double-submission-of-forms-in-jquery a w czystym JS'ie http://www.the-art-of-web.com/javascript/doublesubmit/ - jest to max 10 minut roboty.

Jeszcze tak spytam - jak rozwiązujesz problem dwukrotnego kliknięcia za pomocą systemu logowania i rejestracji? Oraz jak działają zabezpieczenia przed odświeżeniem i cofaniem?

edytowany 2x, ostatnio: axelbest
CM
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

OK, DZIĘKI, przejrzę to wszystko co napisałeś i będzie dobrze.

CM
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

Jeszcze tak spytam - jak rozwiązujesz problem dwukrotnego kliknięcia za pomocą systemu logowania i rejestracji? Oraz jak działają zabezpieczenia przed odświeżeniem i cofaniem?

Nie zabezpieczyłem dwukrotnego kliknięcie systemem logowania i rejestracji, tym systemem zabezpieczyłem próby wejścia z zewnątrz oraz odświeżenia i cofnięcia. System ten współgra mi z function generateHash() i rozwiązaniem autorskim, które polega na przypisywaniu zmiennej sesyjnej wartości == 0 OR == 1, które zmieniają się w przypadku odświeżenia. Jeśli wypadnie jedynka to od razu header.

Kopiuj
/**********************************************************
            ZABEZPIECZENIE PRZED COFNIĘCIEM
***********************************************************/

function generateHash(){ // generowanie tokena
return md5(time() * rand());
} // odbieranie danych z formularza
if(!$_SESSION['adduser'] || $_POST['hash'] != $_SESSION['adduser']){ 
	$_SESSION['adduser'] = $_POST['hash']; //dodajemy zmienną sesyjną adduser
} else {
	header('Location:logaut.php');
}
Kopiuj
if (!isset($_SESSION['kolejka'])){ 
		   $_SESSION['kolejka'] = 0;
		   $_SESSION['sezon1'] = 2018;
		   $_SESSION['sezon2'] = 2019;
} else {                          
		   $_SESSION['kolejka']++;
}

if(($_SESSION['kolejka']) == 1){
	echo "<br>";
	echo "Sezon: ".$_SESSION['sezon1'].'/'.$_SESSION['sezon2'];
	echo "<br>";
	if (!isset($_POST['hash']) || (!isset($_SESSION['adduser']))){
		header('Location:xxx.php');
	}
	if(empty($_POST['nastepna_kolejka'])){
		echo "Kolejka I<br>";
	} elseif(isset($_POST['nastepna_kolejka'])){

ps. dzięki za podpowiedzi, udało mi się zrobić transfer zawodnika do kolejnej tabeli (tzn. na razie wszystkich zawodników, ale wyodrębnienie jednego jest mam nadzieję, kwestią kilku godzin :))

Kopiuj
while($r = mysqli_fetch_assoc($wynik)){

		echo "<br>";
		$id = $r['Id'];
		$nazwiska = $r['Nazwisko'];
		var_export($id);
		echo " - ";
		var_export($nazwiska);
		var_dump ($nazwiska);
		?>
		<form action = "a_zespol.php" method = "post">
			<button type = "submit" name = "nazwisko" value = <?php echo $nazwiska ?>>Transfer</button>
		<?php
		$_POST['$nazwiska'];
		mysqli_query($con, "INSERT INTO lista_transferowa (nazwisko)")  or die ('error database insert  or is insert before');
		

edytowany 2x, ostatnio: cmichalska
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)