Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] dlaczego nie dodaje danych do bazy?
Forum PHP.pl > Forum > Przedszkole
mczlowiek
dlaczego formularz ten nie dodaje mi danych do tabeli bazy danych?
formularz:
  1. <?php
  2. <form action="kontuzje1.php" method="post">
  3. Dodaj zawodnika
  4. <input type="checkbox" name="'.$nazwa_form.'" value="wartość" onclick="document.getElementById(''.$nazwa_id.'').style.display = this.checked ? 'block' : 'none'; this.form.elements['nazwisko'].disabled = this.form.elements['pozycja'].disabled = this.form.elements['wystepy'].disabled = this.form.elements['id_klub'].disabled = !this.checked" />
  5.  
  6. <div id="'.$nazwa_id.'" style="display: none">
  7.  
  8.  
  9. <table>
  10. <tr>
  11. <td>Id</td>
  12. <td>Nazwisko</td>
  13. <td>Pozycja</td>
  14. <td>Wyst&#281;py</td>
  15. <td></td>
  16. </tr>
  17. <tr>
  18. <td><input type="text" size="4" name="id_klub" value="'.$w['id_klub'].'" /></td>
  19. <td><input type="text" name="nazwisko" disabled="disabled" /></td>
  20. <td><input type="text" size="3" name="pozycja" disabled="disabled" /></td>
  21. <td><input type="text" size="3" name="wystepy" disabled="disabled" /></td>
  22. <td><a href="index.php?id=kontuzje1&dodaj=ok">Dodaj</a></td>
  23. </tr>
  24.  
  25. </table>
  26. </div>
  27. </form>
  28. ?>

a tutaj dodajemy zawodników:
  1. <?php
  2. elseif($_GET['dodaj'])
  3. {
  4. $id_klub =  $_POST['id_klub'];
  5. $nazwisko =  $_POST['nazwisko'];
  6. $pozycja= $_POST['pozycja'];
  7. $wystepy= $_POST['wystepy'];
  8. echo $nazwisko;
  9. mysql_query("set names utf8");
  10. $query="INSERT into zawodnicy SET
  11. id_klub='".$id_klub."',
  12. nazwisko='".$nazwisko."',
  13. pozycja='".$pozycja."',
  14. wystepy='".$wystepy."'";
  15. mysql_query($query);
  16. echo '<font face="verdana" size="1" color="white">';
  17. echo ("Zawodnik dodany!");
  18.  
  19.  
  20. }
  21. ?>

co jest nie tak?

aha, cały kod znajduje się w pliku kontuzje1.php

dobrze już mam.
Teraz pytanie jak zrobić aby po dodaniu wróciłw to miejsce (w ten adres) w którym byłem przed dodaniem zawodnika?
Maxik
  1. INSERT INTO zawodnicy(id_klub, nazwisko, pozycja, wystepy) VALUES('".$id_klub."', '".$nazwisko."', '".$pozycja."', '".$wystepy."')


header('Location:'.$_SERVER['HTTP_REFERER']);

Powinno zadziałać
mczlowiek
niestety, dostaje taki komunikat:
Warning: Cannot modify header information - headers already sent by (output started at /home/tktbet/ftp/index.php:6) in /home/tktbet/ftp/dzialy/kontuzje1.php on line 103
ShadowD
Musisz zrobić to samo co Ci koledzy wyżej napisali, tylko że dodaj:
ob_start();

Na samym początku głównego pliku, oczywiście w znacznikach:
<?php ... ?>

Pozdrawiam...

Przykład:
  1. <?php
  2. ?>
  3.  
  4. TRESC SKRTYPTU
  5.  
  6. <?php
  7. ?>
mczlowiek
na samym początku pliku głównego czyli index.php doadałem,a le i tak zwraca mi komunikat:
Warning: Cannot modify header information - headers already sent by (output started at /home/tktbet/ftp/index.php:1) in /home/tktbet/ftp/dzialy/kontuzje1.php on line 103
ShadowD
Pokarz ten pierwsze 10 linij...
mczlowiek
plik index.php
  1. <?php
  2. ?>
  3. <html>
  4.  
  5. <head>
  6. <title>:: TKTbet :: TYPY - KONTUZJE - TRANSFERY :: typy bukmacherskie, bukmacherzy, zakady bukmacherskie, sts, bwin</title>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
  8. <meta name="description" content="Portal Bukmacherski zawierajacy typy, typy bukmacherskie,kontuzje, kontuzje
     piłkarskie, kontuzje piłka nożna,awizowane składy, składy na mecz, składy, trans
    fery, informacje o transferach, transfery piłka nożna, forum bukmacherskie, konku
    rs liga typerow, a takze opisuje zaklady, sts, zaklady bukmacherskie, zaklady spo
    rtowe i bonusy bukmacherskie w firmach bukmacherskich bwin, bet and win, interwet
    ten" />
  9. <meta name="keywords" content="bet, typy, bukmacher, zakady, typy bukmacherskie, darmowe typy, kontuzje, i
    nformacje o kontuzjach, kontuzje piłka nożna, bukmacherzy, bukmacherzy online, fo
    rum bukmacherskie, liga typerw, BET, systemy bukmacherskie, zaklady bukmacherskie
    , zakady sportowe, sts, bonusy bukmacherskie, sportowe, bukmacher internetowy, bu
    kmacher online, bukmacher typy, betandwin, serwis bukmacherski, portal bukmachers
    ki, bukmacherski, bwin, bet and win, bwin bonus, pika nona, soccer, football, STS" />
  10. <meta name="rating" content="general" />
  11. <meta name="robots" content="all" />
  12. <meta name="revisit-after" content="3 Days" />
  13.  
  14. <meta name="author" content="mczlowiek@gmail.com" />
  15. <link rel="icon" href="images/ico.ico" type="image/x-icon" />
  16. <link rel="shortcut icon" href="images/ico.ico" type="image/x-icon" />
  17. <link rel="stylesheet" type="text/css" href="style/style.css" />
  18.  
  19.  
  20. </head>
  21.  
  22. <body background="images/desen.gif">
  23.  
  24.  
  25. <?php
  26. include("admin/config.php")
  27. ?>
ShadowD
http://phpedia.pl/wiki/Cannot_add_header_i...rs_already_sent

Poczytaj w szczególności pkt 3, to pewnie w tym leży problem...
mczlowiek
Nie mam znaków BOM bo wszystkie usunalem jak mialem problemy z polskimi znakami...
Maxik
W pliku w którym dodajesz nie wyświetlaj żadnych danych tekstowych. Do pliku z formularzem daj gdzieś wyświetlenie parametru msg przesłanego metodą GET. Zmodyfikuj header w ten sposób header('Location:'.$_SERVER['HTTP_REFERER'].'?msg=OK');
mczlowiek
problem w tym, że wszystko mam w jednym pliku. I nie wiem czy teraz to rozbijać na kilka plików czy jak to zrobić?

(wszystko jest w jednym pliku - widok pierwszy post)
golaod
Cytat(mczlowiek @ 22.08.2008, 22:00:48 ) *
na samym początku pliku głównego czyli index.php doadałem,a le i tak zwraca mi komunikat:
Warning: Cannot modify header information - headers already sent by (output started at /home/tktbet/ftp/index.php:1) in /home/tktbet/ftp/dzialy/kontuzje1.php on line 103


A może zacznijmy od tego ? Daj kilka linii przed i kilka po linii 103 (łącznie z nią) co ?
mczlowiek
  1. <?php
  2. mysql_query("set names utf8");
  3. $query="INSERT into zawodnicy SET
  4. id_klub='".$id_klub."',
  5. nazwisko='".$nazwisko."',
  6. pozycja='".$pozycja."',
  7. wystepy='".$wystepy."'";
  8. mysql_query($query);
  9.  
  10.  
  11. header('Location: index.php');
  12.  
  13.  
  14. }
  15.  
  16.  
  17.  
  18.  
  19. else
  20. {
  21. ?>

linia 103 to linia wolna przed header
golaod
No człowieku...nawet jeśli nie jest powodowany błąd mysql to mimo wszystko echo jest wykorzystywane. Więc radze kod poprawić z:
  1. <?php
  2. mysql_query($query);
  3. ?>

na:
  1. <?php
  2. mysql_query($query) or die(mysql_error());
  3. ?>
mczlowiek
błąd: Warning: Cannot modify header information - headers already sent by (output started at /home/tktbet/ftp/index.php:1) in /home/tktbet/ftp/dzialy/kontuzje1.php on line 101
  1. <?php
  2. elseif($_GET['dodaj'])
  3. {
  4. $id_klub =  $_POST['id_klub'];
  5. $nazwisko =  $_POST['nazwisko'];
  6. $pozycja= $_POST['pozycja'];
  7. $wystepy= $_POST['wystepy'];
  8. echo $nazwisko;
  9. mysql_query("set names utf8");
  10. $query="INSERT into zawodnicy SET
  11. id_klub='".$id_klub."',
  12. nazwisko='".$nazwisko."',
  13. pozycja='".$pozycja."',
  14. wystepy='".$wystepy."'";
  15. mysql_query($query) or die(mysql_error());
  16. header('Location: index.php');
  17. }
  18.  
  19.  
  20.  
  21.  
  22. else
  23. ?>

linia 101 to header...
golaod
Wrzuć cały plik to sprawdzę u siebie o co chodzi bo nie chce mi się dedukować. (ten ze zmianami już)
Kicok
Cytat
output started at /home/tktbet/ftp/index.php:1


Czyli:
wysłano już coś w pliku: index.php w linii: 1

BOM albo jakaś spacja przed <?php - innej możliwości nie ma.
mczlowiek
http://www.sendspace.pl/file/sp4yT8lY/

Wrzuciłem tutaj jako txt bo nie chciało mi na forum dodać pliku
Kicok
No i masz tam BOM na początku. Poszukaj sobie edytora którym można zapisywać pliki UTF-8 bez BOM-a
mczlowiek
możesz jakiś polecic?
golaod
Polecam ked tylko wtedy wygląda to tak, jak chcesz mieć plik w utf8 to robisz tak, że zaraz po <?php dajesz enter i piszesz //ą(lub inny polski znak) czemu ? a no dlatego, że ked jak nie ma polskich znaków w pliku to nie konwertuje go z jakiś dziwnych przyczyn do utf8.
mczlowiek
ok mam jeszcze jedno pytanie, z kodu:
  1. <?php
  2. if($_GET['id_liga']){
  3. mysql_query("set names utf8"); 
  4. $sql = " SELECT * FROM kluby k
  5. LEFT OUTER JOIN zawodnicy z ON z.id_klub=k.id_klub WHERE k.id_liga='".$_GET['id_liga']."'  
  6. ORDER BY k.klub "; 
  7. $wynik = mysql_query($sql) or die(mysql_error()); 
  8. echo '<table width="480" border=0>'; 
  9. $zm="";
  10. $nazwa_form=1;
  11. $nazwa_id=1;
  12. while($w = mysql_fetch_assoc($wynik)){ 
  13. if($w['klub']!=$zm)
  14. {
  15. echo('
  16. <tr width=480 height=20>
  17. <td colspan=4></td>
  18. </tr>
  19. <tr width=480 height=20>
  20. <td colspan=4 bgcolor=silver>'.$w['klub'].'('.$w['id_klub'].')</td>
  21. </tr>
  22. <tr width=480 height=20>
  23. <td colspan=4 >
  24. <form action="index.php?id=kontuzje1&dodaj=ok" method="post">
  25. Dodaj zawodnika
  26. <input type="checkbox" name="'.$nazwa_form.'" value="wartość" onclick="document.getElementById(''.$nazwa_id.'').style.display = this.checked ? 'block' : 'none'; this.form.elements['nazwisko'].disabled = this.form.elements['pozycja'].disabled = this.form.elements['wystepy'].disabled = this.form.elements['id_klub'].disabled = !this.checked" />
  27. <div id="'.$nazwa_id.'" style="display: none">
  28. <table>
  29. <tr>
  30. <td>Id</td>
  31. <td>Nazwisko</td>
  32. <td>Pozycja</td>
  33. <td>Występy</td>
  34. <td></td>
  35. </tr>
  36. <tr>
  37. <td><input type="text" size="4" name="id_klub" value="'.$w['id_klub'].'" /></td>
  38. <td><input type="text" name="nazwisko" disabled="disabled" /></td>
  39. <td><input type="text" size="3" name="pozycja" disabled="disabled" /></td>
  40. <td><input type="text" size="3" name="wystepy" disabled="disabled" /></td>
  41. <td><input type="submit" name="dodaj" value="Dodaj"></td>
  42. </tr>
  43. </table>
  44. </div>
  45. </form>
  46. </td>
  47. </tr>
  48. <tr width=480>
  49. <td width=280>'.$w['nazwisko'].'</td>
  50. <td width=20>'.$w['pozycja'].'</td>
  51. <td width=80>'.$w['wystepy'].'</td>
  52. <td width=100><a href="index.php?id=kontuzje1&usun='.$w['id_zawodnik'].'">Usuń zawodnika</a></td>
  53. </tr>');
  54. $zm=$w['klub'];
  55. $nazwa_form=$nazwa_form+1;
  56. $nazwa_id=$nazwa_id+1;
  57. }
  58. ?>

i teraz jeżeli jakiś zawodnik nie jest przypisany do klubu to nie pobiera mi id tego klubu, dlaczego?

przykładowo:
Arsenal (18)
zawodnik 1
zawodnik 2
-----------
Chelsea ()
-----------
liverpool (2)
zawodnik 5

dlaczego jak nie ma do klubu przypisanego zadnego zawodnika to nie pobiera mi jego id (klubu)
problem w tym ze jak chce dodac zawodnika to nie wiem jakiego urzyc id bo go ne widze (formularz)
golaod
Bo takie zapytanie utworzyłeś więc co tu się dużo dziwić ? Warunkiem jest by id klubu w zawodniku bylo takie jak w klubie. Skoro nie ma zawodnika ktory mialby to samo id co chelsea...no to po prostu nie ma rekordu który pojawi się w wynikach.
mczlowiek
to jak to poprawić aby było ok, bo jak zacząłem kombinować to w wynikach wyświetlało mi tylko te kluby które które mają przypisane zawodników, ale ja chcę aby wyświetlało mi wszystki kluby, nawet tych, które nie maja przypisanych zawodników.
golaod
http://en.wikipedia.org/wiki/Join_(SQL)
Zgodnie z tym co tam znalazłem. Przy użyciu np. FULL OUTER JOIN powinieneś dostać również wyniki z obu tabel które nie crossują się.
mczlowiek
  1. <?php
  2. if($_GET['id_liga']){
  3. mysql_query("set names utf8"); 
  4. $sql = " SELECT * 
  5. FROM kluby
  6.  FULL OUTER JOIN zawodnicy
  7. ON kluby.id_klub=zawodnicy.id_klub WHERE kluby.id_liga='".$_GET['id_liga']."'  
  8. ORDER BY kluby.klub "; 
  9. $wynik = mysql_query($sql) or die(mysql_error()); 
  10. echo '<table width="480" border=0>';
  11. ?>

zwraca błąd:
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 'OUTER JOIN zawodnicy ON kluby.id_klub=zawodnicy.id_klub WHERE kluby.id_li' at line 3
golaod
Moj blad nie popatrzylem ze w mysql nie ma FULL JOINA zatem musisz go zasymulowac:
http://www.xaprb.com/blog/2006/05/26/how-t...-join-in-mysql/
mczlowiek
mam tak:
  1. <?php
  2. mysql_query("set names utf8"); 
  3. $sql = " SELECT * FROM kluby k
  4. LEFT JOIN zawodnicy z ON z.id_klub=k.id_klub WHERE k.id_liga='".$_GET['id_liga']."' 
  5.  
  6. UNION
  7. SELECT * FROM kluby k 
  8. RIGHT JOIN zawodnicy z ON z.id_klub=k.id_klub WHERE k.id_liga='".$_GET['id_liga']."'
  9. AND z.id_klub IS NULL
  10. ";
  11. ?>
i nadal nie dziala...
golaod
No to juz pomyslu nie mam,a bez wgladu na baze ciezko mi to zrobic.
mczlowiek
napisz do mnie gg:5562985
golaod
No niestety aktualnie siedze w robocie i nie mam takiej mozliwosci.
mczlowiek
ponawiam pytanie, ponieważ nie moge sobie dać z tym rady.
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.