Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Usuwanie rekordów z bazy mysql przy użyciu PHP.
Forum PHP.pl > Forum > Przedszkole
lukasburza
Witam,
zabrałem się za naukę języka PHP, ale słabo jeszcze rozumiem składnie i pewne mechanizmy w programowaniu.
Próbowałem z bazy danych usunąć jeden z rekordów z poziomu PHP, ale wewnątrz przeglądarki wyskakuje mi taki błąd:

Notice: Undefined variable: del in D:\ThinkPad\Xampp\htdocs\przychodnia\delete.php on line 13

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in D:\ThinkPad\Xampp\htdocs\przychodnia\delete.php on line 13


i dotyczy tej konkretnej linijki

CODE
  1. $delete_row=mysqli_query("DELETE from pacjenci WHERE id='$del[idlekarza]'");


gdzie wysyłam to za pomocą odnośnika:

CODE
<a href="delete.php?del=<?php echo $idlekarza; ?>" onclick ="return confirm('Jesteś pewny, że chcesz usunąć?');"> Delete </a>


Jakiego drugiego parametru potrzebuje? Mam podać mu jakoś to 'del', czyli ID użytkownika, którego chcę z bazy usunąć?
Być może biorę się za to od złej strony. Próbowałem już według różnych poradników angielskich to robić i na różne sposoby, ale nic.


Tutaj cały kod dla plików PrzegladajLekarza.php i delete.php
Johnas
Informuje Cię o tym że jeden z parametrów nie jeat prawidłowy. Spróbuj zamienić to:
  1. $delete_row=mysqli_query("DELETE from pacjenci WHERE id='$del[idlekarza]'");

Na:
  1. $delete_row=mysqli_query("DELETE FROM `pacjenci` WHERE `id`='$del[idlekarza]'");

Jak nie pomoże to udostepnij mi strukturę bazy danych. Może masz gdzieś literówkę.
lukasburza
Nic nie dało. Bazę danych póki co zrobiłem ręcznie w phpmyadmin. Mam też problem z uploadem danych, bo nie od dziś się z tym męczę. Tutaj plik sql: baza danych
SmokAnalog
GodOfPeople co Ty dajesz? o0 Naprawdę myślisz, że brak gravisów (nie wiem jak ten znaczek się po polsku nazywa) to przyczyna błędu? Te znaczki są opcjonalne tak poza tym, więc to żaden błąd.

lukasburza jeżeli chcesz wziąć wartość z URL, to nie możesz się do niej odnieść jak do zwykłej zmiennej. Zmienne te są w superglobalnej tablicy $_GET. Czyli w Twoim przypadku nie $del, tylko $_GET['del']. Nie radzę bawić się w tablice w cudzysłowach, lepiej ładnie to połącz kropką:

  1. $delete_row = mysqli_query('DELETE from pacjenci WHERE id=\'' . $_GET['del'] . '\'');


To początek Twojej nauki, więc jedynie napomknę, że tak nie powinno się tworzyć zapytań w PHP, bo są podatne na atak SQL Injection (wygooglaj, jeśli masz ochotę).
Johnas
Poważnie ? Aż takie braki masz? Dlaczego szukasz po id skoro uzywasz idlekarza w pacjentach ? Nie masz tam identyfikatora dla pacjenta.

  1. $delete_row=mysqli_query("DELETE FROM `pacjenci` WHERE `idlekarza`='$del[idlekarza]'");


Teraz na bank działa

@SmokAnalog a słyszałeś o sql injecton, czy jak się to pisze ? Dodanie samego $_GET w zapytaniu SQL jest raczej absurdalnym pomysłem. Może akurat ten kolega w tablicy ma odpowiednio przefiltrowane dane w co wierzę tak samo jak w świętego mikołaja. Brak gravisow w tym przypadku nie załatwiło sprawy, natomiast nie oznacza to że ich brak jest poprawny. Nazwij w bazie danych tabele 'end' i spróbuj wyciągnąć z niej dane bez ich uzywania. Jestem tego zdania że dobrych manier programowania najlepiej się uczyć już na samym początku bo jest większe prawdopodobieństwo że wejdzie to w nawyk.
SmokAnalog
Cytat(GodOfPeople @ 22.11.2016, 02:07:08 ) *
@SmokAnalog a słyszałeś o sql injecton, czy jak się to pisze ?

Nie. Co to jest?
Johnas
JavaScript zmieniający head z body w htmlu oneeyedsmiley02.png
SmokAnalog
O tak się uśmiałem:

  1. echo str_repeat("ha", INF);
Johnas
Ja tak samo
  1. for ($i = 1; $i <= 1000000; $i++) {
  2. echo "ha";
  3. }


Po za tym jestem na telefonie i od soboty nie śpię, więc mam prawo czegoś nie doczytać. Lkingsmiley.png
viking
W swoim skrypcie masz <a href="delete.php?del=<?php echo $idlekarza; ?> ale ta zmienna nie została nigdzie wcześniej utworzona.
$id = (int) $_GET['del'];
Albo jeszcze lepiej http://php.net/manual/en/mysqli-stmt.bind-param.php
Kodowanie powinno być ustawione za pomocą http://php.net/manual/en/mysqli.set-charset.php
Niree
$del[idlekarza]
na
$del['idlekarza']

Swoją drogą masz strasznie namieszane. Kolumna 'id' powinna być primary key i mieć AUTO_INCREMENT. Dopiero w kolejnej kolumnie przydzielasz dla tego wpisu lekarza.

Wtedy w pytaniu dajesz
WHERE `lekarz`='$idlekarza';
Ale wciąż nie wiem, skąd podchodzi $idlekarza, w jaki sposób je uzyskujesz.
lukasburza
Dziękuję Kolegom, każdy komentarz to cenna uwaga, bo rzeczywiście kilka błędów było, ale jednak nie pomogło.

Cytat
Swoją drogą masz strasznie namieszane. Kolumna 'id' powinna być primary key i mieć AUTO_INCREMENT. Dopiero w kolejnej kolumnie przydzielasz dla tego wpisu lekarza.

Wtedy w pytaniu dajesz
WHERE `lekarz`='$idlekarza';
Ale wciąż nie wiem, skąd podchodzi $idlekarza, w jaki sposób je uzyskujesz.


idlekarza ma autoincrement i primary key i jest to dokładnie ID dla lekarza w mysqlu. Później dla odróżnienia wpisałem ID, w pliku delete.php - już to zmieniłem, wszędzie gdzie było id już jest idlekarza, czyli tak jak w bazie mysqla.
Nie jestem pewny jak uzyskać to $idlekarza , więc wyprowadź mnie prosze z błędu jeżeli źle rozumuję - przesyłam del w tym odnośniku "a href..." jako zmienną globalną, która ma taką samą wartość w PrzegladajLekarza.php i delete.php . Następnie sprawdzam, czy $_GET['del'] jest aktywny, znaczy czy coś tam się znajduję, usuwam rekord o ID równym idlekarza. Pytanie dodatkowe - czy w delete.php muszę od nowa inicjować połączenie z bazą danych (mysqli_connect, etc.)? Czy może po drodze jest jakiś błąd.

Cytat
W swoim skrypcie masz <a href="delete.php?del=<?php echo $idlekarza; ?> ale ta zmienna nie została nigdzie wcześniej utworzona.
$id = (int) $_GET['del'];
Albo jeszcze lepiej http://php.net/manual/en/mysqli-stmt.bind-param.php
Kodowanie powinno być ustawione za pomocą http://php.net/manual/en/mysqli.set-charset.php


Rzeczywiście, nie robię tego klasami (mam na myśli mysqli = new mysqli('localhost', '', etc.), ale staram się podążać za jakimiś pomocami internetowymi i według nich mogę robić to tak jak robiłem.
Dodałem teraz
  1. $del =$_GET['rezultat[idlekarza]'];
ale niestety nic z tego sad.gif


Wydaje mi się, że mimo że wyskakuje mi ta linijka 13
  1. $delete_row = mysqli_query('DELETE from pacjenci WHERE del[idlekarza]=\'' . (int)$_GET['del'] . '\'');
to jednak nie tutaj tkwi problem, tylko w przesyłaniu zmiennych / komunikacją. Może ktoś mógłby jeszcze sprawdzić czy dobrze komunikuję ze sobą pliki PrzegladajLekarzy.php i delete.php ?

Tutaj dbconnect.php
viking
Ma być idlekarza = (int) $_GET['del']
Gdzie idlekarza to kolumna w bazie. A co mają do tego klasy to nie wiem. Bind_param jest zarowno strukturalne jak i obiektowe.
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.