• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Foreach wyświetla prawidłowo wynik ale nie zapisuje do bazy

Object Storage Arubacloud
0 głosów
300 wizyt
pytanie zadane 8 stycznia 2023 w PHP przez dee Początkujący (360 p.)

Witam.  Mam problem z kodem 
 

<?php
 
$getpost = ( $_POST )[ 'native-select' ];
$getpost2 = ( $_POST )[ 'native-select2' ];
$pieces = explode( ",", $getpost );
$pieces2 = explode( ",", $getpost2 );
if ( !empty( $_POST[ 'native-select' ] ) && isset( $_POST[ 'native-select' ] ) ) {
$nazwa_zawody = 'Firtst Timers 02.10.2022';
 echo '<h5>Firtst Timers 02.10.2022</h5>';
 foreach ( $pieces as $kategorie_wynik ) {
 $cena_jednostki = count($pieces)*150;
 $suma_cen = $cena_zawodow + $cena_jednostki;
   echo $kategorie_wynik;
  echo "<br>";
 }
echo '<hr>';
echo "$suma_cen zł";
echo '<hr>';
echo '<hr>';
 } else {
 echo '.';
 
}
 
 
?>

chodzi o  $kategorie_wynik jeżeli daje echo to ładnie my wyświetla linijka po linijce dane z formularza ale jak chce dodać do bazy to nie działa i nic sie nie oddaje 
 

<?php
 
$getpost = ( $_POST )[ 'native-select' ];
$getpost2 = ( $_POST )[ 'native-select2' ];
$pieces = explode( ",", $getpost );
$pieces2 = explode( ",", $getpost2 );
if ( !empty( $_POST[ 'native-select' ] ) && isset( $_POST[ 'native-select' ] ) ) {

$nazwa_zawody = 'Firtst Timers 02.10.2022';
echo '<h5>Firtst Timers 02.10.2022</h5>';
foreach ( $pieces as $kategorie_wynik ) {
$cena_jednostki = count($pieces)*150;

$suma_cen = $cena_zawodow + $cena_jednostki;
 
echo $kategorie_wynik;
echo "<br>";
$sql = "INSERT INTO `zamowienie`(`uid`, `zawody1`, `kategorie1`, `suma_zawody1`) VALUES ('$uid','$nazwa_zawody','$kategorie_wynik','$suma_cen')";
$result = $conn->query($sql);
 }
echo '<hr>';
echo "$suma_cen zł";
echo '<hr>';
echo '<hr>';
 } else {
 echo '.';
 }
 ?>

sprawdziłem wszystkie zmienne i przestaje si dodawać jak wpisuje $kategorie_wynik do linijki z zapisem bazy 

4 odpowiedzi

+2 głosów
odpowiedź 8 stycznia 2023 przez Wiciorny Ekspert (269,710 p.)
Masz 3 typy:
Upewnij się, że tabela zamówienie istnieje w bazie danych i ma odpowiednie kolumny o nazwach uid, zawody1, kategorie1 i suma_zawody1.

Sprawdź, czy zapytanie SQL jest prawidłowe i czy nie ma błędów składni. Możesz to zrobić, przepisując je do programu obsługującego bazy danych, takiego jak MySQL Workbench lub podobnego.

Jeśli skrypt PHP jest wywoływany po wysłaniu formularza, a połączenie z bazą danych jest poprawne i zapytanie SQL jest prawidłowe, a nadal nic się nie dzieje, sprawdź, czy nie ma błędów PHP. Możesz to zrobić, wyświetlając błędy za pomocą funkcji error_get_last().

Generalnie jeśli to działa, to istnieje duża szansa, że sprawdź czy dane są odpowiednie w zakresie tego co zapisujesz do bazy danych I jeszcze upewnij się, że formularz wysyła dane metodą POST i że zmienne $_POST['native-select'] i $_POST['native-select2'] są poprawnie przekazywane do skryptu PHP. Możesz to zrobić, wyświetlając zawartość tych zmiennych za pomocą var_dump($_POST['native-select']) i var_dump($_POST['native-select2']).

Sprawdź jeszcze w takim razie zmienną $kategorie_wynik
var_dump($kategorie_wynik)
Dodatkowo, czy zmienna $kategorie_wynik nie zawiera żadnych znaków specjalnych, takich jak apostrofy lub ukośniki, które mogą spowodować błędy w zapytaniu SQL np używając funkcji mysqli_real_escape_string() do przefiltrowania zmiennej $kategorie_wynik przed wstawieniem jej do zapytania SQL.
2
komentarz 8 stycznia 2023 przez dee Początkujący (360 p.)
Faktycznie okazało sie z w nazwach kategorii zawodów jest apostrof "MEN'S MR CLASS 4" problem rozwiązany dziękuję Ci za pomoc
komentarz 8 stycznia 2023 przez Wiciorny Ekspert (269,710 p.)
fajnie, że się udało.
1
komentarz 8 stycznia 2023 przez obl Maniak (51,280 p.)

@dee, a i kolejny powód żeby używać bindowania.

+1 głos
odpowiedź 8 stycznia 2023 przez obl Maniak (51,280 p.)

Używasz PDO do połączenia z bazą? Jeżeli tak to używaj bindowania do dodawania danych do bazy, inaczej prosisz się o kłopoty. Chodzi o tą linijkę:

$sql = "INSERT INTO `zamowienie`(`uid`, `zawody1`, `kategorie1`, `suma_zawody1`) VALUES ('$uid','$nazwa_zawody','$kategorie_wynik','$suma_cen')";

Tu masz dokumentację: https://www.php.net/manual/en/pdostatement.bindparam.php

A co do problemu to sprawdź czym jest $results jeżeli jest false to znaczy, że zapytanie się nie powiodło. I spróbuj użyć tego do sprawdzenia gdzie szukać przyczyny: https://www.php.net/manual/en/pdo.errorinfo.php

A tu masz przykład jak używać PDO z bindowaniem: https://www.obliczeniowo.com.pl/693

P.S.
Tylko nie wiem, czy ty PDO używasz do połączenia z bazą ale chyba tak.

0 głosów
odpowiedź 8 stycznia 2023 przez SzkolnyAdmin Szeryf (86,360 p.)
Jakieś komunikaty błędów? Gdzie masz połączenie z bazą?
komentarz 8 stycznia 2023 przez dee Początkujący (360 p.)
php ni wypluwa żadnych błędów. Połączenie z bazą jest prawidłowe ponieważ zapisuje inne rzeczy i wszystko dodaje sie prawidłowo. dodałem raportowanie błędów z sql i tez nic nie wyświetla :(
komentarz 8 stycznia 2023 przez SzkolnyAdmin Szeryf (86,360 p.)
edycja 8 stycznia 2023 przez SzkolnyAdmin
Spróbuj wyświetlić zapytanie na stronie zanim wyślesz je do bazy - zobaczysz, czy ma prawidłową budowę. Spróbuj również "ręcznie" dodać wyświetlony rekord do bazy np. w panelu phpMyAdmin. Może problem tkwi po stronie bazy - jaka jest struktura rzeczonej tabeli?
komentarz 8 stycznia 2023 przez dee Początkujący (360 p.)

Jak podmieniam w 
 

$sql = "INSERT INTO `zamowienie`(`uid`, `zawody1`, `kategorie1`, `suma_zawody1`) VALUES ('$uid','$nazwa_zawody','$kategorie_wynik','$suma_cen')";

$kategorie_wynik na 'test' do dodaje mi dobrze i tyle rekordów ile jest w tablicy $getpost
 

0 głosów
odpowiedź 8 stycznia 2023 przez dee Początkujący (360 p.)
Problem został rozwiązany dziękuje wszystkim za pomoc

Podobne pytania

+1 głos
1 odpowiedź 117 wizyt
0 głosów
1 odpowiedź 809 wizyt
pytanie zadane 11 maja 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
2 odpowiedzi 110 wizyt
pytanie zadane 1 stycznia 2023 w PHP przez dee Początkujący (360 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...