[PHP]Formularz + Mysql Update

0

Witam,

Mam pewien problem odnosnie formularza i update do bazy.

Więc zrobilem taki formularz z dwoma polami. Chce aby po kliknieciu w link/button dane zostaly przeslane i wykonanie update tego co wpisalem w pole formularza. Problem jest w tym że nie chce mi wysyłac do bazy zmienionej zmiennej. Oto ten kod:

<? if(mysql_num_rows($pilkarzyk) > 0) {
    while($p = mysql_fetch_assoc($pilkarzyk)) {
		?>
        <table width="95%" border="1" align="center" cellpadding="3" cellspacing="3" class="forms">
          <tr>
         <td>Piłkarz:</td>
        <td><input name="pilkarz" type="text" value="<? echo $p['imienazw']; $id = $_GET['id'];?>" /></td>
        <td>Gole:</td>
        <td><input name="golle" type="text" value="<? echo $p['gole'];?>" /></td>
        </tr>
        </table>
        <?
		}
		?><input name="update" type="submit"  value="wyślij" /></form><?
}
$pilkarz = $_POST['pilkarz'];
$gole = $_POST['golle'];
echo $pilkarz;
echo $gole;
if(isset($_GET['update'])) {
	$wrzuc = @mysql_query("UPDATE `strzelec` SET `gole`=$gole WHERE `id`=$id");
if($wrzuc) echo " Rekord został dodany poprawnie";
}
?>

Mam teraz wielką prośbe by ktoś pomógł mi to przerobic. Będe wdzieczny za kazde rady

0

prostytutka mać, kto was tak uczy pisać?

$sql = 'UPDATE strzelec SET gole = ' . $gole . ' WHERE id = ' . $id;
$result = mysql_query($sql);
if (!$result) { exit('Błąd w zapytaniu MySQL:<br><pre>' . $sql . '</pre><br>' . mysql_error()); }

Wszyscy się uczą PHP podglądając kod PHP Fusion albo osCommerce?

echo " wtf";

Echo nie jest żadną "niedorobioną" funkcją, żeby argumentów nie pisać w nawiasach (strasznie pogarsza czytelność):

echo('wtf');

Do tego: po co "zamałpiłeś" tą funkcję mysql_query skoro ci nie działa? Chyba właśnie trzeba odwrotnie zrobić i przedebugować.

0

@Demonical Monk:
Cooo? Sugerujesz, że opuszczanie nawiasów przy echo jest be? :o Muszę przyznać, że trochę mnie żeś tym zdziwił!

Z początku myślałem, że piszesz odwrotnie (tj. by NIE stosować nawiasów), ale nie. W końcu coś Ci się w kodzie autora nie podoba, a opuszcza on nawiasy przy echo. Czyli musisz uważać, że te nawiasy trzeba koniecznie wstawić, skoro taki jesteś... oburzony (bo tak to wygląda, gdy piszesz "kur*** mać, kto was tak uczy pisać?").

Demonical Monk napisał(a)

Echo nie jest żadną "niedorobioną" funkcją, żeby argumentów nie pisać w nawiasach

Ależ echo jest niedorobioną funkcją! Albo nie: echo w ogóle nie jest funkcją! To konstrukcja języka.

Zobacz, takie coś zadziała, gdy fff jest funkcją:

$func_ptr = 'fff';
$func_ptr('Jakiś tam argument');

Powyższy kod wywoła funkcję fff. Ale poniższy kod już nie zadziała:

$func_ptr = 'echo';
$func_ptr('Jakiś tam argument');

To wcale nie wyświetli napisu Jakiś tam argument, bo echo NIE jest funkcją.

Co więcej, nawet w manualu PHP z tego co widzę zapisują echo bez nawiasów. Prawdę mówiąc, ja też tak robiłem w większości projektów, zgodnie ze standardami kodowania i wcale nie wydawało mi się to dziwne. A na pewno nie tak złe, by mówić o tym w kontekście "k-mać". Uznaję to raczej za kwestię osobistych preferencji. Ale to, że ktoś ma inne osobiste preferencje nas nie powinno oburzać. Jeśli chodzi o formatowanie kodu, to bywają zasady jedyne słuszne (np. umieszczanie klamer w odpowiedniej linii w języku JavaScript), ale w innych przypadkach możliwość manewru jest spora.

Naturalnie, jeśli masz jakieś źródła na temat konieczności stosowania tych nawiasów, takie z jakimiś argumentami/uzasadnieniami, najlepiej przez jakichś bardzo dobrych koderów, to chętnie bym je przeczytał i przeanalizował...

0

Wstawiłem ten kod, lecz ani nie dodaje do bazy ani nie wyświetla zadnego bledu po prostu odswieza sie i wraca liczba do poprzedniego stanu, tak to wyglada http://www.bedziegit.cba.pl/blabla.php

Proszę o pomoc.</url>

0
bswierczynski napisał(a)

Ależ echo jest niedorobioną funkcją! Albo nie: echo w ogóle nie jest funkcją! To konstrukcja języka.

No już nie zagłębiajmy się w to że to część składni, ale mimo wszystko można to wszystko pisać CZYTELNIE.

W każdym razie, już zostawmy opuszczanie nawiasów w echo, ale wrzucanie zmiennych na chama do stringa:

echo "Witaj, $user!";

I wrzucanie MySQL bez żadnego debuga, jeszcze celowo "uciszonego":

$result = @mysql_query($sql);

Nie wygląda dobrze... Potem taki usiądzie do poważnego projektu, zamiast cudzysłowu walnie apostrof i wyjdzie coś takiego:

user image

Żeby w przeciwieństwie do ciebie wnieść coś do tematu, zapytam.
Skąd w pętli znalazło się to:

<td><input name="pilkarz" type="text" value="<? echo $p['imienazw']; $id = $_GET['id'];?>" /></td>

$id zawsze będzie niezdefiniowane, bo formularz wysyłasz metodą POST.
Oprócz tego:

if(isset($_GET['update'])) {

Nigdy ten warunek się nie spełni, z tego samego powodu co wyżej. Formularz wysyłasz POSTem:

<form action="blabla.php" method="post">
0

No tak nie zauwazylem tego bledu, lecz teraz mam taki problem ze update da sie zrobic tylko z ostatnim polem. Mysle ze to dlatego iz w petli jest ten formularz i input name do tych utworzonych jest taki sam i potem pobieram dane z ostatniego. Tylko jak zrobic by kazdy utworzono nowy input mial nowa zmienna lub jakas funkcja ktora umozliwia zapis z tablicy czy coś. Oto dotychczasowy kod i moja prosba dalszej pomocy :

<?
$connection = @mysql_connect('mysql.cba.pl', 'megatyper_cba_pl', 'negra593')
or die('Brak połączenia z serwerem MySQL');
mysql_query("SET NAMES 'utf8'");
$db = @mysql_select_db('megatyper_cba_pl', $connection)
or die('Nie mogę połączyć się z bazą danych');
$pilkarzyk = mysql_query("SELECT * FROM `strzelec` ORDER BY `gole` DESC LIMIT 10")
or die('Błąd zapytania');


if(mysql_num_rows($pilkarzyk) > 0) {
    while($p = mysql_fetch_assoc($pilkarzyk)) {
		?>
        <table width="95%" border="1" align="center" cellpadding="3" cellspacing="3" class="forms">
          <tr>
         <td>Piłkarz:</td>
        <td><input name="pilkarz" type="text" disabled="disabled" value="<? echo $p['imienazw']; $id = $p['id'];?>" /></td>
        <td>Gole:</td>
        <td><input name="golle" type="text" value="<? echo $p['gole'];?>" /></td>
        </tr>
        </table>
        <input name="update" type="submit"  value="wyślij" /></form><?
		}
}
$pilkarz = $_POST['pilkarz'];
$gole = $_POST['golle'];
if(isset($_POST['update'])) {
	$sql = 'UPDATE `strzelec` SET `gole` = '.$gole.' WHERE id = '.$id;
$result = mysql_query($sql);
if (!$result) { exit('Błąd w zapytaniu MySQL:<br><pre>' . $sql . '</pre><br>' . mysql_error()); }
}
?>
0

No bo masz:

<td><input name="pilkarz" type="text" disabled="disabled" value="<? echo $p['imienazw']; $id = $p['id'];?>" /></td>

W pętli, tak więc $id po wszystkich operacjach w while() będzie wynosiło ID ostatniego rekordu.

0

Siedze przed tym monitorem i nie umiem nic wymyslec by temu zapobiec, mozesz mnie oswiecic jakims prostym kodem ? : )

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