Dariusz Rodziewicz

Dariusz Rodziewicz Specjalista
Informatyk ds.
Systemów Medycznych,
Przedsięb...

Temat: Problem z odczytaniem zmiennej

Witam

Dlaczego w niżej zamieszczonym kodzie, wartość zmiennej l nie jest dostępna po naciśnięciu przycisku OK ? Proszę o pomoc w znalezieniu błędu. Docelowo, chciałbym, aby po wyświetleniu wybranych rekordów, istniała możliwość wyboru danego wpisu i dokonania jego edycji.
Pozdrawiam

Darek

<?
if (isset($_POST['szukaj']))
{
if ((empty($szuk_nazwisko)) and (empty($szuk_imie)))
{
$szuk_nazwisko = '%';
$szuk_imie = '%';
}
$szuk_nazwisko = $szuk_nazwisko.'%';
$szuk_imie = $szuk_imie.'%';
$pyt = "select * from fs.sl_osoba
where nazwisko like '$szuk_nazwisko'
and imie like '$szuk_imie'
and status = '0'";
$wyn = mysql_query($pyt);
unset($szuk_nazwisko);
unset($szuk_imie);
$x = mysql_num_rows($wyn);
}
if (isset($_POST['ok']))
{
if (!empty($l))
{
echo'Wybrałeś pozycję nr: ';echo $l;
}
else
{
echo'Coś jest nie tak jak trzeba';
}
}

echo'
<form method="POST" enctype="multipart/form-data" action="osoba_edyt.php" name="osoba_edycja">
<br /><br />
<table>
<tr>
<td>Nazwisko</td>
<td>Imię</td>
</tr>
<tr>
<td><input type="text" name="szuk_nazwisko" size="25" maxlength="35"></td>
<td><input type="text" name="szuk_imie" size="25" maxlength="35"></td>
</tr>
</table>

<input type="submit" name="szukaj" value="Szukaj">';

if ($x > 0)
{
echo $pyt;
echo' Ilość rekordów spełniających kryterium zapytania: ';echo $x;

echo'
<table>
<tr>
<td> </td>
<td>Nazwisko</td>
<td>Imię</td>
...
</tr>';
$l = 0;
while ($wiersz = mysql_fetch_array($wyn, MYSQL_NUM))
{
echo'
<tr>
<td><input type="radio" name="osoba" value="';$wiersz[$l];echo'" /></td>
<td>';echo $wiersz[2];echo'</td>
<td>';echo $wiersz[1];echo'</td>
...
<td>';echo $l;echo'</td>
</tr>';
$l++;
}
echo'
</table>
<input type="submit" name="ok" value="OK">';
}
echo'

</form>';
?>
Bogdan Wróbel

Bogdan Wróbel Independent Hybris
Consultant

Temat: Problem z odczytaniem zmiennej

(po pobieżnym przeglądnięciu kodu)
A czemu miałaby być dostępna? Nie jest nigdzie wysyłana do serwera, a PHP wykonuje się po stronie serwera. Jej wartość jest ustawiana przy wyświetlaniu wyników, ale dopiero po bloku if (empty($l)).

Poza tym, nawet gdyby była wysyłana, to byłaby dostępna pod $_POST[] albo $_GET[] albo $_REQUEST[].

Hint: poczytaj o HEREDOC (odnośnie sklejania przy 'echo') albo pomyśl nad jakimś prostym szablonem, albo chociaż o składni 'echo':
echo var, var, var, var... (czyli np.
echo 'Zmienna x ma wartość', $x, '!!';
albo
echo '<tr><td>', $kol1, '</td><td>', $kol2, '</td></tr>';
)
Jakub L.

Jakub L. Programista

Temat: Problem z odczytaniem zmiennej

Jest taki znacznik: (code)(/code) (z nawiasami [] zamiast ()), pomaga.
SQLInjection, wyszukiwanie stringów like %%, tak jak Bogdan napisał - zmienna l nie wygląda na nigdzie przypisaną (drugą sprawą jest to, że literka l jest IMO najmniej nadającą się literką na jednoliterową nazwę zmiennej, bo w wielu fontach wygląda podobnie do 1), nie pomyliła się ze zmienną x przypadkiem?
Ogólnie kod jest jakiś dziwny.

Temat: Problem z odczytaniem zmiennej

Dodam jeszcze tylko, ze jesli pracujesz na edytowalnych listach, czy ogolnie pracujesz na edycji czegokolwiek, to nie posluguj sie inkrementacja, tylko identyfikatorami (ID) wierszy w bazie.
Dariusz Rodziewicz:
Docelowo, chciałbym, aby po wyświetleniu wybranych rekordów, istniała możliwość wyboru danego wpisu i dokonania jego edycji.

Powiedzmy tryb szybkiej edycji wielu rekordów na raz:

echo '<input type="text" name="edit['.$wiersz['id'].'][imie]" value="'.$wiersz['imie'].'"/>';


Dzieki czemu bedziesz mial na wyjsciu macierz, ktorej pierwszy klucz bedzie identyfikatorem wiersza w bazie, natomiast drugi nazwą kolumny.

Edycja konkretnej pozycji rownież po ID, nie po I, bo inkrementacja jest zalezna od ilosci rekordow, sortowania etc.

Ponadto osobiscie proponuje oddzielac warstwe logiczna od interfejsu. Mowa tutaj o mieszaniu PHP z HTML. Natomiast jesli juz, to korzystaj z konstrukcji:


echo <<<HTML
<tr>
<td>{$wiersz[1]}</td>
<td>{$wiersz[2]}</td>
<td>{$wiersz[2]}</td>
<td>{$dowolna_zmienna}</td>
</tr>
HTML;


Pozdrawiam

konto usunięte

Temat: Problem z odczytaniem zmiennej

Dariusz Rodziewicz:
Witam

Dlaczego w niżej zamieszczonym kodzie,

wrzuc to na http://pastebin.com/ albo przynajmniej otaguj [code] w poscie.
Robert P.

Robert P. Senior PHP Developer

Temat: Problem z odczytaniem zmiennej

Poczytaj o sql injection bo twój kod to raj dla "hakierów"
Dariusz Rodziewicz

Dariusz Rodziewicz Specjalista
Informatyk ds.
Systemów Medycznych,
Przedsięb...

Temat: Problem z odczytaniem zmiennej

Robert, WIELKIE DZIĘKI za podpowiedź
Co prawda, aplikacja i tak ma działać jedynie w intranecie, ale uwaga jak najbardziej słuszna.

Pozdrawiam

DarekDariusz Rodziewicz edytował(a) ten post dnia 11.07.11 o godzinie 18:33

Następna dyskusja:

Problem z php i excelem




Wyślij zaproszenie do