Wątek przeniesiony 2019-04-11 23:46 z przez Patryk27.

PHP MySQL nie dodaje rekordów do bazy

Odpowiedz Nowy wątek
2019-04-11 22:48
0

Dobry wieczór,mam problem,pewnie błachy ale jednak a mianowicie INSERT nie dodaje mi rekordów bo bazy, chciałbym żeby to robił po naciśnięciu przycisku złóż zamówienie który defacto pojawia się tylko dla zalogowanych jednak gdy go nacisnę przechodzi mi do order.php ale w bazie nic nie zostaje dodane.Połączenie jest bo sprawdzałem. A 2 chciałbym żeby dodawało mi do bazy tyle rekordów ile jest wybranych produktów ale z tym samym id zamówienia albo chociaż klienta żebym później mogł dane zamówienie wyciągnać z tej bazy, na stornie wyswietla mi się to w osobnych linijkach jednak gdy chcę wyciągnąć wartości z $key to jest tam wartość tylko ostatniego wybranego produktu. oto mój kod koszyka i screen jak wygląda koszyk z kilkoma produktami ```

<?php 
 session_start();
    echo '<a href="powrot.php">Powrot do strony glownej</a></p>';
    print_r($_SESSION);
    print_r($_SESSION ['cena']);
    print_r($_SESSION['nazwa_czesci']);
    $_SESSION['sztuk']=$_POST['sztuk'];
    print_r($_SESSION ['sztuk']);
//session_destroy();
    echo "<html><head><meta http-equiv='content-type' content='text/html; charset=utf-8' /></head><body>";

    //require('szablon_koszyk.php');

?>
<div id="TRESC">
<?php
require_once"connect.php";

    if(!isset($_SESSION['koszyk'])) $_SESSION['koszyk']=array();        //sprawdzam czy jest koszyk

        echo 'Twoje wybrane produkty: '.'<br>';

    if(isset($_SESSION['czesc'])){
    $tmp=array('nazwa'=>$_SESSION['nazwa_czesci'],'cena'=>$_SESSION['cena'],'ilosc'=>$_SESSION['sztuk'], );

    if(array_key_exists($_SESSION['czesc'], $_SESSION['koszyk'])) echo 'Istnieje już w koszyku część o podanym id'.'<br>';
    else $_SESSION['koszyk'][$_SESSION['czesc']]=$tmp;
    }

        echo '<form action="usun.php" method="POST">';
        foreach ($_SESSION['koszyk'] as $sub => $key)
        echo 'nazwa czesci: '.$key['nazwa'].' ilosc sztuk: '.$key['ilosc'].'<font color="red">'.' cena za sztukę='.'</font>'.$key['cena'].' <input type="submit" name="" value="usuń"<br /><hr />';

        echo '</form>';

    //zliczam ile zostało produktów w koszyku
    foreach ($_SESSION['koszyk'] as $sub => $key){
        $iloscproduktow++;
    }

    // obliczam sumę produktów
    $suma=0;
    foreach ($_SESSION['koszyk'] as $sub => $key) $suma+=$key['cena']*$key['ilosc'];
        echo 'Łączna suma do zapłaty: ';
    $format_suma = number_format($suma, 2, '.', '');
        echo $format_suma.'<br>';
        echo 'Ilość produktów w koszyku: ';

    if($iloscproduktow==0){
        echo 'brak produktów'.'<br>';
    $_SESSION['sztuk']=$iloscproduktow;}
        else{
            echo $iloscproduktow;
    $_SESSION['sztuk']=$iloscproduktow;}
    require_once"connect.php";
            $polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
            $zapytanie = "INSERT INTO zamowienia (`idzamowienia`, `idCzesci`, `liczba_sztuk`, `kwota`) VALUES ('', '$_SESSION[czesc]', '$key[ilosc]', '$key[cena]')";

?>
</div>
<?php
    echo '<a href="czyszczenie.php">Wyczyść koszyk</a></p>';
    if(isset($_SESSION['zalogowany']))
    {
        require_once"connect.php";
            $polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
            $zapytanie = "INSERT INTO zamowienia (idzamowienia, idCzesci, liczba_sztuk, kwota, numer_faktury, rodzaj_zaplaty, data_transakcji, zaplacono) VALUES ('1', '$_SESSION[czesc]', '$_SESSION[sztuk]', '$_SESSION[cena]','1234','przelew','1997-01-02','tak')";
        echo '<a href="order.php">Złóż zamówienie</a></p>';
    }else{
        echo "Aby złóżyc zamówienie zaloguj się</a></p>";
        echo "Jeśli nie masz konta załóż je. Kliknij tuatj => ";
        echo '<a href="rejestracja.php">Rejestracja - załóż darmowe konto!</a>';
    }

?>

screenshot-20190411224848.png

edytowany 1x, ostatnio: furious programming, 2019-04-12 00:02

Pozostało 580 znaków

2019-04-11 23:28
0

a w którym miejscy wg Ciebie się te zapytania wykonują (wskaż konkretną linijkę)


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2019-04-12 09:35
0

Wykonuje mi się wszystko oprócz linijek 55 - 57 i 65-68, kod wysyłania tam wstawiłem dwa razy, żeby zobaczyć czy to nie przez ifa gdzieś blokuje ale kicha, próbowałem tego inserta przerabiać na x sposobów, wkładać gdzie indziej ale nic z tego, chciałbym żeby był w tych linijkach 65-68,w ifie tak żeby wysyłał się tylko po naciśnięciu przycisku bo ten przycisk jest dostępny tylko dla zalogowanych, żeby mi nie wysyłało się dla każdego i nie zasmiecalo bazy. Wyświetlanie produktów jeden pod drugim to linie 30-34. Dane z tego chciałbym sobie jakoś gromadzić lub zapisywać żeby potem tyle ile jest wyników (wierszy) z produktami tyle dodawało rekordów bo bazy z jednakowym idZamowienia najlepiej albo jednakowym idKlienta. Bo po złożeniu zamówienia chciałbym dane z tabeli usunąć i zapisać w innej

2019-04-12 11:21
0

Pomieszanie z poplątaniem...
Popraw przede wszystkim czytelność kodu. Pomijam już trzykrotne podpięcie connect.php itp.
Zapytanie z 66 linii wykona się za każdym przeładowaniem strony, gdy użytkownik będzie zalogowany, a to z 58 nawet gdy nie jest zalogowany.
Co do samego zapytania - Sprawdź przede wszystkim error.log, popraw quote'owanie zmiennych, wywal idzamowienia.
Można by długo pisać... Nigdy, absolutnie przenigdy nie wkładaj do bazy danych bezpośrednio z POSTa. Poczytaj o Post/Redirect/Get (https://en.wikipedia.org/wiki/Post/Redirect/Get)

Pozostało 580 znaków

2019-04-12 11:29
0

Dobrze by było gdyby to z 66 się wykonywało chociaż raz, problem w tym że właśnie tego nie robi, do 58 jest włożone tylko chwilowo, żeby sprawdzić czy tam nie zadziała, to nie jest jeszcze gotowy kod, poprawki mogę wprowadzać jak mi zacznie to działać dopiero. Chcę aby insert był w ifie tj w 66 linijce i wykonywał się tylko po naciśnięciu przycisku złóż zamówienie.

Pozostało 580 znaków

2019-04-12 11:49
0

Widzę, że to ślepy zaułek ;-)
Po linijce z zapytaniem wstaw

mysqli_query($polaczenie, $zapytanie);

Pozostało 580 znaków

2019-04-12 12:28
0

dodałem,próbowałem też $rezultat = $polaczenie->query($zapytanie); ale nie działa ani to ani to

zrób var_dump($rezultat). Co tam jest? - Łukasz Mikowski 2019-04-12 12:30

Pozostało 580 znaków

2019-04-12 12:56
0

VICTORY!!! Jest sukces ale połowiczny,dodaje mi rekordy do bazy tyle że jest jeszcze taki mały problem a mianowicie dodaje po każdym odswieżeniu strony dla zalogowanego użytkowinka nowe rekordy. Jak mam zrobić aby dodawało tylko raz,po naciśnięciu przycisku złóż zamówienie??? Co dziwne dodaje mi 2 razy mniej rekordów ile jest wybranych sztuk,dla 2 sztuk dodaje 2 rekordy po 1 sztuce ale dla 4 sztuk dodaje już 2 rekordy po 2 sztuki,nie wiem dlaczego.Jest jeszcze 1 mały problem który odkryłem po kilku próbach, a mianowicie nie dodaje mi do bazy po tych odswieżeniach wszystkich produktów a wyłącznie ostatni wybrany.

edytowany 2x, ostatnio: kamil21, 2019-04-12 13:04
Przeczytaj mój wcześniejszy post - Łukasz Mikowski 2019-04-12 13:02
Prześledź proszę krok po kroku co dodajesz do bazy. Jak wygląda zawartość $_POST. - Łukasz Mikowski 2019-04-12 13:07

Pozostało 580 znaków

2019-04-12 15:22
0

Prześledziłem,udało mi się jak dotąd zrobić tyle ze już dodaje tylko 1 rekord z prawidłową ilością sztuk ale nadal to jest tylko rekord ostatniego wybranego produktu,tych które wcześniej wylądowały w koszyku nie uwzględnia tj nie pamięta. Chciałbym je jakoś zapamiętać i dodawać tyle rekordów ile produktów jest w koszyku i ile linijek widzę na stronie tylko nie mam pojęcia jak to zrobić

Pozostało 580 znaków

2019-04-12 16:20
0

Czyli źle prześledziłeś algorytm. Zakomentuj sobie linię z wsadem do bazy. Podejrzyj zawartość zmiennych, które tam chcesz umieścić.
Wyświetlasz zawartość koszyka w pętli. Czemu nie zrobisz tego dla mysqli_query?

Pozostało 580 znaków

2019-04-12 16:35
0

A co mi da zapetlenie mysqli_query skoro w zmiennych mam tylko ostatnie wybrane cechy produktu jak ilosc, cena itp? Nie mam ich nigdzie zapamietanych, a chciałbym właśnie jakoś mieć, dla każdego produktu jego cechy, wtedy już włożenie chyba by się powiodło no chyba że źle myślę. Chciałbym żeby one jakoś gdzieś się zapisywaly, żebym potem mógł je wyciągnąć, tak jak się wyświetlają na stronie, wtedy każda linia na stronie to byłby nowy rekord w bazie. Jednak najbardziej istotne w tej chwili jest dla mnie to aby wartości nie dodawały się po każdym odświeżeniu strony.

Cały czas Ci piszę. Zobacz jak wygląda zawartość zmiennych, które wrzucasz do bazy. Zobacz zawartość zmiennej $_POST. Zastanów się w którym miejscu jest powiązanie między tymi dwoma miejscami... - Łukasz Mikowski 2019-04-12 17:14

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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