Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Błąd nagłówka, usuwanie rekordów
Forum PHP.pl > Forum > Przedszkole
MateuszS
Witam. Mam taki problem że pod czas dodawania newsa miałem tak że po odświeżaniu dodawał mi się kolejny. Nie chcę aby tak było więc zastosowałem header wszystko widać poniżej

  1. <?php
  2. if($_GET['opcja']=='sklep') {
  3.  
  4. echo '<b><center>Aktualnie w naszym sklepiku znajdują się:</center><br /></b>';
  5.  
  6. $zapytanie = mysql_query("SELECT id,nazwa,cena FROM `cennik`");
  7. echo '<table class="a" border="1" cellspacing="3">
  8. <tr><td width="40"><b>ID</b></td><td width="200"><b>Nazwa produktu</b></td><td width="80"><b>Cena</b></td><td width="80"><b>Opcja</b></td></tr></table>';
  9. while($wynik = mysql_fetch_assoc($zapytanie)) {
  10. echo '<table class="a" border="1" cellspacing="3">
  11. <tr><td width="40">' . $wynik['id'] . '</td>
  12. <td width="200">' . $wynik['nazwa'] . '</td>
  13. <td width="80">' . $wynik['cena'] . '</td>
  14. <td width="80"><a href="page.php?id=14&opcja=sklep&usun=' . $wynik['id'] . '">Usuń</td></tr></table>';
  15.  
  16. if($_GET['usun']==TRUE) {
  17. $sql = mysql_query("DELETE * FROM `cennik` WHERE `id`='".$_GET['usun']."");
  18. }
  19. }
  20.  
  21. echo '<br />';
  22. echo '<b><center>Dodaj nowy produkt:</center></b><br />';
  23. echo '<form method="POST" action="page.php?id=14&opcja=sklep">Nazwa: <input type="text" name="nazwaproduktu" size="25">
  24. Cena: <input type="text" size="10" name="cenaproduktu" /> zł. <input type="submit" value="dodaj" /></form>';
  25.  
  26. if(empty($_POST['nazwaproduktu']) or empty($_POST['cenaproduktu'])) {
  27. echo '<font color="red">Wypełnij wszystkie pola</font>'; } else {
  28. $zapyt = mysql_query("INSERT INTO `cennik` (nazwa,cena) VALUES ('".$_POST['nazwaproduktu']."','".$_POST['cenaproduktu']."')");
  29. header("Location: page.php?id=14&opcja=sklep");
  30. }
  31.  
  32. }
  33. ?>


Wywala
Kod
[b]Warning[/b]:  Cannot modify header information - headers already sent by (output started at G:\xampp\xampp\htdocs\n\gora.php:128) in [b]G:\xampp\xampp\htdocs\n\page\admin.php[/b] on line [b]103


[/b]zaznaczam że ten kod to fragment dość dużej strony, którą musiałem przerobić. Wiem że jest setki tematów na temat headera ale w żadnym nie znalazłem rozwiązania, ten błąd jest chyba unikalny jakiś. Ob_start nie działa.

I drugi problem to chcę usunąć rekordy z bazy ale mój skrypt nie działa. Proszę o pomoc.
Foxx
I przeczytałeś te setki tematów? Chyba nie bo byś nie dawał echo i header jedno pod drugim...
  1. <?php
  2. echo '<font color="red">Wypełnij wszystkie pola</font>';
  3. header("Location: page.php?id=14&opcja=sklep");
  4. ?>

Co jest w tej sytuacji unikalnego, nie możesz nic wysłać do przeglądarki żeby użyć header.

A co do usuwania rekordów:
  1. <?php
  2. if(isset($_GET['usun'])) {
  3.  $sql = mysql_query("DELETE * FROM `cennik` WHERE `id`='".$_GET['usun']."");
  4. }
  5. ?>

Raczej to zadziała ale dobrze radzę przefiltrować jeszcze zmienną $_GET['usun'] zanim ktoś wstawi Ci do url'a jakieś OR 1=1
MateuszS
Przyznam sie o tym nie wiedzialem, ale gdzie w takim razie mam dac ten header, nie dam go na poczatku bo wtedy nawet gdy doda do bazy rekord to pojawi sie po odsiezeniu i co odswiezenie bedzie dodawal nowe

ps moze cos zle robie ale usuwanie nie dziala

  1. <?php
  2. <td width="80"><a href="page.php?id=14&opcja=sklep&usun=' . $wynik['id'] . '">Usu&#324;</td></tr></table>';
  3.  
  4. if(isset($_GET['usun'])) {
  5. $sql = mysql_query("DELETE * FROM `cennik` WHERE `id`='".$_GET['usun']."");
  6. }
  7. ?>
Foxx
Masz bałagan w kodzie, żeby to zrobić poprawnie powinieneś:

1. zapytania sql zapisać w takiej formie:
  1. <?php
  2. echo $query = "DELETE * FROM `cennik` WHERE id='".$_GET['usun']."'"; // tu brakowało cudzysłowia '
  3. $sql = mysql_query($query) or die(mysql_error());
  4. ?>

Dzięki czemu zobaczysz jakie zapytania ostatecznie są wykonywane po jakiej operacji na stronie i zobaczysz też ew. błędy mysql dzięki mysql_error().

2. co do przekierowania - chcesz przekierować do innego pliku czy to wszystko jest plikiem page.php? Bo jeżeli to jeden plik to header jest zbędny, po prostu wykonaj wszystkie operacje na początku pliku a potem wyświetl formularz. Jeżeli to jest przekierowanie do innego pliku, page.php to i tak wykonuj operacje na początku, razem z przekierowaniem, zanim cokolwiek wyślesz do przeglądarki (czyli formularz tak jak teraz).
MateuszS
tak to wszystko wyonuje sie w jednym pliku page.php. Sa tam rozne panele, do dodawania newsow, kontaktow itp a ten panel to panel dodawania do cennika roznych rzeczy.

  1. <?php
  2. if($_GET['opcja']=='sklep') {
  3.  
  4. echo '<b><center>Aktualnie w naszym sklepiku znajdują się:</center><br /></b>';
  5.  
  6. $zapytanie = mysql_query("SELECT id,nazwa,cena FROM `cennik`");
  7. echo '<table class="a" border="1" cellspacing="3">
  8. <tr><td width="40"><b>ID</b></td><td width="200"><b>Nazwa produktu</b></td><td width="80"><b>Cena</b></td><td width="80"><b>Opcja</b></td></tr></table>';
  9. while($wynik = mysql_fetch_assoc($zapytanie)) {
  10. echo '<table class="a" border="1" cellspacing="3">
  11. <tr><td width="40">' . $wynik['id'] . '</td>
  12. <td width="200">' . $wynik['nazwa'] . '</td>
  13. <td width="80">' . $wynik['cena'] . '</td>
  14. <td width="80"><a href="page.php?id=14&opcja=sklep&usun=' . $wynik['id'] . '">Usuń</td></tr></table>';
  15. }
  16.  
  17. echo $query = "DELETE * FROM `cennik` WHERE id='".$_GET['usun']."'"; // tu brakowało cudzysłowia '
  18. $sql = mysql_query($query) or die(mysql_error());
  19.  
  20. echo '<br />';
  21. echo '<b><center>Dodaj nowy produkt:</center></b><br />';
  22. echo '<form method="POST" action="page.php?id=14&opcja=sklep">Nazwa: <input type="text" name="nazwaproduktu" size="25">
  23. Cena: <input type="text" size="10" name="cenaproduktu" /> zł. <input type="submit" value="dodaj" /></form>';
  24.  
  25. if(!empty($_POST['nazwaproduktu']) or !empty($_POST['cenaproduktu'])) {
  26. $zapyt = mysql_query("INSERT INTO `cennik` (nazwa,cena) VALUES ('".$_POST['nazwaproduktu']."','".$_POST['cenaproduktu']."')");
  27.  
  28. }
  29.  
  30. }
  31. ?>


Usuwanie nie dziala sad.gifsad.gif Noż kurw....
Foxx
Ok, usuwanie nie działa ale jaki jest rezultat echo $query; ? Jeżeli potem dzieją się w tym pliku jakieś przekierowania i nie możesz nic zobaczyć do daj po echo $query; instrukcję exit; A jeżeli nadal nic nie widać to znaczy że nie wchodzi do tego ifa więc URL ma może błędną postać.
MateuszS
Błąd wyskakuje gdy chcę usunąć rekord.

A co do tego odświeżania to poszedłem na latwizne i prymitywizm i zastosowalem

  1. <?php
  2. $zapyt = mysql_query("INSERT INTO `cennik` (nazwa,cena) VALUES ('".$_POST['nazwaproduktu']."','".$_POST['cenaproduktu']."')");
  3. echo '<script language="JavaScript">window.location="page.php?id=14";</script>';
  4. ?>


moze dam kod mojego kolegi rowniez z page.php gdzie jest usuwanie, sam go nie rozgryzlem

  1. <?php
  2. if ($_GET['opcja']=="kontakty") {
  3. echo "<form action='page.php?id=14&opcja=kontakty' method='post'><table class='a'>
  4. <tr><Td><b>Nazwa:</b></td><Td><input type='text' name='nazwa'></td></tr>
  5. <tr><td><b>Email:</td><td><input type='text' name='email'></td></tr>
  6. <tr><Td></td><Td><input type='submit' value='Dodaj' name='dodaj'></td></tr></table></form><br><br>";
  7. if ($_POST['dodaj']){
  8. if (empty($_POST['nazwa']) || empty($_POST['email'])) {
  9. echo "Uzupełnij wszystkie tabelki";
  10. } else {
  11. mysql_query("INSERT INTO `kontakt` (`nazwa`, `email`) VALUES('".$_POST['nazwa']."','".$_POST['email']."')");
  12. echo "Kontakt <b>{$_POST['nazwa']}</b> został poprawnie dodany do bazy danych...";
  13. }
  14. }
  15. if ($_GET['usun']==TRUE){
  16. mysql_query("DELETE FROM `kontakt` WHERE `id`='".$_GET['del']."'");
  17. header("Location: page.php?id=14&opcja=kontakty");
  18. }
  19. $kontakty=mysql_query("SELECT * FROM `kontakt`");
  20. echo "<table class='a' width=100%>
  21. <tr><td width=53%><b>Email</b></td><Td width=33%><b>Nazwa</b></td><Td><b>Opcje</b></tr>";
  22. while ($kontakt=mysql_fetch_assoc($kontakty)) {
  23. $ilosc=$ilosc+1;
  24. echo "<tr><td>{$kontakt['email']}</td><Td>{$kontakt['nazwa']}</td><Td> - <a href=\"page.php?id=14&opcja=kontakty&usun={$kontakt['id']}\">usuń</a></tr>";
  25. }
  26. echo "</table>";
  27. }
  28. ?>
Foxx
Cytat
Błąd wyskakuje gdy chcę usunąć rekord.

Wklej ten błąd, musimy go przeczytać żeby wiedzieć co nie gra.
MateuszS
DELETE * FROM `cennik` WHERE id=''You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM `cennik` WHERE id=''' at line 1


gdy mam

  1. <?php
  2. if($_GET['opcja']=='sklep') {
  3. if(!empty($_POST['nazwaproduktu']) or !empty($_POST['cenaproduktu'])) {
  4. $zapyt = mysql_query("INSERT INTO `cennik` (nazwa,cena) VALUES ('".$_POST['nazwaproduktu']."','".$_POST['cenaproduktu']."')");
  5. echo '<script language="JavaScript">window.location="page.php?id=14&opcja=sklep";</script>';
  6. } elseif ($_POST['dodaj']) {
  7. echo '<center><font color="red">Wypełnij pola</font></center>'; }
  8.  
  9. echo '<b><center>Aktualnie w naszym sklepiku znajdują się:</center><br /></b>';
  10.  
  11. $zapytanie = mysql_query("SELECT id,nazwa,cena FROM `cennik`");
  12. echo '<table class="a" border="1" cellspacing="3">
  13. <tr><td width="40"><b>ID</b></td><td width="240"><b>Nazwa produktu</b></td><td width="60"><b>Cena</b></td><td width="60"><b>Opcja</b></td></tr></table>';
  14. while($wynik = mysql_fetch_assoc($zapytanie)) {
  15. echo '<table class="a" border="1" cellspacing="3">
  16. <tr><td width="40">' . $wynik['id'] . '</td>
  17. <td width="240">' . $wynik['nazwa'] . '</td>
  18. <td width="60">' . $wynik['cena'] . ' zł</td>
  19. <td width="60"><a href="page.php?id=14&opcja=sklep&usun=' . $wynik['id'] . '">Usuń</td></tr></table>';
  20. }
  21.  
  22. echo $query = "DELETE * FROM `cennik` WHERE id='".$_GET['usun']."'"; // tu brakowało cudzysłowia '
  23. $sql = mysql_query($query) or die(mysql_error());
  24.  
  25. echo '<br />';
  26. echo '<b><center>Dodaj nowy produkt:</center></b><br />';
  27. echo '<form method="POST" action="page.php?id=14&opcja=sklep">Nazwa: <input type="text" name="nazwaproduktu" size="25">
  28. Cena: <input type="text" size="10" name="cenaproduktu" /> zł. <input type="submit" value="dodaj" name="dodaj" /></form>';
  29.  
  30. }
  31. ?>
Foxx
No ale czy nie widzisz tego, że zmienna usun nie ma wartosci? worriedsmiley.gif
Cytat
WHERE id=''


A po drugie, zajrzyj do manuala żeby przeczytać jak wygląda instrukcja delete:
http://www.w3schools.com/php/php_mysql_delete.asp
MateuszS
  1. <?php
  2. WHERE id='".$_GET['usun']."'"
  3. ?>


Jak to nie ma? Wartosc to ID z bazy, i powinno usuwac wszystkie pola z ID ktory jest w gecie.
Foxx
Wiem, że w kodzie ma, ale zobacz jak wygląda jak się je wyświetli tuż przed wykonaniem:
Cytat
DELETE * FROM `cennik` WHERE id=''You have an error

To cytat z Twojego posta. Czyli zmienna $_GET['usun'] nie ma wartości, może nie mam jej przypisanej w urlu.

I pamiętaj o tej składni DELETE, która u Ciebie jest błędna.
MateuszS
bleah...

  1. <?php
  2. <td width="60"><a href="page.php?id=14&opcja=sklep&usun=' . $wynik['id'] . '">Usu&#324;</td></tr></table>';
  3.  
  4. $_GET['usun'] = $ide;
  5. $query = "DELETE FROM `cennik` WHERE id='$ide";
  6. ?>


Nie mam pojecia szczerze mowiac o co ci chodzilo z ta pusta wartoscia ale mniejsza... zrobilem tak jak powyzej i uwaga!!!!! nie dziala ;/ Doceniam Twoje poswiecenie i licze ze jakos pomozesz mi z tego wybrnąć.
Foxx
Jak sam widzisz, proces się składa z 2 elementów: linka i instrukcji wykonującej zapytanie DELETE na jego podstawie.
Zrób tak:
  1. <?php
  2. echo '<td width="60"><a href="page.php?id=14&opcja=sklep&usun=' . $wynik['id'] . '">Usuń</td></tr></table>';
  3.  
  4. $ide = $_GET['usun'];
  5. echo $query = "DELETE FROM `cennik` WHERE id='".$ide."'";
  6. mysql_query($query) or die(mysql_error());
  7. ?>


Teraz powinieneś już nie mieć błędów składni ale nadal możesz mieć ten problem co poprzednio - w zmiennej $_GET['usun'] nic nie było. Dlatego przyjrzyj się linkowi, jeżeli ma postać page.php?id=14&opcja=sklep&usun= to źle a powinno być page.php?id=14&opcja=sklep&usun=23 - powpisuj ręcznie jakieś id rekordów i sprawdź czy usuwa Ci z bazy, sprawdź czy zmienna, którą wstawiasz w to miejsce, czyli $wynik['id'] ma na pewno jakąś wartość.
MateuszS
Metoda dziala czesciowo. Pod tabela mam napisane DELETE blabla zwyczajnie wyswietlone a na pasku mam niby ...&usun=6 (przykladowe id) ale usuwa dopiero gdy klinne enter (czyi wejde w link)
Foxx
Zobacz w źródle strony czy w linku jest jakiś numer id czy puste usun=
Nie wiem teraz czy mówisz o wpisanym id na sztywno czy to działa tak jak trzeba.
Wiadomo, że musisz kliknąć w link żeby usuń się wykonało.
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.