Wątek przeniesiony 2016-03-09 20:21 z PHP przez dzek69.

Tworzenie ciasteczka mimo braku wykonania skryptu

0
             <script>
document.addEventListener('visibilitychange', quitExam);
function quitExam() {
<?php 
setcookie('oszust',time(),time()+10*365*24*3600);
$nick = $_POST['nick'];
    $connection = @mysql_connect('', '', '') 
    or die('Brak połączenia z serwerem MySQL'); 

    $db = @mysql_select_db('', $connection) 
    or die('Nie mogę połączyć się z bazą danych'); 
$ins = @mysql_query("INSERT INTO oszust SET nick='$nick', Pytanie='1'"); 

    mysql_close($connection); 
    ?>
document.body.innerHTML = "Egzamin przerwany z powodu oszustwa!";
}
setInterval('document.getElementById("ok").click()',120*1e3)
</script>

Dlaczego za każdym razem jest tworzone ciasteczko "oszust" skoro nawet nie zmieniam karty?

0

wytłumacz mu ktoś, że nie może wpychać kodu php do js

0

Więc w jaki sposób to rozwiązać? Jakoś coś muszę zrobić żeby odwiedzający nie mógł wrócić.

0

Dobra jestem głupi, utworzę ciasteczko przez JS. Ale jakby ktoś mógł mi doradzić jak dodać wpis do bazy danych po wykonaniu tego skryptu

0

Jak widzę coś takiego @mysql_select_db to mi się nóż otwiera w kieszeni. Ludzie jak się uczycie jakiegoś języka to patrzcie czy meteriały przypadkiem nie są z 2005 :/

Użyj tego np. http://www.slimframework.com/
Jest to bardzo prosty microframework, który idealnie nada się do stworzenia prostej aplikacji obejmującej napisanie testu. Slim odwali za Ciebie brudną robotę np. z routingiem (czyli w zależności pod jaki url sie udasz różne rzeczy się dzieją) lub np. pomoże Ci zwalidować czy ktoś już zdał test czy nie bo jest coś takiego jak middleware, czyli byt wywoływany przed i po routingu (mogę się mylić więc sobie doczytaj).

Popełniasz książkowe błędy.

$ins = @mysql_query("INSERT INTO oszust SET nick='$nick', Pytanie='1'"); 

Wyobraź sobie, że wpiszę teraz, że ktoś poda jako nick np. ;NOW();DROP TABLE oszust; i w rezultacie może podejść do egzaminu jeszcze raz bo "wstrzyknie" Ci swój kod. W zasadzie dajesz mu darmowy dostęp do bazy. Użyj PDO., a najlepiej np. tego https://github.com/mdandy/PHP-DAL. DAL to Data Access Layer, czyli warstwa aplikacji odpowiedzialna za dostęp do bazy danych (czy tam innego źródła tych danych). Tutaj tylko musisz wiedzieć jak wykonać zapytanie (w pliku test.php masz wszystko):

DAL::connect(); // musisz wywołać, żeby utworzyć instancję tej klasy, to chyba singleton nie chce mi sie sprawdzic
$ret = DAL::insert("oszust", array('nick', 'pytanie'), array($nick, 1)); // "INSERT INTO oszust SET nick='$nick', Pytanie='1' tyle, że dużo bezpieczniejsze bo nie pozwoli wstrzyknąć zapytania gdyż autor używa PDO

1 użytkowników online, w tym zalogowanych: 0, gości: 1