Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][MySQL]
Forum PHP.pl > Forum > Przedszkole
Sampo511
Witam
mam następujący problem
.w poniższym kodzie chcę aby została utworzona tabela $_POST['tyt_ank'] z kolumnami $_POST['opis'][$a] z tym, że kolumn jest za każdym razem inna ilosć i mają one inne nazwy w tym przypadku po przejściu pętli wyrzuca mi ,ze tabela została utworzona i następnie że tabela taka już istnieje, wiem że wynik jest taki jak powinien być odnośnie tego zapytania,

Kod
       for($a=1; $a<=$de; $a++){
        $TA = "CREATE TABLE ".$_POST['tyt_ank']."(".$_POST['opis'][$a]." int(11) NOT NULL UNIQUE)";
  
        $results = mysql_query($TA) or die (mysql_error());
        print "Poprawnie utworzono tabelę";
   }


ja robię to poprzez:
Kod
   for($a=1; $a<=$de; $a++){
        $add="ALTER TABLE ".$_POST['tyt_ank']."
        ADD COLUMN (".$_POST['opis'][$a]." int(11) NOT NULL UNIQUE)";
        $results = mysql_query($add)
        or die (mysql_error());
        print "Poprawnie dodano kolumny z danymi";
        }

i jest OK ale czy można to zrobić w jednym zapytaniu?? i jak można od razu przypisać wstępne wartości w poszczególne kolumny jak robię tak:
Kod
for($a=1; $a<=$de; $a++){
        $TA1 ="INSERT INTO ".$_POST['tyt_ank']." (".$_POST['opis'][$a].")
                                               VALUES (0)";
  
         $results = mysql_query($TA1)
        or die (mysql_error());
        print "Poprawnie dodano wartości z danymi";


po tym INSER-cie tworzy miwartości dla poszczególnych kolumn ale też wyrzuca mi :

Kod
Poprawnie dodano wartości z danymi
Duplicate entry '0' for key 1


Prosze o jakieś rady
Pozdrawiam
Sampo511
Kicok
Co do tworzenia tabel, to wystarczy tutaj zwykłe łączenie stringów:
  1. <?php
  2.  
  3. $query = "CREATE TABLE {$_POST['tyt_ank']} (";
  4.  
  5. for( $a=1; $a<$de; $a++ ) {
  6. $query .= "{$_POST['opis'][$a]} INT(11) NOT NULL UNIQUE, ";
  7. }
  8.  
  9. // Kasujemy ostatni przecinek i zamykamy nawias
  10. $query = substr( $query, 0, -);
  11. $query .= ")";
  12.  
  13.  
  14. // echo $query;
  15. mysql_query( $query ) or die( mysql_error() );
  16.  
  17. ?>




A co do wstępnych wartości, to nie mam pojęcia o co ci chodzi. Podejrzewam natomiast, że skopałeś strukturę bazy danych ;]
Sampo511
Dzięki Kicok za odpowiedź-jestem w trakie nauki

a odnośnie tych danych początkowych to chodzi o to, że jeśli stworzę w taki sposób tabelę to nie mam przypisanych żadnych wartościnie ma tam żadnego rekordu i po to mi te "dane początkowe",


gdybyś mógł to pokazać dla INSERTA z mojego przykładu bo nie za bardzo rozumiem, dlaczego są te nawiasy "{" przy $_POST-ach i dlaczego Kasujemy ostatni przecinek i zamykamy nawias

byłbym wdzięczny za info
Kicok
1. Nawiasy klamrowe: Zmienne umieszczone w cudzysłowie zamieniane są na ich wartość. Można te zmienne zapisywać w klamrach, lub bez nich. Jest kilka różnic pomiędzy tymi dwoma zapisami, np dla tablicy wielowymiarowej:
  1. <?php
  2.  
  3.  
  4. $array[0][1][2] = 'ABCDE';
  5.  
  6. echo "tablica: $array[0][1][2]<br />";
  7. echo "tablica: {$array[0][1][2]}<br />";
  8.  
  9. ?>


ale w większości przypadków zapisy te będą działały identycznie. Ja się przyzwyczaiłem do zapisywania wszystkich zmiennych w klamrach - taki jest mój styl kodowania.


2. Ostatni przecinek:
Przed pętlą zmienna $query będzie miała wartość: CREATE TABLE jakis_tytul (
Później przy każdym przejściu pętli dodawana będzie jedna kolumna i przecinek zaraz za nią:
CREATE TABLE jakis_tytul (kolumna1 INT(11) NOT NULL UNIQUE,
CREATE TABLE jakis_tytul (kolumna1 INT(11) NOT NULL UNIQUE, kolumna2 INT(11) NOT NULL UNIQUE,
CREATE TABLE jakis_tytul (kolumna1 INT(11) NOT NULL UNIQUE, kolumna2 INT(11) NOT NULL UNIQUE, kolumna3 INT(11) NOT NULL UNIQUE,
Przecinek oddziela kolumny w tym zapisie,więc na końcu go być nie powinno. Dlatego przy pomocy substr" title="Zobacz w manualu PHP" target="_manual kasujemy dwa ostatnie znaki (przecinek i spację) i wstawiamy na końcu nawias:
CREATE TABLE jakis_tytul (kolumna1 INT(11) NOT NULL UNIQUE, kolumna2 INT(11) NOT NULL UNIQUE, kolumna3 INT(11) NOT NULL UNIQUE)


3. INSERT: Możesz go sobie "poskładać" w podobny sposób, albo podać nam szersze informacje do czego ci to jest potrzebne. Bo z tego co widzę, to chcesz mieć w bazie pełno tabel, których nazw nie znasz (bo są podawane w formularzu) i każda z tych tabel zawierać będzie tylko jeden wiersz danych
-Sampo511-
Dzięki Kicok za wytłumaczenie teraz to rozumiem wczoraj miałem jakąś zaćmę a jest to logiczne

Natomiast co do Inserta to jest mi to potrzebne do wprowadzenia do bazy "zer" bo przy wykonaniu formularza będę do danej bazy Updatował dopisywał cyfrę jeden

dotyczy to ankiety w właściwe jej wyników które będą prezentowane po oddaniu głosu
Sampo511
Jeszcze raz ja
co do INSERT-a to już sobie poradziłem

jeszcze raz dzięki

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