Metoda POST przesyła same "jedynki" zamiast danych z formularza

Metoda POST przesyła same "jedynki" zamiast danych z formularza
Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Witam,
z góry piszę, że przeglądałem posty na tej stronie i takiego błędu nie znalazłem, jeśli gdzieś to już jest zamieszczone i rozwiązane, to proszę o usunięcie posta i informację, gdzie znajdę odpowiedzi :)

Piszę sobie małą aplikację na stronie (o tak dla ćwiczeń) i napotkałem problem. Otóż zrobiłem formularz do dodawania pracowników do bazy danych. Działał prima sort, a dzisiaj po odpaleniu local host (xampp pełna parą jak coś) jak chcę dodać użytkownika, to dodaje mi wszędzie 1 zamiast tego co było wpisane w oknie edycyjnym formularza :/ Dziwne to, bo z tym kawałkiem kody nie robiłem kompletnie nic, a na innych podstronach tej samej apki metoda POST działa dobrze :/ zrobiłem test z metodą echo i faktycznie ten konkretny formularz przesyła w każdym polu "1" (dwa pola typu text jedno radio). Ma ktoś pomysł co może być nie tak?

tu kod z formularzem:

Kopiuj
<body>
   <div class="container"> 
        <div class="login">
            <form action="adding.php?user=true" method="post">
                <input type="text" name="name" placeholder="nazwa użytkownika">
                <br /><br />
                <input type="text" name="pass" placeholder="hasło">
                <br /><br />
                <input type="radio" name="status" value="admin"> Admin <input type="radio" name="status" value="user"> User
                
                    <?php 
                       if(isset($_SESSION['blad'])){
                           echo $_SESSION['blad'];
                       }else{
                           echo "<br /><br />";
                       }
                    ?>                
                
                <input type="submit" value="dodaj pracownika"><?php echo '<input type="button" value="wstecz" onclick="window.location=(\'users.php\')" />'; ?>
            </form>
        </div>
    </div>
</body>

a tu z dodawaniem

Kopiuj
if(isset($_GET['user'])){
                    //sprawdza, czy wszystkie dane są przesłane i różne od pustego pola
                    if((isset($_POST['name'])) && ($_POST['name'] =! "") && (isset($_POST['pass'])) && ($_POST['pass'] =! "") && (isset($_POST['status'])) && ($_POST['status'] =! "")){               
                
                        $name = $_POST['name'];
                        $pass = $_POST['pass'];
                        $status = $_POST['status'];
                        unset($_SESSION['blad']);
                        echo $name;
                        echo $pass;
                        echo $status;
                        $sql = "INSERT INTO users (id, user, pass, status) VALUES (NULL, '$name', '$pass', '$status')";

                        if(!mysqli_query($polaczenie, $sql)){
                            echo "nie dodano";
                        }
                        $polaczenie->close();
                        header("refresh:0.05; url=users.php");
                    } else {
                        $_SESSION['blad'] = '<br/><span style="color:red">Nie podano wszystkich danych</span><br/>';
                        header("Location: adduser.php");
                        $polaczenie->close();
                    }
Miang
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1792
0

wrzuć html formularza

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Miang o to co w dev tools wyświetla Ci chodziło?
screenshot-20180929001709.png

axelbest
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 2255
0

Nie zmieniłeś przypadkiem typów kolumn w bazie?

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0
axelbest napisał(a):

Nie zmieniłeś przypadkiem typów kolumn w bazie?

nie, tym bardziej, że formularz do edycji użytkowników jest praktycznie identyczny i tam nie ma żadnych problemów. Sprawdzałem nawet, że czy po dodaniu użytkownika (w bazie 1, 1, 1), mogę go edytować z poziomu strony i działa ok :/ tylko w tym jednym formularzu na całej stronie się skopało i nie wiem dlaczego :( A dziwne, bo nie robiłem nic z kodem, który mógłby się chociaż otrzeć o działanie tego formularza :(

screenshot-20180929081932.png

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

W pliku gdzie kieruje metoda post z formularza wyswietl co zwraca cala tablica POST. Na samej gorze dodaj to:

Kopiuj
print_r(POST);
exit();

Jest tam kilka niezrozumialych rzeczy. Np
Po co sprawdzasz czy zmienna ma wartosc poprzez isset a tuz po tym sprawdzasz czy ta sama zmienna nie jest pusta. Skoro przejdzie przez isset znaczy z automatu ze nie jest pusta i posiada wartosc. Masło maślane.

Drugie. Wstawiasz submit a tuz po tym wstawiasz kod buttona przez echo. Po co przy pomocy parsera wstawiac zwykly button jakby mozna bylo zrobic w taki sam sposob jak submita to tez zagadka.

Kolejne to po co ten GET tam jest? Skoro sprawdzasz tez przez (i tylko to) isset czy ma wartosc ale nie jakas konkretną to po kiego to jest. Parametry w url śle się w konkretnym celu a tam nie widze zeby byl jaiś switch() czy sprawdzenie wartosci parametru
Jest tylko "czy jest"

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Miang tu masz źródło strony:

Kopiuj
<body>
   <div class="container"> 
        <div class="login">
            <form action="adding.php?user=true" method="post">
                <input type="text" name="name" placeholder="nazwa użytkownika">
                <br /><br />
                <input type="text" name="pass" placeholder="hasło">
                <br /><br />
                <input type="radio" name="status" value="admin"> Admin <input type="radio" name="status" value="user"> User
                
                    <br /><br />                
                
                <input type="submit" value="dodaj pracownika"><input type="button" value="wstecz" onclick="window.location=('users.php')" />            </form>
        </div>
    </div>
</body>

A i nie chyba nie wiem o co Ci dokładnie chodziło z parametrami przesłanymi w dev tools, ale jak sprawdziłem Network -> Headers -> From Data to jest ok i są tam dane, które wpisałem, ale strona nadal wypluwa mi 111

screenshot-20180929082713.png

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0
hopaj napisał(a):

W pliku gdzie kieruje metoda post z formularza wyswietl co zwraca cala tablica POST. Na samej gorze dodaj to:

Kopiuj
print_r(POST);
exit();

Jest tam kilka niezrozumialych rzeczy. Np
Po co sprawdzasz czy zmienna ma wartosc poprzez isset a tuz po tym sprawdzasz czy ta sama zmienna nie jest pusta. Skoro przejdzie przez isset znaczy z automatu ze nie jest pusta i posiada wartosc. Masło maślane.

Drugie. Wstawiasz submit a tuz po tym wstawiasz kod buttona przez echo. Po co przy pomocy parsera wstawiac zwykly button jakby mozna bylo zrobic w taki sam sposob jak submita to tez zagadka.

Kolejne to po co ten GET tam jest? Skoro sprawdzasz tez przez (i tylko to) isset czy ma wartosc ale nie jakas konkretną to po kiego to jest. Parametry w url śle się w konkretnym celu a tam nie widze zeby byl jaiś switch() czy sprawdzenie wartosci parametru
Jest tylko "czy jest"

Wpisałem print_r($_POST); i wyszło mi tak: "Array ( [name] => 321 [pass] => 321 [status] => admin )"

  1. No właśnie jak miałem tylko isset, to mi przepuszczało dalej jak miałem pola puste, tylko w polach radio działało to ok, dlatego dodałem sprawdzanie, czy są różne od "" i to pomogło
  2. Ten button to wstawiłem ot tak, bo jak już pisałem na samym początku robię to dla ćwiczeń, docelowo chciałem tego buttona w ogóle usunąć :)
  3. Ten $_GET tam jest, bo dalej są skrypty dodające np. dane do tabeli magazynów, itd. Chciałem to zrobić w jednym pliku i dzięki temu wiem, czy ma się dopalić skrypt od users, czy od czegoś innego, po prostu nie wkleiłem całego kodu.
Kopiuj
<?php 
    session_start();
    print_r($_POST);
    exit();
// sprawdza, czy użytkownik jest zalgowany, jeśli nie, odsyła do strony logowania
    if(!isset($_SESSION['zalogowany'])) 
    {
        header('Location: index.php');
        exit();
    }
    else
    {
        require_once "connect.php";

        $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
            // sprawdza, czy udało się połączyć z bazą danych
            if($polaczenie->connect_errno!=0)
            {
                echo "Error: ".$polaczenie->connect_errno;
            }
            else
            {
                // sprawdza, z jakiej podstrony przyszło zapytanie (id przesłane w headerze jako zmienna boolean)
                if(isset($_GET['user'])){
                    //sprawdza, czy wszystkie dane są przesłane i różne od pustego pola
                    if((isset($_POST['name'])) && ($_POST['name'] =! "") && (isset($_POST['pass'])) && ($_POST['pass'] =! "") && (isset($_POST['status'])) && ($_POST['status'] =! "")){
                        $name = $_POST['name'];
                        $pass = $_POST['pass'];
                        $status = $_POST['status'];
                        unset($_SESSION['blad']);
                        $sql = "INSERT INTO users (id, user, pass, status) VALUES (NULL, '$name', '$pass', '$status')";

                        if(!mysqli_query($polaczenie, $sql)){
                            echo "nie dodano";
                        }
                        $polaczenie->close();
                        header("refresh:0.05; url=users.php");
                    } else {
                        $_SESSION['blad'] = '<br/><span style="color:red">Nie podano wszystkich danych</span><br/>';
                        $polaczenie->close();
                        header("Location: adduser.php");
                    }
                // sprawdza, z jakiej podstrony przyszło zapytanie (id przesłane w headerze jako zmienna boolean)
                } else if(isset($_GET['pref'])){
                    //sprawdza, czy wszystkie dane są przesłane i różne od pustego pola
                   if((isset($_POST['nazwa'])) && ($_POST['nazwa'] != "") && (isset($_POST['kolor'])) && ($_POST['kolor'] != "") && (isset($_POST['material'])) && ($_POST['material'] != "") && (isset($_POST['bariera'])) && ($_POST['bariera'] != "") && (isset($_POST['ilosc'])) && ($_POST['ilosc'] != "") && (isset($_POST['dataprod'])) && ($_POST['dataprod'] != "") && (isset($_POST['godzinaprod'])) && ($_POST['godzinaprod'] != "") && (isset($_POST['maszyna'])) && ($_POST['maszyna'] != "") && (isset($_POST['magazyn'])) && ($_POST['magazyn'] != "")){
                        $nazwa = $_POST['nazwa'];
                        $kolor = $_POST['kolor'];
                        $material = $_POST['material'];
                        $bariera = $_POST['bariera'];
                        $ilosc = $_POST['ilosc'];
                        $dataprod = $_POST['dataprod'];
                        $godzinaprod = $_POST['godzinaprod'];
                        $maszyna = "HUSKY".$_POST['maszyna'];
                        $magazyn = $_POST['magazyn'];
                        $id_usera = $_SESSION['id'];
                        $czas = date('Y-m-d H:i:s');
                        unset($_SESSION['blad']);
                        $sql = "INSERT INTO preformy (id, nazwa, kolor, material, bariera, ilosc, dataprod, godzinaprod, maszyna, magazyn, user, czasmod) VALUES (NULL, '$nazwa', '$kolor', '$material', '$bariera', '$ilosc', '$dataprod', '$godzinaprod', '$maszyna', '$magazyn', '$id_usera', '$czas')";

                        if(!mysqli_query($polaczenie, $sql)){
                            echo "nie dodano";
                        }
                        $polaczenie->close();
                        header("refresh:0.05; url=logopreformmag.php");
                    } else {
                        $_SESSION['blad'] = '<br/><span style="color:red">Nie podano wszystkich danych</span><br/>';
                        $polaczenie->close();
                        header("Location: addpreform.php");
                    }
                }
            }
        
    }
?>

Miang
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1792
0

czyli sprawdzasz przez print_r($_POST); i jest dobrze? sprawdź jeszcze echo $sql

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

W takim razie formularz przesyla dane prawidłowo. Sprobuj wkleic to samo (tylko to teraz usun) w dalszej części kodu np tuz przed zapisem do bazy i potem po. Gdzies musi byc blad.
Sprawdzaj co sie wyswietla.

Ps. Nie jest mozliwe zeby isset przepuscil puste pole. Po to ta instrukcja jest wlasnie.

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0
Miang napisał(a):

czyli sprawdzasz przez print_r($_POST); i jest dobrze? sprawdź jeszcze echo $sql

INSERT INTO users (id, user, pass, status) VALUES (NULL, '1', '1', '1')

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Sprawdz czy masz wszystkie przywileje ustawione w bazie

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Ok dział, jak wywaliłem porównanie, czy jest różne od "" i zostawiłem samo isset w if'ie, ale nadal jest problem, że jak mam puste pole, to puszcza dalej :/

Miang
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1792
3

!= a nie =! , zrobiłeś przypisanie zaprzeczenia

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0
Miang napisał(a):

!= a nie =! , zrobiłeś przypisanie zaprzeczenia

Racja dobrodzieju! Dzięki Ci za wyłapanie błędu :) co nie zmienia faktu, że if powinien działać już przy isset :(

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0
Marcin Radczyk napisał(a):
Miang napisał(a):

!= a nie =! , zrobiłeś przypisanie zaprzeczenia

Racja dobrodzieju! Dzięki Ci za wyłapanie błędu :) co nie zmienia faktu, że if powinien działać już przy isset :(

Sprawdz sobie te kilka przykładów

Kopiuj
<?php

$a = "";
if(isset($a)) {
echo "istnieje";
} else {
echo "nie istnieje";
}

?>

Teraz Twoj przyklad ale wartosc zmiennej zmien na spacje. Na logike nie powinna zwracac wartosci ale jest. To samo sprawdz przy swojej zmiennej w polu formularza. przy samym sprawdzenu poprzez != "" daj spacje i formularz przejdzie

Kopiuj
<?php


$a = " ";
if($a != "") {
echo "ma wartosc";
} else {
echo "nie ma wartosci";
}
?>

chyba ze dasz chop()

Kopiuj
<?php


$a = " ";
if(chop($a) != "") {
echo "ma wartosc";
} else {
echo "nie ma wartosci";
}
?>

A teraz tak:

Kopiuj
<?php
$a = " ";
if(!empty(chop($a))) {
echo "!empty ma wartosc";
} else {
echo "!empty nie ma wartości";
}
?>
Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0
hopaj napisał(a):
Marcin Radczyk napisał(a):
Miang napisał(a):

!= a nie =! , zrobiłeś przypisanie zaprzeczenia

Racja dobrodzieju! Dzięki Ci za wyłapanie błędu :) co nie zmienia faktu, że if powinien działać już przy isset :(

Sprawdz sobie te kilka przykładów

Kopiuj
<?php

$a = "";
if(isset($a)) {
echo "istnieje";
} else {
echo "nie istnieje";
}

?>

Teraz Twoj przyklad ale wartosc zmiennej zmien na spacje. Na logike nie powinna zwracac wartosci ale jest. To samo sprawdz przy swojej zmiennej w polu formularza. przy samym sprawdzenu poprzez != "" daj spacje i formularz przejdzie

Kopiuj
<?php


$a = " ";
if($a != "") {
echo "ma wartosc";
} else {
echo "nie ma wartosci";
}
?>

chyba ze dasz chop()

Kopiuj
<?php


$a = " ";
if(chop($a) != "") {
echo "ma wartosc";
} else {
echo "nie ma wartosci";
}
?>

A teraz tak:

Kopiuj
<?php
$a = " ";
if(!empty(chop($a))) {
echo "!empty ma wartosc";
} else {
echo "!empty nie ma wartości";
}
?>

Hmm no chodzi o to, że mimo, że przesłałem formularz z niewypełnionymi polami, to warunek isset dawał true, dlatego później dodałem sprawdzanie !=. Ale spróbuje te przykłady od Ciebie, zobaczę co się stanie.

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

"nazwa=&kolor=&ilosc=&dataprod=&godzinaprod=&maszyna=&magazyn=" takie coś mi przesyła pusty formularz, czyli, że zmienne są ustawione, tylko puste tak? Znaczy w tym przypadku warunek isset jest bez sensu, czy jak? Bo mi osobiście podwójny warunek ((isset(zmienna)) && (zmienna != "")) też się nie podoba, no ale inaczej mi nie chce rychnąć :(

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
1

A w tych warunkach nie sprawdzasz dla tego formularza również metody POST? To co wkleiłeś sugeruje że formularza ma ustawioną metodę przesyłania GET

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0
jurek1980 napisał(a):

A w tych warunkach nie sprawdzasz dla tego formularza również metody POST? To co wkleiłeś sugeruje że formularza ma ustawioną metodę przesyłania GET

POST, wartości sprawdziłem w devtools :)

screenshot-20180929155558.png

hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0
Marcin Radczyk napisał(a):

"nazwa=&kolor=&ilosc=&dataprod=&godzinaprod=&maszyna=&magazyn=" takie coś mi przesyła pusty formularz, czyli, że zmienne są ustawione, tylko puste tak? Znaczy w tym przypadku warunek isset jest bez sensu, czy jak? Bo mi osobiście podwójny warunek ((isset(zmienna)) && (zmienna != "")) też się nie podoba, no ale inaczej mi nie chce rychnąć :(

Zastosuj empty() oczywiście w tym przypadku z negacją;

Kopiuj
if(!empty(chop($_POST['costam']))

chyba ze dasz

Kopiuj
if(empty(chop($_POST['costam'])) {
echo 'niew wypelniono pola';
// lub
$_SESSION['WARNING'] = "nie wypelniono pól';
header('.............');
exit();
}
tutaj dalej kod jesli caly formularz zostal wypelniony. Tutaj juz nie musisz dawac else
hopaj
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 67
0

Daj ten Twoj formularz. Zrodlo strony

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0
Miang napisał(a):

wrzuć html formularza

hopaj napisał(a):

Daj ten Twoj formularz. Zrodlo strony

Jest gdzieś na początku nawet chyba że 2 albo 3 razy wrzucony :)

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
0

Coś masz z tymi metodami zupełnie pomieszane w tych formularzach. Mylisz sam formularze i podstrony do jakich ma się odnosić kod.
To wycinek Twojego kodu:

Kopiuj
if(isset($_GET['user'])){
                    //sprawdza, czy wszystkie dane są przesłane i różne od pustego pola
                    if((isset($_POST['name'])) && ($_POST['name'] =! "") && (isset($_POST['pass'])) && ($_POST['pass'] =! "") && (isset($_POST['status'])) && ($_POST['status'] =! "")){   

I tak najpierw sprawdzasz czy w $_GET jest klucz user, a potem to co formularz przesłał przez POST. Teoretycznie tu nie powinno wejść, bo masz w samym formularzu metodę określoną jako POST. W screenach jednak w URL do tego formularza przesyłany jest jakiś user, który ma wartość true, a tworzysz to robiąc na sztywno w URL podanie takiego parametru.

Kopiuj
<form action="adding.php?user=true" method="post">

I się robi jakiś groch z kapustą, nie wiadomo co ma się gdzie i jaką metodą przesyłać.

Marcin Radczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Dla wszystkich. którzy pomagali muszę powiedzieć wielkie dziękuję, problem rozwiązany :) Przepraszam, że dopiero teraz odpisuje, ale jakoś w ferworze walki całkowicie zapomniałem o tym napisać. Pozdrawiam serdecznie

Jeśli dobrze pamiętam, to problemem było to, że się zgapiłem i zamiast != pisałem wszędzie =! i tu był pies pogrzebany.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.