PHP/mySQL, pierwsza zmienna działa, druga nie

problem jest taki, ze przy skrypcie nie wiadomo czemu, nie dziala prawidlowo zmienna login, mimo ze nizej wyswietla ja prawidlowo.

gdy ustawiam na sztywno nazwe wiersza zamiast $login to edytuje dane prawidlowo.

w czym jest problem? siedze nad tym juz druga godzine…

i nie jest to problem pola login, bo jest to varchar(70), wiec nie ma tu rozbieznosci typow…

nie zwraca tez zadnego bledu…

$login = $_POST['druzyna'];

...

$kapitan = $_POST['kapitan'];


$sql = "UPDATE teams SET kapitan = '$kapitan' WHERE nazwa='$login ";


$retval = mysql_query( $sql, $conn );

if(! $retval )

{

  die('Could not update data: ' . mysql_error());

}

echo "Updated data successfully\n";



<?php echo 'Zmienna: '.$login; ; ?> tu wyswietla prawidlowo zmienna

Mi się rzuca w oczy brak ’ po zmiennej login.

zle sie skopiowalo, niestety z ’ rowniez wiersz sie nie apdtejtuje…

wstawianie zamiast zmiennej $_POST[‘druzyna’] rowniez nie pomaga, a przypominam, ze jak na sztywno wstawie nazwe wiersza to dziala, wiec problem jest ewidentnie tu.

  1. Czy nazwy pół tabeli w MySQL są na pewno takie jak podałeś?

EDIT: dopisałem:

  1. Czy nazwy pól formularza ($_POST) są na pewno takie jak podałeś? Coś z tym ‘druzyna’ mam podejrzenia, że się mogłeś walnąć w nazwie?

  2. Stosuj dodatkowe “ciapki” w poleceniach MySQL - to bezpieczniejsze jest:

    $sql = "UPDATE teams SET kapitan = ‘$kapitan’ WHERE nazwa=’$login’ ";

  3. Czy na pewno $conn jest zmienną globalną (widoczną/dostępną w miejscu wywołania)? Usuń ją z mysql_query()) na wszelki wypadek. 5. Stosujesz dziwne sprawdzanie poprawności zapytań, krócej i prościej byłoby tak:

    mysql_query($sql) or die('Could not update data: ’ . mysql_error());

    echo “Updated data successfully\n”;

Bo die() zatrzymuje program.

  1. tak dokladnie sa takie same, inaczej by na sztywno zamiast zmiennej nie wstawialy sie

  2. mimo to nie dziala…

  3. tak jest zmienna globalna, tylko dlaczego takie pytanie, skoro nie zwraca bledu i poprawnie sie laczy?

4.poprawione

mimo wszystko nadal nie wyrzuca bledu, gladko przechodzi do ‘Updated data successfully’…

  1. Czy nazwy pól formularza ($_POST) są na pewno takie jak podałeś? Coś z tym ‘druzyna’ mam podejrzenia, że się mogłeś walnąć w nazwie?

sa poprawne, tak to echo normalnie by je zle wyswietlalo, a wyswietla dobrze…

niewiem na ile to moze byc przeszkoda, jesli to $_POST jest brane z poprzedniego formularza, ale to nie ma znaczenia przeciez zapisuje sie w zmiennej i echo dobrze wyswietla…

Dopisałem nowy pkt. 2.

Czy po

$login = $_POST['druzyna'];

potem już nie manipulujesz zmienną $login?

EDIT:

Z Twojej uwagi na początku wątku wynika, że coś źle odbierasz zmienną $login jako pole formularza POST. Wyświetl tę wartość na początku skryptu, może są w niej jakieś niedozwolone znaki?

Dokładnie jak mówisz, szukałem w zmiennej $login problemów, aczkolwiek wyświetlam ją na początku skryptu i jest prawidłowo wczytywana (zarówno z polskimi znakami, znakami specjalnymi i normalnymi).

Nie ruszam nic więcej z zmienną po tym jak przypisuje ją do pola druzyna…

Przy zapisie danych do bazy warto każde pole (pobrane z formularza) przepuścić przez funkcję mysql_real_escape_string(), ale to nie przez to masz problem.

Dodane 18.07.2013 (Cz) 0:16

Czy dobrze rozumiem? Jak podasz

$login = 'jakas_druzyna';

to się do bazy poprawnie zapisuje, a jak to samo w formularzu, to już nie?

dokladnie tak.

moim zdaniem jest to problem tego, ze $_POST[‘druzyna’] jest pobierane ze wczesniejszego formularza, ale w takim razie dlaczego dobrze czyta ja przez echo, a przy SQL juz nie…

Wypisz dane otrzymywane z formularza

print_r($_POST);

to może coś zauważysz (jakiś błąd u siebie)?

oczywiscie ze to robilem, wyswietla wszystkie dane prawidlowo.

Wciąż “szukam” przyczyny…

To pole w bazie nazywa się w końcu login , czy nazwa?

okej, problem byl w tym, ze po wyslaniu formularza drugi raz, zmienna login byla kasowana, dlatego sql nie czytal tego.

jeszcze raz poprostu dodalem do drugiego formularza nazwe druzyny :wink:

dzieki