Pusta strona po próbie dodania odpowiedzi na forum

Pusta strona po próbie dodania odpowiedzi na forum
Mariusz Kubielas
  • Rejestracja:3 miesiące
  • Ostatnio:15 dni
  • Postów:20
0

Witam, mam na swojej stronie system forum z opcją logowania. Gdy próbuję dodać jakiś post to się nie da i przekierowuje na pustą stronę z samym layoutem (wyglądem). Tak jest gdy próbuję dodać odpowiedź do jakiegoś wątku, lub utworzyć nowy temat. Dodam że to przedtem działało, tylko wyrzuciłem stronę z serwera i teraz spróbowałem wrzucić z powrotem i coś się zepsuło. W którym pliku/miejscu może występować ten błąd ? Bo wątpię że wina leży w bazie danych mysql.

Oto link do strony:
https://www.dbgreat.com.pl

edytowany 1x, ostatnio: Mariusz Kubielas
ccwrc
  • Rejestracja:prawie 9 lat
  • Ostatnio:4 minuty
  • Postów:371
1

Z ciekawości chciałem założyć tam konto, wszedłem na stronę, odpaliłem konsolę i... Zacząłem czytać błędy. Tylko błędy rosną w tempie lawinowym, pomimo tego, że nic na stronie nie robię. Przeczytaj je najpierw.

Jak chcesz możesz także udostępnić kod strony (z klienta jest widoczny tylko front) bez wrażliwych danych i wtedy będzie można iść dalej.

Edit: P.S. brakuje loga RTL7 : )

Edit 2: po rejestracji i kliknięciu w link potwierdzający dostaję z serwera 403.

edytowany 2x, ostatnio: ccwrc
Mariusz Kubielas
  • Rejestracja:3 miesiące
  • Ostatnio:15 dni
  • Postów:20
0

Ok dzięki wielkie, spróbuję naprawić te błędy. A że po rejestracji wyświetla błąd to ciekawe.

ccwrc
  • Rejestracja:prawie 9 lat
  • Ostatnio:4 minuty
  • Postów:371
1
Mariusz Kubielas napisał(a):

Ok dzięki wielkie, spróbuję naprawić te błędy. A że po rejestracji wyświetla błąd to ciekawe.

Po prostu sprawdź logi, wątpię żeby o danej godzinie rejestrował się ktoś jeszcze.

Pomimo 'activated' ( /confirm.php?token=joljolelojoljol&status=activated ) w query przy próbie logowania mam komunikat, że konto nie zostało aktywowane ("Błąd. Twoje konto nie zostało jeszcze potwierdzone").

Mariusz Kubielas
  • Rejestracja:3 miesiące
  • Ostatnio:15 dni
  • Postów:20
0
ccwrc napisał(a):
Mariusz Kubielas napisał(a):

Ok dzięki wielkie, spróbuję naprawić te błędy. A że po rejestracji wyświetla błąd to ciekawe.

Po prostu sprawdź logi, wątpię żeby o danej godzinie rejestrował się ktoś jeszcze.

Pomimo 'activated' ( /confirm.php?token=joljolelojoljol&status=activated ) w query przy próbie logowania mam komunikat, że konto nie zostało aktywowane ("Błąd. Twoje konto nie zostało jeszcze potwierdzone").

Zrobiłem że możesz się zalogować.
Dobrze wiedzieć że cała strona do poprawki.

Teraz zepsułem bardziej, kiedy próbuję dodać odpowiedź na forum to dodaje się w bazie danych mysql ale nie jest widoczna na stronie. Do tego dodaje nowy temat bez nazwy. Mogę udostępnić kod strony ale który, bo trochę tego jest.

Tutaj w kodzie (kod logowanie.php) na początku był kawałek kodu który blokował dodawanie postów na forum. Usunąłem go i na chwilę podziałało. Tak zepsułem że teraz nie widać tych odpowiedzi na stronie. Chociaż tyle że dodają się w bazie danych.

Kopiuj
<!-- LOGOWANIE -->
<?php


if (isset($_SESSION['username'])) {
    // Jeśli użytkownik jest zalogowany, wyświetl menu użytkownika
    ?>

	<style>
	.user	{background-image:url('grafika/user.png');
				min-width:304px;
				height:183px;
	}
	</style>

    <div class="user" style='width: 239px; margin-top: 23px; margin-left:0px;padding-top: 0px;'>
        <?php include 'panel.php'; ?>
    </div> <!-- Zakończ pierwszy <div> -->
    <?php
} else {
    // Jeśli użytkownik nie jest zalogowany, wyświetl panel logowania
    ?>


	<div style="background-image:url('grafika/panel.png');width:307px;height:190px;background-repeat:no-repeat;padding-top:42px;padding-left:13px;">
    
        <form method="post" action="login/zaloguj.php" style="width:260px;" autocomplete="off">
			<input type="text" name="username" placeholder="login" style="padding:0;padding-left:6px;width:254px;height:24px;border:0;background:none;color:darkgray;" autocomplete="off">
			
			<input type="password" name="password" placeholder="*****" style="padding:0;padding-left:6px;margin-top:10px;width:254px;height:24px;border:0;background:none;color:darkgray;" autocomplete="off">
			
			<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
			
			<input type="submit" value="" style="margin-top:10px;width:97px;height:24px;background:none;border:0;">
			
			
			</form>
					
					<div style="width:191px;margin-top:25px;font-size:13px;"><b><a href="?akcja=register">Rejestracja</a></b>
					/
					<a href="?akcja=reset_hasla" class="haslo">Przypomnij hasło</a>
					</div>
    </div>
    <?php
}
?>
<!-- LOGOWANIE -->

Tutaj kod forum:

Kopiuj
<!DOCTYPE html>
<html>
<head>
    <title>Forum - Temat</title>
    <link rel="stylesheet" type="text/css" href="forum_system/css/styl.css">
</head>
<body>
<style>
.post {
    padding-bottom: 5px;
}

.user-points {
    bottom: 10px;
    right: 10px;
    background-color: #282d32;
    text-align: right;
    border-radius: 5px;
    margin-bottom: -20;
}


.hover-image						{opacity:0.5;
									transition: 0.3s ease;}
.hover-image:hover					{
									width:16;
									height:16;
									display:inline-block;
									opacity:1;
									transition: 0.3s ease;
									}
</style>
<h2 style="margin-top:0;">Forum - Temat</h2>

<?php

$conn = new mysqli($servername, $username, $password, $dbname);

// Sprawdzenie połączenia
if ($conn->connect_error) {
    die("Błąd połączenia z bazą danych: " . $conn->connect_error);
}



// Sprawdzenie, czy użytkownik jest zalogowany
// Załóżmy, że korzystasz z uwierzytelniania na podstawie sesji
session_start();
$czy_uzytkownik_zalogowany = isset($_SESSION['username']);



if (isset($_GET['id'])) {
    $topic_id = $_GET['id'];

    // Pobranie danych tematu
    $sql_get_topic = "SELECT * FROM topics WHERE id = $topic_id";
    $result = $conn->query($sql_get_topic);
    $topic = $result->fetch_assoc();

    if ($topic) {
        echo '<h3 style="color:#c3909b;">' . $topic['title'] . '</h3>';
        echo '<p>Autor: ' . $topic['author'] . '</p>';

        // Pobranie odpowiedzi na temat wraz z avatarem użytkownika (with default avatar handling)
        $items_per_page = 5; // Liczba odpowiedzi na stronę
        $current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1; // Numer bieżącej strony

        // Obliczenie OFFSET dla bieżącej strony
        $offset = ($current_page - 1) * $items_per_page;

        $sql_get_replies = "SELECT r.*, IFNULL(u.avatar, 'login/avatars/default_avatar.png') AS avatar, u.points AS user_points
                    FROM replies r 
                    LEFT JOIN users u ON r.author = u.username
                    WHERE r.topic_id = $topic_id 
                    ORDER BY r.timestamp ASC
                    LIMIT $items_per_page
                    OFFSET $offset";

        $result_replies = $conn->query($sql_get_replies);

		

        if ($result_replies) {
            $replies = $result_replies->fetch_all(MYSQLI_ASSOC);

            echo '<h4>Odpowiedzi</h4>';
            echo '<div style="background:none;margin-right:0;margin-left:6px;position:relative;">';
            foreach ($replies as $reply) {

				echo '<div style="float: left; margin-right: 10px;">';
				echo '<img src="' . $reply['avatar'] . '" alt="Avatar" width="55" height="55" style="border:1px solid rgba(255,255,255,0.1);">';
				echo '</div>';
				echo '<p style="margin-right:0; white-space: pre-line;min-height:54px;">' . $reply['content'] . '</p>';
				echo '<p style="color:#5F9EA0;"><img src="forum_system/img/autor.png" style="vertical-align:middle;margin-right:6px;margin-top:-2px;">' . $reply['author'] . '</p>';
				
					$author = $reply['author'];

$sql = "SELECT signature FROM users WHERE username = '$author'";
$result = $conn->query($sql);

if ($result && $result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $signature = $row['signature'];

    if (isset($signature) && !empty($signature)) {
        // Display the author's signature in quotes
        echo '<p style="margin-top: 20px;opacity:0.5;">Podpis: <span style="font-style: italic;">"' . $signature . '"</span></p>';
    } else {
        
    }
} else {
    
}

echo '<div class="user-points" style="align-items: center; margin: 0; margin-bottom: 0; float: right; background: transparent; border: 0px solid gray;">';

if (!$czy_uzytkownik_zalogowany) {
    echo '<div style="margin-top: -16px;">';
}

if ($czy_uzytkownik_zalogowany && $_SESSION['username'] !== $reply['author']) {
    echo '<div style="margin-top: -19px;">';
    echo '<a href="?akcja=addpoints&id=' . $reply['id'] . '"><img src="plus4.png" style="vertical-align: middle; margin: 0; margin-top: -3px; margin-right: 0;" class="hover-image"></a>'; // Link do dodawania punktów
    echo '<p style="display: inline; margin-left: 5px; margin-bottom: 0; margin-top: -16px;margin-right:-5;">' . $reply['points'] . '</p>'; // Wyświetlenie liczby punktów (display: inline)

    echo '<p style="display: inline; margin-left: 5px; margin-bottom: 0; margin-top: -16px;">';
    
    echo '</div>';
} else {
    echo '<p style="display: inline; margin-left: 5px; margin-bottom: 0; margin-right: 6px; margin-top: -16px;">' . $reply['points'] . '</p>'; // Wyświetlenie liczby punktów (display: inline)


}

if (!$czy_uzytkownik_zalogowany) {
    echo '</div>';
}

echo '</div>';


                if ($czy_uzytkownik_zalogowany && $_SESSION['username'] === $reply['author']) {
                    echo '[<a href="?akcja=editreply&id=' . $reply['id'] . '">Edytuj</a>]';
                }
                echo '</li>';
                echo '<hr style="border:0;height:1px;background:rgba(184,194,197,0.17);margin-bottom:15px;width:100%;">';
				
            }
            echo '</ul>';
            echo '</div>';

            // Pobranie liczby wszystkich odpowiedzi na ten temat
            $sql_count_replies = "SELECT COUNT(*) AS total_replies FROM replies WHERE topic_id = $topic_id";
            $result_count_replies = $conn->query($sql_count_replies);
            $row = $result_count_replies->fetch_assoc();
            $total_replies = $row['total_replies'];

					// Wyświetlenie paginacji
					$total_pages = ceil($total_replies / $items_per_page);

					echo '<div style="text-align: center;">'; // Dodajemy pojemnik <div> dla wycentrowania
					echo '<div class="pagination" style="display: inline-block;">'; // Dodajemy pojemnik <div> dla paginacji

					if ($current_page > 1) {
						// Generate the URL for the "wstecz" link
						$query_params = $_GET;
						$query_params['page'] = $current_page - 1;
						$query_string = http_build_query($query_params);
						echo '<a href="?' . $query_string . '">« wstecz</a> ';
					}

					for ($page = 1; $page <= $total_pages; $page++) {
						if ($page === $current_page) {
							echo '<span class="current-page">' . $page . '</span> ';
						} else {
							// Use the PHP function http_build_query to construct the URL with all existing parameters
							$query_params = $_GET;
							$query_params['page'] = $page;
							$query_string = http_build_query($query_params);

							// Generate the URL with the updated page number
							echo '<a href="?' . $query_string . '">' . $page . '</a> ';
						}
					}

					if ($current_page < $total_pages) {
						// Generate the URL for the "dalej" link
						$query_params = $_GET;
						$query_params['page'] = $current_page + 1;
						$query_string = http_build_query($query_params);
						echo '<a href="?' . $query_string . '">dalej »</a> ';
					}

					echo '</div>'; // Zamknięcie pojemnika <div> dla paginacji
					echo '</div>'; // Zamknięcie pojemnika <div> dla wycentrowania

        } else {
            echo '<p>Brak odpowiedzi na ten temat.</p>';
        }

        // Add this section after the previous code block
        if (isset($_GET['akcja']) && $_GET['akcja'] === 'editreply' && $czy_uzytkownik_zalogowany) {
            if (isset($_GET['id'])) {
                $reply_id = $_GET['id'];

                // Fetch the reply from the database
                $sql_get_reply = "SELECT * FROM replies WHERE id = $reply_id";
                $result_reply = $conn->query($sql_get_reply);
                $reply = $result_reply->fetch_assoc();

                // Check if the user is the author of the reply
                if ($reply && $_SESSION['username'] === $reply['author']) {
                    // Handle form submission for updating the reply
                    if ($_SERVER["REQUEST_METHOD"] === "POST") {
                        if (isset($_POST['reply_id']) && isset($_POST['content'])) {
                            $reply_id = $_POST['reply_id'];
                            $content = $_POST['content'];

                            // Update the reply in the database
                            $sql_update_reply = "UPDATE replies SET content = '$content' WHERE id = $reply_id";

                            if ($conn->query($sql_update_reply) === TRUE) {
                                echo '<p>Odpowiedź została zaktualizowana.</p>';
                            } else {
                                echo '<p>Błąd podczas aktualizacji odpowiedzi: ' . $conn->error . '</p>';
                            }
                        } else {
                            echo '<p>Nieprawidłowe dane formularza.</p>';
                        }
                    } else {
                        echo '<h4>Edytuj odpowiedź</h4>';
                        echo '<form method="post" action="?akcja=editreply&id=' . $reply_id . '">';
                        echo '<input type="hidden" name="reply_id" value="' . $reply_id . '">';
                        echo '<label for="content">Treść odpowiedzi:</label><br>';
                        echo '<textarea name="content" rows="5" cols="40" required>' . $reply['content'] . '</textarea><br>';
                        echo '<input type="submit" value="Zapisz zmiany">';
                        echo '</form>';
                    }
                } else {
                    echo '<p>Nie masz uprawnień do edycji tej odpowiedzi.</p>';
                }
            } else {
                echo '<p>Brak identyfikatora odpowiedzi.</p>';
            }
        }



if ($czy_uzytkownik_zalogowany) {
    // Formularz do odpowiadania na temat
    echo '<h4>Odpowiedz na temat</h4>';
    echo '<form method="post" action="?akcja=addreply">';
    echo '<input type="hidden" name="topic_id" value="' . htmlspecialchars($topic_id) . '">';

    // Dodajemy wyświetlanie avatara
    echo '<div style="float: left; margin-right: 10px;">';
    // Kod do wyświetlenia avatara (jeśli istnieje)
    echo '</div>';

    // Dodajemy pole do wprowadzenia treści odpowiedzi
    echo '<textarea name="content" rows="5" cols="40" style="background:none;resize:none;color:rgba(178, 185, 192, 0.8);border: 1px solid rgba(255,255,255,0.2);" required>';
    echo htmlspecialchars($content, ENT_QUOTES, 'UTF-8');
    echo '</textarea><br>';

    // Dodajemy przyciski do formatowania tekstu
    echo '<p>Formatowanie tekstu:</p>';
    echo '<img src="forum_system/img/b.png" style="margin-left:2px;margin-right: 3px; cursor: pointer;" alt="Pogrubienie" onclick="formatText(\'<b>\', \'</b>\')">';
    echo '<img src="forum_system/img/i.png" style="margin-right:3px; cursor: pointer;" alt="Pochylenie" onclick="formatText(\'<i>\', \'</i>\')">';
    echo '<img src="forum_system/img/u.png" style="margin-right:3px;margin-bottom:-3px; cursor: pointer;" alt="Podkreślenie" onclick="formatText(\'<u>\', \'</u>\')">';

    // Dodajemy przycisk do wstawiania linku
    echo '<img src="forum_system/img/link.png" style="margin-left:12;margin-right: 3; cursor: pointer;" alt="Link" onclick="insertLink()">';

    echo '<br>';

    echo '<br>';
    echo '<input type="submit" value="Dodaj odpowiedź">';
    echo '</form>';


} else {
    echo '<p>Musisz być zalogowany, aby dodać odpowiedź.</p>';
}
} else {
    echo '<p>Temat nie istnieje.</p>';
}
} else {
    echo '<p>Brak identyfikatora tematu.</p>';
}



?>


<p style="margin-bottom:0;"><a href="?akcja=forum">Powrót do listy tematów</a></p>

<script>
    function formatText(startTag, endTag) {
        var textarea = document.getElementsByName("content")[0];
        var startPos = textarea.selectionStart;
        var endPos = textarea.selectionEnd;
        var selectedText = textarea.value.substring(startPos, endPos);
        var replacement = startTag + selectedText + endTag;
        textarea.value = textarea.value.substring(0, startPos) + replacement + textarea.value.substring(endPos);
    }

        function insertLink() {
            var linkURL = prompt("Wprowadź adres URL linku:", "http://");
            if (linkURL) {
                var textarea = document.getElementsByName("content")[0];
                var startPos = textarea.selectionStart;
                var endPos = textarea.selectionEnd;
                var linkText = textarea.value.substring(startPos, endPos);
                var linkTag = '<a href="' + linkURL + '" style="color: #FAC898; text-decoration: underline;">' + linkText + '</a>';
                textarea.value = textarea.value.substring(0, startPos) + linkTag + textarea.value.substring(endPos);
            }
        }
		
		
</script>

</body>
</html>
edytowany 10x, ostatnio: Mariusz Kubielas
ccwrc
Jeśli nie korzystasz z żadnego systemu kontroli wersji to zacznij od zapoznania się z gitem https://git-scm.com/book/ms/v2/Getting-Started-About-Version-Control Nie usuwaj żadnego kodu jeśli nie wiesz co on robi. Usuń wrażliwe dane z kodu (hasła do bazy, itd.).
Mariusz Kubielas
Sorry, usunąłem hasło. Nie myślę.
ccwrc
Kolejny temat do zapoznania się: https://www.w3schools.com/sql/sql_injection.asp Jutro spojrzę na ten temat, jeszcze tylko pytanie: to twoja pierwsza strona internetowa, którą pomagał tworzyć ktoś inny?
Mariusz Kubielas
Sam ją tworzę, z pomocą chata gpt. To nie pierwsza strona.
Mariusz Kubielas
  • Rejestracja:3 miesiące
  • Ostatnio:15 dni
  • Postów:20
0

Teraz prosiłbym by ktoś pomógł mi zrobić przekierowanie automatyczne na strone z tematem po założeniu nowego.

Mariusz Kubielas
  • Rejestracja:3 miesiące
  • Ostatnio:15 dni
  • Postów:20
0

Udało mi się przekierować na stronę główną za pomocą <meta>

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)