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

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:

<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

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();
                    }
0

wrzuć html formularza

0

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

0

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

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

0

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

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"

0

Miang tu masz źródło strony:

<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

0
hopaj napisał(a):

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

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.
<?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");
                    }
                }
            }
        
    }
?>

0

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

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.

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')

0

Sprawdz czy masz wszystkie przywileje ustawione w bazie

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 :/

3

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

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 :(

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

<?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

<?php


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

chyba ze dasz chop()

<?php


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

A teraz tak:

<?php
$a = " ";
if(!empty(chop($a))) {
echo "!empty ma wartosc";
} else {
echo "!empty nie ma wartości";
}
?>
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

<?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

<?php


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

chyba ze dasz chop()

<?php


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

A teraz tak:

<?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.

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ąć :(

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

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

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ą;

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

chyba ze dasz

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
0

Daj ten Twoj formularz. Zrodlo strony

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 :)

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:

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.

<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ć.

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.

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