[MySQL] - Jak dodać rekord do tabeli?


(jacko1998) #1
$username = @$_POST['username'];$pass = @$_POST['password'];mysql_query("INSERT INTO `users` (`id`, `username`, `password`) VALUES (NULL, '$username', '$pass')");nbsp; [/code]

Niby się dodaje, ale tylko id(AI) ale login i pass już nie :( Nie wiem jak to naprawić. Proszę o pomoc ! Dzięki !

-- [b]Dodane 23.10.2013 (Śr) 7:56[/b] --


[code=php]echo "$username and $pass"; 

To mi wypisuje co wpisałem do pola login i password, więc nie wiem dlaczego się do bazy nie dodaje :-x

(kostek135) #2

Nie rób tak jak powyżej bo narażasz się na SQL Injection.

Wyobraź sobie, co się stanie dla takich danych w $pass:

'); DROP DATABASE; --

Poza tym przeciętnie pamiętam dialekt MySQL, ale

http://www.w3schools.com/php/php_mysql_insert.asp

http://www.tutorialspoint.com/php/mysql_insert_php.htm

w obu tych linkach nie widzę odwróconych apostrofów.

Jeśli jednak to nie pomoże wykonaj zapytanie przez jakiegoś managera, aby otrzymać szczegółową informację o błędzie.

Dodatkowo pola uzupełniane generowaną sekwencją, najzwyczajniej szybciej pomijać w zapytaniu, niż pisać ten null.


(Kerter86) #3

Próbowałeś bez tej małpy przed postem? Szczerze mówiąc nigdy z czymś takim się nie spotkałem, może mało widziałem jeszcze. No i jak kolega podpowiada zabezpiecz sobie przed SQL Injection, pełno informacji na necie znajdziesz o tym. Ewentualnie wyświetl sobie zapytanie przed wysłaniem go do bazy, może gdzieś jakaś literówka się wkradła.

$zap = "INSERT INTO `users` (`id`, `username`, `password`) VALUES (NULL, '$username', '$pass')";

print $zap;

mysql_query($zap);

(jacko1998) #4

Jak jest bez małpy(@) to pokazuje ostrzeżenie o nieznanej zmiennej, a po dodaniu @ już nie. Może wkleję całą instrukcję:

        if(isset($_POST['reguser'])){$_POST['username'])){$errors[] = 'You have to type your username !';

(kostek135) #5

Słuchaj, przecież tu nie masz przepisania na zmienne. Powyżej miałeś. Możesz podać komunikat błędu, wyciszanie błędów to nie jest rozwiązanie problemu.

@Kerter

Zdecydowanie mało widziałeś. "@" służy do wyciszania warningów.


(jacko1998) #6

3485271000_1382536079_thumb.jpg

    if(isset($_POST['reguser'])){$username)){$errors[] = 'You have to type your username !';

(kostek135) #7

Podaj cały kod pliku. PHP + HTML.


(jacko1998) #8

(kostek135) #9

Ehh jaki syf i czarna rozpacz.

  1. Duże partie HTML powinny być pisane z ucieczką od PHP (lub patrz punkt 2). Dzięki temu IDE ma szanse to zwalidować + jest szybciej, po co przetwarzać statyczne fragmenty? Poniżej przykład obrazujący, nie jest to duży kawałek, ale twój już tak.

    <?php

    $zmienna="pies";

    if(zmienna==="pies") {

    ?>

    JESTEM PSEM

    <?php

    }

    ?>

  2. Oddzielaj HTML od PHP, to jest w sumie główny powód twoich warningów

  3. Jeśli klikniesz submit, to nigdy nie dojdziesz, do instrukcji SQL. Twój rekord nie dodaje się podczas submita, ale podczas wejścia na stronę (kiedy wszystkie zmienne są nie istniejące, a dla php odwołanie się do nich generuje warning + wstawia pusty ciąg, stąd dodają ci się puste pola). Wiesz jak działa if i isset?