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

question-closed Aktualizacja danych w bazie za pomocą PHP nie działa.

0 głosów
68 wizyt
pytanie zadane 7 stycznia w PHP, Symfony, Zend przez użytkownika Corleone97 Początkujący (350 punkty)
zamknięte 8 stycznia przez użytkownika Corleone97

Witajcie, hakjerzy :D To mój pierwszy post tutaj, także pozdrawiam wszystkich, którzy chcą mi pomóc ;) Otóż chcę zrobić prosty mechanizm przelewania wirtualnych pieniędzy pomiędzy kontami. Mam bazę, tam między innymi numer konta i stan konta. Niestety skrypt, który pobiera dane z formularza przelewu i powinien zauktualizować dane w bazie wedle uznania nie działa :/ Ktoś zna przyczynę? Po wciśnięciu submita wyświetla oczywiście że przelew wykonano ale w bazie brak zmian. Oto mój kod tego skryptu:

<?php
session_start();

$odbiorca = $_POST['odbiorca'];
$kwota = $_POST['kwota'];
$nr_konta = $_SESSION['nr_konta'];

$kwota = floatval($kwota);

$polaczenie = @new mysqli($db_host,$db_user,$db_pass,$db_name);


if($polaczenie->connect_errno!=0)
	{
		echo "ERROR ".$polaczenie->connect_errno;
	}
else
{
$polaczenie->query("UPDATE bank.klienci SET stan_konta=stan_konta+$kwota WHERE idklienta = $odbiorca");
$polaczenie->query("UPDATE bank.klienci SET stan_konta=stan_konta-$kwota WHERE idklienta = $nr_konta");


$polaczenie->close();
header("Location: przelew.php");
$_SESSION['przelew_wykonany'] = true;
}
?>

 

komentarz zamknięcia: Rozwiązałem problem
komentarz 8 stycznia przez użytkownika grollajt Bywalec (2,460 punkty)

Usun @ z:

$polaczenie = @new mysqli($db_host,$db_user,$db_pass,$db_name);

 

Zapyanie jakies dziwne nie jestem pewien czy istnieje mozliwosc dodawania tak jak to robisz ale jak juz zmienna do zapytania dodaje sie na tekiej zasadzie :
 

$polaczenie->query("UPDATE bank.klienci SET stan_konta=stan_konta+."$kwota". WHERE idklienta = ."$odbiorca);

To chyba powinno pomoc
 

komentarz 8 stycznia przez użytkownika Corleone97 Początkujący (350 punkty)
Niestety, nic to nie pomogło :/
komentarz 8 stycznia przez użytkownika Chess Mądrala (5,160 punkty)

Zamiast bank.klienci powinno być chyba bank,klienci. Przecinek zamiast kropki.

2
komentarz 8 stycznia przez użytkownika Arkadiusz Waluk Mędrzec (158,160 punkty)
$polaczenie->query("UPDATE bank.klienci SET stan_konta=stan_konta+."$kwota". WHERE idklienta = ."$odbiorca);

Przecież to głupota, wyrzuci błędy składni PHP bo kropki nie wykonują konkatenacji jak powinny a są tekstem w zapytaniu.

Zamiast bank.klienci powinno być chyba bank,klienci. Przecinek zamiast kropki.

I to też głupota, tak można zapisać i oznacza to tabele w określonej bazie. Nie jest co prawda koniecznie, ale nie powinno powodować błędu.

 

Napisałeś, że jakiś komunikat wyświetla się normalnie, czyli jak rozumiem cały kod wykonuje się normalnie tylko zapytanie do bazy nie działa.

Użyj więc http://php.net/manual/en/mysqli.error.php (może być np. po wykonaniu każdego query) aby wyświetlić ewentualne błędy zwrócone przez bazę (tylko nie zapomnij na czas testów usunąć przekierowania bo nic nie zobaczysz).

komentarz 8 stycznia przez użytkownika grollajt Bywalec (2,460 punkty)
edycja 8 stycznia przez użytkownika grollajt

No faktycznie z konkatenacja to poszalalem :D 
dla potomnych o cos takiego mi chodzilo:
 


$polaczenie->query('UPDATE bank.klienci SET stan_konta=stan_konta + '.$kwota.' WHERE idklienta = '.$odbiorca);

 

2 odpowiedzi

0 głosów
odpowiedź 8 stycznia przez użytkownika Assasz Gaduła (4,830 punkty)
A jaką tabelę chcesz zaktualizować? bank.klienci nie jest poprawne o ile nie chcesz zaktualizować tabelę klienci z systemu bazodanowego o nazwie bank.
komentarz 8 stycznia przez użytkownika Corleone97 Początkujący (350 punkty)
chcę zaktualizować tabelę klienci,znajdującą się w bazie bank. Wiem że samo 'UPDATE klienci' by starczyło, ale dopisałem ten bank bo już nie wiem co jest nie tak.
komentarz 8 stycznia przez użytkownika Assasz Gaduła (4,830 punkty)
Przede wszystkim wywaliłbym tą małpę i obsłużył ewentualne wyjątki za pomocą try catch. Sprawdził, czy nie wyświetlają się błędy, a potem spróbował wyświetlić wszystkie zmienne, czy aby na pewno są poprawne. Jeśli wstawiasz do zapytania zmienną zawierającą string to musi być ona w single quote. Możesz też przetestować te zapytanie bezpośrednio w bazie (phpmyadmin zakładka sql), podstawić przykładowe dane i zobaczyć, czy nie ma błędów.
0 głosów
odpowiedź 8 stycznia przez użytkownika Corleone97 Początkujący (350 punkty)
Panowie, pierwszy post tutaj i od razu wyszło że jestem idiotą. Chodziło mi o pole 'nr_konta', a w zapytaniu wpisałem 'idklienta'. Głupi błąd a parę godzin poszło i nie wróci. Mimo wszystko dzięki wszystkim za pomoc :D

Podobne pytania

0 głosów
2 odpowiedzi 116 wizyt
pytanie zadane 25 sierpnia 2015 w PHP, Symfony, Zend przez użytkownika daman13m Nowicjusz (160 punkty)
+1 głos
2 odpowiedzi 79 wizyt
pytanie zadane 25 września 2015 w PHP, Symfony, Zend przez użytkownika Dr. Zawijas Użytkownik (500 punkty)
0 głosów
1 odpowiedź 117 wizyt
pytanie zadane 22 lipca 2016 w PHP, Symfony, Zend przez użytkownika Koncha Bywalec (2,880 punkty)
...