Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP]Usuwanie rekordów z bazy mysql przy użyciu PHP., Błąd przy usuwaniu rekordu.
lukasburza
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Johnas
post
Post #2





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
lukasburza
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ę).
Go to the top of the page
+Quote Post
Johnas
post
Post #5





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Johnas
post
Post #7





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

Ostrzeżenie: (0%)
-----


JavaScript zmieniający head z body w htmlu (IMG:style_emoticons/default/oneeyedsmiley02.png)

Ten post edytował GodOfPeople 22.11.2016, 02:16:21
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #8





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


O tak się uśmiałem:

  1. echo str_repeat("ha", INF);
Go to the top of the page
+Quote Post
Johnas
post
Post #9





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

Ostrzeżenie: (0%)
-----


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ć. (IMG:style_emoticons/default/Lkingsmiley.png)
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował viking 22.11.2016, 08:28:35
Go to the top of the page
+Quote Post
Niree
post
Post #11





Grupa: Zarejestrowani
Postów: 220
Pomógł: 18
Dołączył: 5.02.2016
Skąd: Polska

Ostrzeżenie: (0%)
-----


$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.

Ten post edytował Niree 22.11.2016, 15:59:38
Go to the top of the page
+Quote Post
lukasburza
post
Post #12





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.11.2016

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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

Ten post edytował lukasburza 23.11.2016, 01:35:55
Go to the top of the page
+Quote Post
viking
post
Post #13





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował viking 23.11.2016, 05:20:40
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 22:43