Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]zmienna jako nazwa tabeli w msql
Forum PHP.pl > Forum > Przedszkole
przemo191
Mam taki kod:

  1. $nr_rejestracji=$_POST['nr_rejestracji'];
  2. $typ=$_POST['typ'];
  3. $data_dodania=$_POST['data_dodania'];
  4. $przebieg_przy_dodaniu=$_POST['przebieg_przy_dodaniu'];
  5.  
  6. mysql_connect("localhost",$username,$password);
  7. @mysql_select_db($database) or die("Nie znaleziono bazy danych");
  8.  
  9.  
  10. $query= "CREATE TABLE $nr_rejestracji (id int(6) NOT NULL auto_increment, opis_naprawy varchar(300) NOT NULL, cena_naprawy varchar(30) NOT NULL, miejsce_wykonania varchar(30) NOT NULL, data_wykonania varchar(15) NOT NULL, przebieg_przy_naprawie varchar(20) NOT NULL,PRIMARY KEY (id))";
  11. mysql_query($query);


Problem tkwi w tym, że kiedy w "CREATE TABLE $nr_rejestracji" jest zmienna skrypt nie tworzy nowej tabeli w mojej bazie danych. Lecz kiedy $nr_rejestracji zmienię w stałą np. nr_rejestracji (bez znaku dolara), skrypt tworzy nową tabele.

Jestem początkujący w php jak i mysql, więc proszę o wyrozumiałość w moich pewnie podstawowych błędach.
nospor
1)
var_dump($nr_rejestracji);
Co ci wyświetla?

2) Tworzenie tabele na nową rejestracje to bezsens... tworzy sie tabele na rejestracje, gdzie każda rejestracja to nowy rekord w tabeli a nie nowa tabela.
przemo191
Zwraca:
  1. string 'FZ 2671' (length=7)


Nowa tabela na nowy numer rejestracji jest mi potrzebny, ale dużo tych rejestracji nie będzie, więc nie przeszkadza mi to.

/edit

Ponieważ później do każdej tabeli w inna rejestracją bedę musiał wpisywać sporo rekordów.
bastard13
Tworzenie tabeli dla każdego pojazdu to bardzo zły pomysł. Powinieneś utworzyć tabelę pojazdy, do której dodajesz kolejne rekordy.
Poza tym nigdy nie używaj @ w kodzie. Błędów się nie ukrywa, błędy się eliminuje lub im zapobiega. W dodatku wiele mówią i gwarantuję ci, że błędy to nie jest czyste zło, wręcz odwrotnie.
Jeżeli jednak upierasz się na tym tworzeniu tabeli to:
- dodaj do kodu, przed wywołaniem mysql_query(), var_dump($_POST) i napisz co ci wyświetla.
- dostajesz jakieś błędy lub cokolwiek takiego, czy zero reakcji?

@up trochę się spóźniłem:)
W nazwie tabeli nie możesz mieć spacji, zamień ją np. na _
nospor
twoja rejestracja ma spację.... gdy wstawiasz tekst stały to nie masz spacji....


nie:
CREATE TABLE $nr_rejestracji
a:
CREATE TABLE `$nr_rejestracji`

Cytat
Nowa tabela na nowy numer rejestracji jest mi potrzebny
Nie, nie jest ci potrzebna. Sam napisałeś, że jesteś początkujący, więc tylko ci się wydaje, że jest ci potrzebna.

Cytat
Ponieważ później do każdej tabeli w inna rejestracją bedę musiał wpisywać sporo rekordów.
To żaden argument
przemo191
Zwraca:

  1. 'nr_rejestracji' => string 'FZ 2671' (length=7)
  2. 'typ' => string 'ciągnik siodłowy' (length=18)
  3. 'data_dodania' => string '1.08.2011r.' (length=11)
  4. 'przebieg_przy_dodaniu' => string '182198km' (length=8)


Co do błędów, to zero.

Cytat(nospor @ 1.08.2011, 11:59:27 ) *
CREATE TABLE $nr_rejestracji
a:
CREATE TABLE `$nr_rejestracji`


Niestety nie działa ;(
nospor
spacje masz zamienić na _. Napisałem wcześniej z rozpędu i nie pomyślałem.
przemo191
FZ 2671 zmieniłem na FZ_2671, niestety dalej nic.
nospor
Pokaz kod po zmianach, bo pewnie coś zepsułeś.

Zanim jednak napiszesz kolejnego posta, zastosuj się do tego tematu:
Temat: Jak poprawnie zada pytanie
przemo191
Znalazłem chochlika, zamiast `$nr_rejestracji` wpisałem $nr_rejestracji`. Dzięki za tak błyskawiczną pomoc, oczywiście + będzie.
nospor
No to skoro problem rozwiązany to polecam ci jednak zmienic strukturę, bo gwarantuję ci, że prędzej czy później pożałujesz tego co masz teraz.

Dodatkowo:
cena ma być liczbą a nie tekstem
data wykonania ma być datą a nie tekstem
przebieg ma być liczbą a nie tekstem
przemo191
Być może, ale człowiek uczy się na błędach, jak się pogubię to wymyślę nową strukture wink.gif
Dzięki za podpowiedzi zaraz to pozmieniam.
nospor
Cytat
Być może, ale człowiek uczy się na błędach, jak się pogubię to wymyślę nową strukture
Człowiek uczy się też na wskazówkach. Skoro ktoś bardziej doświadczony ci doradza to lepiej posłuchaj już teraz. No ale Twoja sprawa smile.gif
przemo191
Cytat(nospor @ 1.08.2011, 12:23:48 ) *
Człowiek uczy się też na wskazówkach. Skoro ktoś bardziej doświadczony ci doradza to lepiej posłuchaj już teraz. No ale Twoja sprawa smile.gif


Nie zaprzeczę, bo jest to prawdą. A ty jaką strukturę byś proponował?
nospor
Musiałbym poznać większy obraz sytuacji. Opisz co to będzie, co tam będzie. Pisałeś coś o dużej liczbe rekordów dla danej rejestracji
przemo191
Ja widzę to miej więcej tak, muszą być opcje:
1. dodawania nowych samochodów do bazy,
2. do każdego samochodu trzeba będzie pododawać 5 różnych danych (opis naprawy, cena naprawy, miejsce wykonania, data wykonania, oraz przebieg samochodu przy naprawie)
3. aktualizacja tych 5 różnych pól z danymi w razie błędnego wpisania,
3. usuwanie rekordów z wpisami,
4. zliczanie kosztów wszystkich napraw dla każdego samochodu z osobna
5. zliczanie kosztów wszystkich napraw przy wszystkich samochodach

Wszystkie dane będą wprowadzane z odpowiedniego formularza.
nospor
tabela SAMOCHOD
ID
REJESTRACJA
inne dane dla samochodu

tabela NAPRAWA
ID
ID_SAMOCHODU - klucz obcy z tabeli SAMOCHOD wskazujący na pole ID
OPIS
CENA
MIEJSCE
DATA

I już. Na takiej strukturze zrealizujesz wszystko bez problemu. Na tym co ty wymyśliłeś, miałbyś już duże problemy.
przemo191
I to jest chyba najlepsze rozwiązanie, naprawdę dzięki Ci za pomoc.

Cytat(nospor @ 1.08.2011, 12:47:03 ) *
klucz obcy z tabeli SAMOCHOD wskazujący na pole ID


Jeszcze raz ja, zrobiłem wszystko co chciałem ale nie mogę zrobić tego co napisałeś. Po prostu nie wiem jak ;( szukałem w google, ale nic ciekawego mi nie pokazał.
nospor
Utworzyłeś pole o nazwie ID_SAMOCHODU?

Jeśli nie to utwórz i przejdź do punktu niżej

Jeśli tak to:
- wersja LITE:
i już masz to co napisałem
- wersja HARDCOR dla super hiper wyjadaczy*:
Jeśli chcesz mieć super hiper baze, to wypadałoby zrobić ją typu InnoDB i zakładać relacje między tabelami, by baza sama dbała o porządek.
Np. jak skasujesz samochód, to wszystkie naprawy dla tego samochodu się skasują z automatu. Albo np. na odwrót, że jeśli masz jakieś naprawy dla samochodu X to baza nie pozwili ci usunąć samochodu X.

* bez przesady z tymi super hiper wyjadaczami, ale jeśli dopiero zaczynasz, to można narazie olać etap super hiper kluczy obcych wink.gif
przemo191
Może być wersja lite happy.gif
pole id_samochodu stworzyłem już na początku, ale wartość tego pola wynosi 0, a powinno odpowiednio do id w tabeli samochody, czy jak?
nospor
tak, gdy tworzysz rekord w tabeli NAPRAWA, to id_samochodu ma być ustawione na id samochodu smile.gif
Przecież to logiczne, pole z ceną wypełniane jest ceną, pole przebieg wypełniane jest przebiegiem, a pole id_samochodu wypełniane ma być id samochodu, którego naprawa dotyczy.
Wilwarin
Mam skrypt na przejrzystą edycję bazy danych, więc się nim podzielę (mój pierwszy skrypt, jak i kontakt w PHP, pisałem go wtedy z 3 dni żeby działał tongue.gif Jako samouk byłem strasznie podekscytowany że działa biggrin.gif)
  1. $sql="SELECT * FROM SAMOCHOD";
  2. $result=mysql_query($sql);
  3.  
  4. $options="";
  5.  
  6. while ($row=mysql_fetch_array($result)) {
  7.  
  8. $id=$row["ID"];
  9. $thing=$row["REJESTRACJA"];
  10. $options.="<OPTION VALUE=\"$id\">".$thing.'</option>';
  11. }
  12. ?>
  13. <form name="player" method="post" action="aktualizacja.php">
  14. <SELECT NAME="selected">
  15. <OPTION VALUE=0>pick
  16. <?=$options?>
  17. </SELECT>
  18. <input type="submit" name="REJESTRACJA" value="Go">
  19. </form>
  20. <?php
  21. if ($_POST ['selected'] != 0){
  22. $pop = $_POST ['selected'];
  23. echo $pop;
  24.  
  25. $rew = "SELECT * FROM NAPRAWA WHERE ID = $pop";
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32. $reww = mysql_query($rew) or die(mysql_error());
  33. echo '<center>';
  34. $x = '<font color="#FFFFFF">';
  35. echo '<table border=0 RULES=NONE FRAME=BOX>';
  36. print("<tr align=center background=#000000 height=25>
  37. <td width=100>$x ID </td>
  38. <td width=40>$x ID_SAMOCHODU </td>
  39. <td width=40>$x OPIS </td>
  40. <td width=40>$x CENA </td>
  41. <td width=40>$x MIEJSCE </td>
  42. <td width=40>$x DATA </td>
  43. </tr>");
  44.  
  45. while($tit = mysql_fetch_array($reww)) {
  46. print("<tr align=center>");
  47. print("<td>$tit[ID]</td>\n");
  48. print("<td>$tit[ID_SAMOCHODU]</td>\n");
  49. print("<td>$tit[OPIS]</td>\n");
  50. print("<td>$tit[CENA]</td>\n");
  51. print("<td>$tit[MIEJSCE]</td>\n");
  52. print("<td>$tit[DATA]</td>\n");
  53. print("</tr>");
  54.  
  55.  
  56.  
  57.  
  58.  
  59. }
  60. echo '</table>';
  61. echo '</center>';
  62. }
  63. ?>
  64. <form name="xxx" action="aktualizacja.php" method="post">
  65. <center>
  66. <table>
  67. <tr align=center background=$link height=25>
  68. <td width=55>&nbsp</td>
  69. <td width=100>&nbsp</td>
  70. <td width=40><input type="text" name="selected" style="width:20px" value ="<?=$pop?>"/></td>
  71. <td width=40>+<input type="text" name="ID" style="width:20px" value ="0"/></td>
  72. <td width=40>+<input type="text" name="IDS" style="width:20px" value ="0"/></td>
  73. <td width=40>+<input type="text" name="OP" style="width:20px" value ="0"/></td>
  74. <td width=40>+<input type="text" name="CE" style="width:20px" value ="0"/></td>
  75. <td width=40>+<input type="text" name="MI" style="width:20px" value ="0"/></td>
  76. <td width=40>+<input type="text" name="DA" style="width:20px" value ="0"/></td>
  77. <td width=50><input type="submit" value="dodaj" /></td>
  78. </tr>
  79. </table>
  80. </center>
  81. </form>
  82.  
  83.  
  84. <?php
  85. $xm = $_POST ['ID'];
  86. $xw = $_POST ['IDS'];
  87. $xp = $_POST ['OP'];
  88. $xr = $_POST ['CE'];
  89. $xbp = $_POST ['MI'];
  90. $xbm = $_POST ['DA'];
  91. $pop = $_POST ['selected'];
  92.  
  93. echo $pop;
  94.  
  95. mysql_query("UPDATE NAPRAWA SET ID=$xm WHERE ID = $pop");
  96. mysql_query("UPDATE NAPRAWA SET ID_SAMOCHODU=$xw WHERE ID = $pop");
  97. mysql_query("UPDATE NAPRAWA SET OPIS=$xp WHERE ID = $pop");
  98. mysql_query("UPDATE NAPRAWA SET CENA=$xr WHERE ID = $pop");
  99. mysql_query("UPDATE NAPRAWA SET MIEJSCE=$xbp WHERE ID = $pop");
  100. mysql_query("UPDATE NAPRAWA SET DATA=$xbm WHERE ID = $pop");


Przerabiałem go trochę na szybko, więc mógł się wkraść jakiś błąd. Mam nadzieję, że pomogłem smile.gif

I sorry za nazwy zmiennych, trochę mogą namieszać.
nospor
mysql_query("UPDATE NAPRAWA SET ID=$xm WHERE ID = $pop");
mysql_query("UPDATE NAPRAWA SET ID_SAMOCHODU=$xw WHERE ID = $pop");
mysql_query("UPDATE NAPRAWA SET OPIS=$xp WHERE ID = $pop");
mysql_query("UPDATE NAPRAWA SET CENA=$xr WHERE ID = $pop");
mysql_query("UPDATE NAPRAWA SET MIEJSCE=$xbp WHERE ID = $pop");
mysql_query("UPDATE NAPRAWA SET DATA=$xbm WHERE ID = $pop");

To wszystko robi się jednym zapytaniem, po przecinku. Zajrzyj do manuala jaka jest składnia UPDATE

ps: to ci w ogole działa? Przecież np. tutaj:
mysql_query("UPDATE NAPRAWA SET OPIS=$xp WHERE ID = $pop");
powinien mysql wywalić ci błąd, bo brakuje apostrofów
mysql_query("UPDATE NAPRAWA SET OPIS='$xp' WHERE ID = $pop");
Wilwarin
Jak już mówiłem, to był mój pierwszy kontakt z PHP, więc i tak dobrze, że działa tongue.gif

A co do apostrofów to zmieniałem to trochę na szybko, a w swoim kodzie mam

  1. mysql_query("UPDATE tabela SET user_pts=user_pts+ $xm WHERE ID = $pop");


bo używam cyfr w $xm i dlatego ich nie dałem tongue.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.