Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] unexpected T_IF
Forum PHP.pl > Forum > Przedszkole
AuronDiel
Witam! W moim kodzie wkradł się błąd, którego nie potrafie znaleźć. Prosze o pomoc i z góry dziekuję.
  1. echo '<table border="1">';
  2. while ($wiersz = mysql_fetch_row($idzapytania))
  3. {
  4. echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td><td>'. $wiersz[2] .'</td><td>'. $wiersz[3] .'</td><td><input type="submit" name="ok" value="" id="zaloguj">' .
  5. if(isset($_POST['ok']))
  6. {
  7. $zapytanie2 = "DELETE FROM `tabela1` WHERE `id`='$id' `rzecz`=`$wiersz[2]`";
  8. if(mysql_query($zapytanie2)) echo 'Osoba została usunięta z czarnej listy!';
  9. } .'</td></tr>';
  10. }
  11. echo '<table>';


Wypluło coś takiego.
Parse error: syntax error, unexpected T_IF in public_html/dodaj.php on line 5
Andrzej.W.
  1. echo '<table border="1">';
  2. while ($wiersz = mysql_fetch_row($idzapytania))
  3. {
  4. echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td><td>'. $wiersz[2] .'</td><td>'. $wiersz[3] .'</td><td><input type="submit" name="ok" value="" id="zaloguj">';
  5. if(isset($_POST['ok']))
  6. {
  7. $zapytanie2 = "DELETE FROM `tabela1` WHERE `id`='$id' `rzecz`=`$wiersz[2]`";
  8. if(mysql_query($zapytanie2)) echo 'Osoba została usunięta z czarnej listy!';
  9. }
  10. echo '</td></tr>';
  11. }
  12. echo '<table>';


Sposób w jaki wstawiłeś funkcję jest nieprawidłowy '.funkcja.' wg. mnie. Tak wstawia się zmienną przy funkcji wywala błąd.
Pozdrawiam.
Andrzej.
AuronDiel
Panie Andrzeju skypt działa, dziękuje bardzo lecz mam inny problem. Zrobiłem w skrypcie specjalny przycisk do usuwaniu calego wiersza z bazy danych
a wiersz mial znaleźć po id i rzeczy. Niestety skrypt nie usuwa mi z bazy danego wiersza po kliknięciu klawisza.

  1. echo '<table border="1">';
  2. while ($wiersz = mysql_fetch_row($idzapytania))
  3. {
  4. echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td><td>'. $wiersz[2] .'</td><td>'. $wiersz[3] .'</td><td><form action="zalogowany.php" method="POST"><input type="submit" name="okk" value="" id="zaloguj"></form>';
  5. if(isset($_POST['okk']))
  6. {
  7. $zapytanie2 = "DELETE FROM `tabela1` WHERE `id`='$id' `rzecz`='$wiersz[2]'";
  8. if(mysql_query($zapytanie2)) echo 'Osoba została usunięta z czarnej listy!';
  9. }
  10. echo '</td></tr>';
  11. }
  12. echo '<table>';
Andrzej.W.
Nie widzę tutaj zdefiniowania wartości $id, jeśli dobrze rozumiem to któryś z wiersz[] posiada tę wartość.
AuronDiel
Jest zdefiniowana, var_dump($id) wypisał ,,string(1) "1" NULL" co się zgadza id ma wartość 1. Wiersz nie podsiada id, pobrałem ją z sesji.

  1. $id = $_SESSION['id'];
  2. $zapytanie = "SELECT `imie`,`mail`,`rzecz`,`data` FROM `tablica1` WHERE id='$id'";
  3. $idzapytania = mysql_query($zapytanie);
  4.  
  5. var_dump($id);
  6. var_dump($rzecz);
  7. echo '<table border="1">';
  8. while ($wiersz = mysql_fetch_row($idzapytania))
  9. {
  10. echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td><td>'. $wiersz[2] .'</td><td>'. $wiersz[3] .'</td><td><form action="zalogowany.php" method="POST"><input type="submit" name="okk" value="" id="zaloguj"></form>';
  11. if(isset($_POST['okk']))
  12. {
  13. $zapytanie2 = "DELETE FROM `tabela1` WHERE `id`='$id' `rzecz`='$wiersz[2]'";
  14. if(mysql_query($zapytanie2)) echo 'Osobnik została usunięta z czarnej listy!';
  15. }
  16. echo '</td></tr>';
  17. }
  18. echo '<table>';


Użytkownik ma te samo id i pierw w bazie szuka po id a pozniej ma znaleźć wiersz który zawiera daną rzecz (każdy wiersz ma inną rzecz) i na jej podstawie usunąć cały rekord
Andrzej.W.
Chyba nie zatrybiłem, zarówno id jak i rzecz to element tego samego rekordu? I czy oba sa unikalne dla każdego rekordu w tej tabeli?
AuronDiel
Tabela ,,tabela1" w bazie wygląda tak:
| id |mail | rzecz | data | imię |

Po zarejestrowaniu użytkownik dostaje przez A_I numerek.
Kiedy dodaje rekord do tabeli ,,tabela1" wypisuje tylko mail, rzecz, data, imie a id dopisuje mi sie same i to właśnie działa.
Chciałem zrobic jeszcze opcje wyświetlania rekordów (rekordy wyswietlaja sie tylko te ktore id ich zgadza sie z id uzytkownika) oraz usunięcia poszczegolnego z bazy za pomocą submit. Wyświetlić mi się udało ale usunąc się nie chce. Chce usunąć też poszczególny rekord nie wszystkie.
W bazie może być wiele rekordów dlatego są id by każdemu użytkownikowi były przepisane jego rzeczy. Więc pytanie miało wyglądać tak ,,Znajdz mi w tablicy ,,tabela1" wszystkie wiersze zawierajace id uzytkownika pozniej znajdz mi rzecz a nastepnie usun caly wiersz z bazy". Czemu szukam jeszcze rzeczy bo uzytkownik moze miec pare wierszy z tym samym id a rzecz jest unikalna. Mam nadzieje, że teraz jest wszystko zrozumiałe.

NP.
| id |mail | rzecz | data | imię |

| 1 | ---- | kapsel | ---- | ----|
| 1 | ---- | guma | ---- | ----|
| 2 | ---- | kalosze |---- | ---|

To sa przykladowe wiersze w bazie rozchodzilo mi sie o to ze po nacisnieciu klawisza usunie mi dany wiersz a znajdzie go pierw po id a pozniej po rzeczy.

Odkryłem, że po id umie to znaleźć wiersze ale odpowiedni wiersz po rzeczy to już nie.
  1. $zapytanie2 = "DELETE FROM `tabela1` WHERE `id`='$id' and `rzecz`='$wiersz[2]'";

Może inaczej trzeba sformułować pytanie?
Andrzej.W.
No to kolego sam już sobie odpowiedziałeś na pytanie, to powinno działać. Ja w sumie zawsze indeksuje tabele, więc każdy rekord ma unikalny id. zawsze też indeks nazywam id_nazwa_tabeli. wink.gif
Pozdrawiam.
AuronDiel
Mam po prostu inaczej sformułować pytanie?
Andrzej.W.
Wg. mnie tak, w pierwszej wersji zabrakło operatora AND sprawdziłem sobie na testowej tabeli, czy po dodaniu do Twojej konstrukcji zapytania AND prawidłowo skasuje rekord i skasowało.
Miałem 2 takie same id, a różne wartości drugiej kolumny, zatem tylko tyle. smile.gif
Często wyolbrzymia się problem, a diabeł tkwi w detalu. wink.gif

Ja wczoraj popełniłem mistrzostwo świata, godzinę szukałem gdzie jest problem w kodzie, że się nie wykonuje, a sprawdzając czy działa patrzyłem na inną tabelę, gdzie żadne zmiany się nie dokonywały heheh. A kod działał jak należy.smile.gif
AuronDiel
Wpisałem AND i niestety nie działa, myślę, że to może być przez pętle, ale nie jestem pewien. Zerknij jeśli możesz.
  1. $id = $_SESSION['id'];
  2. $zapytanie = "SELECT `imie`,`mail`,`rzecz`,`data` FROM `tabela1` WHERE id='$id'";
  3. $idzapytania = mysql_query($zapytanie);
  4.  
  5. echo '<table border="1">';
  6. while ($wiersz = mysql_fetch_row($idzapytania))
  7. {
  8. echo '<tr><td>'. $wiersz[0] .'</td><td>'. $wiersz[1] .'</td><td>'. $wiersz[2] .'</td><td>'. $wiersz[3] .'</td><td><form action="zalogowany.php" method="POST"><input type="submit" name="okk" value="" id="zaloguj"></form>';
  9. if(isset($_POST['okk']))
  10. {
  11. $zapytanie2 = "DELETE FROM `tabela1` WHERE `id`='$id' AND `rzecz`='$wiersz[2]'";
  12. if(mysql_query($zapytanie2)) echo 'Dłużnik została usunięta z czarnej listy!';
  13. }
  14. echo '</td></tr>';
  15. }
  16. echo '<table>';


Albo może on wpisuje obydwie rzeczy do zapytania.
Andrzej.W.
Ahhh
Jeśli się nie mylę, to z tego wynika, że zmiennej $wiersz[2] nigdzie nie wysyłasz, nie analizowałem pod tym kątem tego kodu, a skupiłem się tylko na poprawności zapytania.

  1. <form action="zalogowany.php" method="POST">
  2. <input type="submit" name="okk" value="" id="zaloguj"></form>

Jeżeli się nie mylę, to value powinno mieć jeśli już wartość $wiersz[2]
Tylko masz tu wszystko pomieszane, albo za mało kodu widzę.

Po 1.
warunkujesz wykonanie zapytania do bazy istnieniem $_POST['okk'], a chcesz obsłużyć ten formularz zewnętrznym plikiem zalogowany.php

Więc , czy warunek if(isset($_POST['okk']; to część tego samego pliku, co tabela z wynikiem selecta. Czy innego pliku?

Jeśli tabela z wynikiem selecta jest w tym samym pliku co zapyatnie DELETE z warunkiem $_POST['okk'], to wówczas :

a. w deklaracji formularza nie dajesz action="nazwa_pliku.php", w ogóle pomijasz action i dajesz tylko method="post"

@edit pomyliłem się
2. Jeżeli jest obsługiwane przez plik zalogowany.php to :

a. Przekaż do wartości (value="") inputa submit, wartość $wiersz[2], w ten sposób przekażesz ją do zapytania.
b. w zapytaniu powinno być wówczas nie $wiersz[2], a $_POST['okk'].

Jeśli zaś masz tu pokazany kod z dwóch plików, to porozdzielaj to na dwa cytaty.

To tak z grubsza.smile.gif
AuronDiel
JESTEŚ GENIALNY UDAŁO SIĘexclamation.gif! NIE MASZ POJĘCIA JAK BARDZO CI DZIĘKUJE! WYŚLE CI PIWO!
Andrzej.W.
Oj tam, cieszę się że mogłem pomóc, takie próby mnie rozwijają. Ja dopiero raczkuje w php.wink.gif
Pkt pomógł w zupełności wystarczą.
Dobrej nocy. wink.gif

@Edit
Jest jeszcze jedna rzecz, mianowicie, to trochę bez sensu będzie wyglądać, że każdy guzik będzie mieć nazwę wiersz[2], nie wiadomo wówczas do czego on służy. Zatem polecam rozwiązanie jakie stosuję u siebie. Implementujesz do poniższego zestawu Input typu checkbox i zniego odbierasz dane do zapytania np w Twoim wypadku:

  1. echo '<form action="zalogowany.php" method="POST">
  2. <input type="checkbox" name="delete" value="'.$wiersz[2].'">
  3. <input type="submit" name="okk" value="Usuń" id="zaloguj"></form>';


Wtedy warunek byłby mniej więcej taki:

  1. if(isset($_POST['delete']) AND !empty($_POST['delete']))
  2. {
  3. $zapytanie2 = "DELETE FROM `tabela1` WHERE `id`='$id' AND `rzecz`='$_POST['delete']'";
  4. if(mysql_query($zapytanie2)) echo 'Dłużnik została usunięta z czarnej listy!';
  5. }


Wówczas w tabeli nazwa przycisku usuń byłaby jednoznaczna i kliknięcie checkboksa intuicyjne.

"PS pisane z palca więc mogą być błędy.
Pozdrawiam.smile.gif
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.