klekot
27.02.2008, 15:45:15
Mam sobie jakis kod
<?php
while (a==b){
jakis kawalek kodu
$c = 1;
}
Dalsza czesc kodu
?>
I teraz pytanie. Jak zrobic, aby $c przeniesc poza pole zwiazane z while. Bo mam skrypt ktory pobiera dane z bazy mysql. i pozniej chce skorzystac z tej zmiennej w zapytaniu, ktore nie znajduje sie w polu while, problem polega na tym ze ta zmienna nie jest widziana. Dla sprawdzenia poprawnosci zapytania zrobilem maly test. $c wstawilem po instrukcji while i wszystko jest ok. Teraz musze tylko rozwiazac problem jak przeniesc ta zmienna poza instrukcje
l0ud
27.02.2008, 15:58:27
Jesteś pewny, że pętla wykonuje się chociaż raz? To nie C, zmienna zadeklarowana w pętli powinna być widoczna i poza nią.
klekot
27.02.2008, 16:25:40
mam takie cos
while($c = mysql_fetch_array($query)) {
print($c[wykonawca].' - '.$c[tytul].'<br>');
print($c[adres].'<br>');
print($c[opis].'<br>');
print($c[czas].'<br>');
?> <form action=?action=DELETE method=POST>
<input type=submit name=DELETE value=Kasuj>
</form> <?
}
IF(isset($delete)){
$akcja = "DELETE FROM teledyski WHERE id='$c[id]'";
$zapytanie = mysql_query($akcja) OR die(mysql_error());
echo 'Wpis zostal skasowany';
}
While jest wykonywane poniewaz pobiera informacje z bazy
l0ud
27.02.2008, 16:43:45
Pomyśl...
<?php
?>
Co oznacza... dopóki przypisanie wyniku mysql_fetch_array do zmiennej $c się powodzi, wykonuj[...]
Pętla się kończy, czyli przypisanie wyniku się nie powiodło i zmienna $c przybiera ostatecznie pustą wartość. Patrząc na ten kod, wygląda na to, że ta pętla wykonuje się tylko raz, więc po co ją robić? Przypisz od razu zmiennej c wynik mysql_fetch_array($query), bez żadnej pętli...
klekot
27.02.2008, 17:21:20
Zrobilem tak jak mowiles, ale nie chce sie usowac. Pisze ze usunieto, ale tak nie jest.
<?php
$sql = ('SELECT * FROM teledyski WHERE tytul LIKE "'.$tyt.'" LIMIT 1' );
print($c[wykonawca
].' - '.$c[tytul
].'<br>'); $id = $c[id];
...
$akcja = "DELETE FROM teledyski WHERE wykonawca='$id'";
$akcjj = "DELETE FROM teledyski WHERE id='$c[id]'";
echo 'Wpis zostal skasowany'; ?>
A jak zrobie ze $id = 1; to wtedy dziala
l0ud
27.02.2008, 17:29:43
Po pierwsze, źle się odnosisz do zmiennych w tablicy. Należy używać apostrofów, czyli nie np. $c[wykonawca], tylko $c['wykonawca']
Spróbuj tak
<?php
if(isset($_POST['delete'])) {
$akcja = 'DELETE FROM teledyski WHERE id=''.$c['id'].''';
echo 'Wpis zostal skasowany';
}
?>
klekot
27.02.2008, 17:55:08
jesli wkleje dokladnie to co napisales to jest taki sam efekt jak z moim kodem, a jak usune "/" to wywala Something is wrong in your syntax obok '' w linii 1
<?php
$sql = 'SELECT * FROM `teledyski` WHERE tytul LIKE "'.$tyt.'" LIMIT 1' );
print($c[wykonawca
].' - '.$c[tytul
].'<br>'); $id = $c[id];
$akcja = 'DELETE FROM `teledyski` WHERE `id`='.$c[id];
echo 'Wpis zostal skasowany'; }
?>
Chyba lepiej usuwać po `id`, a nie tytule
l0ud
27.02.2008, 18:08:25
Nie nie, nie usuwaj backslashów - muszą być. Zmień to co dałem tymczasowo na
<?php
if(isset($_POST['delete'])) {
$akcja = 'DELETE FROM teledyski WHERE id=''.$c['id'].''';
}
?>
i napisz co zwraca.
klekot
27.02.2008, 18:25:55
nic
l0ud
27.02.2008, 18:29:06
o kurcze... mój błąd. oczywiście
<?php
if(isset($_POST['delete'])) {
$akcja = 'DELETE FROM teledyski WHERE id=''.$c['id'].''';
}
?>
klekot
27.02.2008, 18:34:04
DELETE FROM teledyski WHERE id=''
l0ud
27.02.2008, 18:45:17
Do tego co masz aktualnie, przed zadeklarowaniem zmiennej akcja dopisz print_r($c);
i wklej co teraz zwraca.
klekot
27.02.2008, 18:52:31
wkleiłem tutaj
<?php
if(isset($_POST['delete'])) {
$akcja = 'DELETE FROM teledyski WHERE id='.$c['adres'].'';
?>
Wyswietlilo sie to samo DELETE FROM teledyski WHERE id=''
l0ud
27.02.2008, 18:59:37
Uruchamiasz ten kod oczywiście w całości, razem z poprzednią częścią, która pobiera dane z bazy? Jeżeli tak, być może nie przekazujesz zmiennej $tyt, która jest przecież potrzebna do zdobycia identyfikatora [zobacz pierwsze zapytanie w całości]
klekot
27.02.2008, 19:04:08
$tyt to pobieranie tekstu z formularza, pozniej zapytanie wyszukuje odpowiedni rekord. Wszystko jest ok. Pozniej jak chce usunac wpis to pojawia sie problem.
<center><?
echo('Znajdz plik który chcesz usunac <form action="?action=delete" method="post">
Tytul: <input type="text" name="tyt"><br>
<input type="submit" name="wyslij" value="Wyslij"><br>
</form>');
$tyt = $_POST['tyt'];
$sql = ('SELECT * FROM teledyski WHERE tytul LIKE "'.$tyt.'" LIMIT 1' );
print($c[wykonawca
].' - '.$c[tytul
].'<br>'); $id = $c['id'];
?> <form action=?action=delete method=POST>
<input type=submit name=delete value=Kasuj>
</form> <?
if(isset($_POST['delete'])) {
$akcja = 'DELETE FROM teledyski WHERE id='.$c['adres'].'';
}
}
else {
print("Problem z baza danych"); }
?>
l0ud
27.02.2008, 19:15:14
Pomiędzy 19 a 20 linią tego co dałeś, dodaj
Kod
<input type="hidden" name="tyt" value="<?php echo $_POST['tyt']; ?>">
Napisz teraz, jaki wynik wygeneruje.
klekot
27.02.2008, 19:28:41
DELETE FROM teledyski WHERE id=wpisArray ( [0] => 1 [id] => 1 [1] => wpis [tytul] => wpis [2] => wpis [adres] => wpis [3] => Country [kategoria] => Country [4] => wpis [opis] => wpis [5] => [czas] => [6] => [ocena] => [7] => wpis [wykonawca] => wpis )
l0ud
27.02.2008, 19:35:51
już prawie ok

Teraz zamień na powrót ten cały blok if isset na
<?php
if(isset($_POST['delete'])) {
$akcja = 'DELETE FROM teledyski WHERE id=''.$c['id'].''';
echo 'Wpis zostal skasowany';
}
?>
klekot
27.02.2008, 19:46:39
Dziala

dzieki.
Ale teraz chcialbym sie dowiedziec co zrobilem zle. Czy to chodzi o to
WHERE id=\''.$c['id'].'''
I jak bys mogl to powiedz po co sa te ukosniki.
l0ud
27.02.2008, 22:25:04
- nie przekazałeś zmiennej $_POST['tyt'], była tylko przy pierwszej okazji, a w skrypcie jest jeszcze coś takiego jak potwierdzenie chęci usunięcia pliku - wtedy zmiennej już przez formularz nie przekazano
- złe odnoszenie się do zmiennej id, w elementach tablic o nazwie tekstowej używamy apostrofów/cudzysłowów.
- chyba [nie jestem pewien - tak czy siak moja propozycja jest lepsza] złe przekazywanie zmiennych do zapytania. W przypadku tablic lepiej nie odnosić się do nich w cudzysłowach, tylko oddzielić od stringu.
Backslashe to znaki ucieczki, w tym przypadku zapewniają, że interpreter php nie będzie się interesował w przetwarzaniu kodu znakiem po nim, i po prostu 'pozwoli' na apostrofy w zapytaniu mysql.
klekot
15.03.2008, 19:04:49
znowu mam podobny problem i nie wiem jak to rozwiazac. $wartosc1 nie jest przekazywana z formularza do zapytania UPDATE i tak samo jest z $user
<center><?php
echo('Znajdz uzytkownika chcesz edytować <form action="?action=uprawnienia" method="post">
Uzytkownik: <input type="text" name="user"><br>
<input type="submit" name="wyslij" value="Wyslij"><br>
</form>');
if(!empty($_POST['user'])){ $user = $_POST['user'];
$sql = ('SELECT * FROM logowanie WHERE login LIKE "'.$user.'" LIMIT 1' ) ;
print('Login: '.$c['login'].'<br>'); print('Wartosc: '.$c['wartosc'].'<br>');
print('Zmień dane (musisz wpisać wszystkie informacje).<br><br> '); print('<form action="?action=uprawnienia" method="post"> '); print('Wartosc: <input type=text name=wartosc1>'); ### print('Wartosc: <select name=wartosc_new><option>1</option> <option>2</option> <option>3</option></select> ');
print('<br><input type="submit" name="zapisz" value="Zapisz"> '); }
}
# "'.$wartosc1.'" "'.$user.'"
$wartosc1 = $_POST['$wartosc1'];
if(isset($_POST['zapisz'])){ $login1 = $c['login'];
$aktualka = ('UPDATE `logowanie` SET wartosc = "'.$wartosc1.'" WHERE login="'.$c['login'].'" ');
echo 'Zmiany zostały zapisane'; }
}
else echo('Blad podczas polaczenia z baza');
?>
Moglby tos pomoc?
l0ud
15.03.2008, 20:28:22
Poprawiłem na ślepo do takiej postaci:
<?php
echo('Znajdz uzytkownika chcesz edytować <form action="?action=uprawnienia" method="post">
Uzytkownik: <input type="text" name="user"><br>
<input type="submit" name="wyslij" value="Wyslij"><br>
</form>');
if(!empty($_POST['user'])){ $user = $_POST['user'];
$sql = 'SELECT * FROM logowanie WHERE login LIKE "'.$user.'" LIMIT 1';
print('Login: '.$c['login'].'<br>'); print('Wartosc: '.$c['wartosc'].'<br>');
print('Zmień dane (musisz wpisać wszystkie informacje).<br><br> '); print('<form action="?action=uprawnienia" method="post"><input type="hidden" name="login" value="'.$c['login'].'"> '); //print('Wartosc: <input type=text name="wartosc1>"');
print('Wartosc: <select name="wartosc_new"><option>1</option> <option>2</option> <option>3</option></select> ');
print('<br><input type="submit" name="zapisz" value="Zapisz"> '); }
}
# "'.$wartosc1.'" "'.$user.'"
$wartosc1 = $_POST['wartosc_new'];
if(isset($_POST['zapisz'])){ $login1 = $_POST['login'];
$aktualka = ('UPDATE `logowanie` SET wartosc = "'.addslashes($wartosc1).'" WHERE login="'.addslashes($login1).'" '); echo 'Zmiany zostały zapisane'; }
}
else echo('Blad podczas polaczenia z baza');
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.