Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Skrypt zapisuje tylko jeden rekord do bazy
Forum PHP.pl > Forum > Przedszkole
Kloucek
Witam, jestem zielony w temacie (pewnie dlatego przedszkole) i mam problem, który spędza mi sen z powiek.

Mam formularz, którego ilość pól jest zależna od użytkownika. Przesyłam go metodą POST do pliku save.php, gdzie mam pętlę z instrukcjami wyświetlenia danych i zapisania rekordów do bazy. Problem w tym, ze choć dane wyświetlają się poprawnie, to do bazy danych zapisywany jest tylko jeden, pierwszy rekord.

Trochę kodu:
Najpierw kasuję istniejącą tabelę (w pliku z formularzem), żeby zaczynać zawsze od zera.
  1. <?php
  2. $con = mysql_connect("mydb9.surftown.dk:3306","user,"pass");
  3.     if (!$con)
  4.       {
  5.       die('Could not connect: ' . mysql_error());
  6.       }
  7.     // drop table
  8.    
  9.     mysql_select_db("bartosz_pub", $con);
  10.     $sql = "DROP TABLE IF EXISTS football";
  11.     mysql_select_db( 'bartosz_pub' );
  12.     $retval = mysql_query( $sql, $con );
  13.     if(! $retval )
  14.     {
  15.       die('Could not delete table: ' . mysql_error());
  16.     }
  17.    
  18.     mysql_close($con);
  19.   ?>



Następnie w pliku wynikowym tworzę ją na nowo:
  1. <?php
  2. <$con = mysql_connect("mydb9.surftown.dk:3306","user","pass");
  3.     if (!$con)
  4.       {
  5.       die('Could not connect: ' . mysql_error());
  6.       }
  7.    
  8.    
  9.    
  10.    
  11.    
  12.     // Create table
  13.     mysql_select_db("bartosz_pub", $con);
  14.     $sql = "CREATE TABLE football
  15.     (
  16.     team1 char(25),
  17.     team2 char(25),
  18.     channel char(15),
  19.     date int,
  20.     PRIMARY KEY(date),
  21.     time varchar(4),
  22.     display int
  23.     )";
  24.    
  25.     // Execute query
  26.     $create = mysql_query($sql,$con);
  27.             if ($create) echo"great";
  28.             else echo"not so great";
  29. ?>


No i mam pętlę, która uzupełnia (a przynajmniej powinna) bazę o wpisy:
  1. <?php
  2. <span id="intelliTxt"><pre class="alt2" style="border: 1px inset; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 450px;">$counter = count($_REQUEST)/5;
  3. for ($i=1; $i<=$counter; $i++){
  4.     print "<tr>";
  5.         @$team1 = $_POST['team1'.$i];
  6.     print "<td>".$i."</td>";
  7.     print "<td>".$team1."</td>";
  8.         @$team2 = $_POST['team2'.$i];
  9.     print "<td>vs</td>";
  10.     print "<td>".$team2."</td>";    
  11.         @$channel = $_POST['channel'.$i];
  12.     print "<td>on</td>";
  13.     print "<td>".$channel."</td>";    
  14.         @$date = $_POST['theDate'.$i];
  15.     print "<td>".$date."</td>";    
  16.         @$time = $_POST['time'.$i];
  17.     print "<td>".$time."</td>";
  18.     print "</tr>";
  19.         $save = "INSERT INTO football(team1,team2,channel,date,time,display) VALUES ('$team1','$team2','$channel','$date','$time','0');";
  20.         $execute = mysql_query($save);
  21.    
  22.  
  23.     $save = "INSERT INTO football(team1,team2,channel,date,time) VALUES ('$team1','$team2','$channel','$date','$time');";
  24.     $execute = mysql_query($save);
  25.         }
  26.  
  27.    
  28.     mysql_close($con);
  29. ?>



No i pupa, że się tak wyrażę. W bazie jest tylko 1 rekord - pierwszy wiersz.

Formularz w praktyce jest na www.bartosz.dk/pub
guilty82
Nie musisz dropowac tabelki, jesli chcesz miec ja pusta. Wystarczy ja wyczyscic
  1. <?php
  2. TRUNCATE TABLE `football`
  3. ?>


Przed wywolaniem petli for daj sobie
  1. <?php
  2. print_r($_POST);
  3. ?>

i zobacz jak wyglada ta tablica?
Kloucek
Tablica wygląda tak:
Kod
Array (    
[team11] => Chelsea     [team21] => Chelsea     [channel1] => channel 1     [theDate1] =>      [time1] =>      [team12] => Chelsea     [team22] => Chelsea     [channel2] => channel 1     [theDate2] =>      [time2] =>      [team13] => Chelsea     [team23] => Chelsea     [channel3] => channel 1     [theDate3] =>      [time3] =>      [team14] => Chelsea     [team24] => Chelsea     [channel4] => channel 1     [theDate4] =>      [time4] =>      [team15] => Chelsea     [team25] => Chelsea     [channel5] => channel 1     [theDate5] =>      [time5] =>  )


wydaje mi się, że dane są przekazywane poprawnie. Zwłaszcza, że są wyświetlanie poprawnie w pliku save.php
guilty82
przesylasz zmienne w tablicy $_POST a $counter robisz $_REQUEST.. cos tu chyba nie gra smile.gif

  1. <?php
  2. $counter = count($_REQUEST)/5;
  3.  
  4. ...
  5.  
  6. $team1 = $_POST['team1'.$i];
  7. ?>
Kloucek
Użyłem $_REQUEST tylko po to aby policzyć ile pól formularzy zostało przesłanych. To nie jest stała, bo formularz się powiela zależnie od potrzeb użytkownika (add more).

Zmieniłem na $_POST, ale wciąż zapisuje się tylko jeden rekord sad.gif
piaseq
A sprawdziłeś czy $counter ma poprawną wartość? Spróbuj wpisać
  1. <?php
  2. print_r($counter);
  3. ?>
przed wejściem do pętli. Upewnisz się, że wartość jest poprawnie policzona.
Ociu
1. Źle napisany temat
2. Nie poprawne bbCode, mamy [ php] więc proszę tego używać.

Jeżeli nie będziesz stosował się do zasad Twoje tematy będą zamykane.
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.