2013-12-09 7 views
5

Czy mogę wiedzieć, czy można zapisać dane z formularza, który użytkownik wprowadził wcześniej?jak zapisać dane wprowadzone przez użytkownika na stronie formularza po wykonaniu skryptu?

Oto plik forma:

<!DOCTYPE HTML> 
    <html> 
    <head> 
     <meta http-equiv="content-type" content="text/html" />   
     <title>Data</title> 
     <style type="text/css"> 
     input { 
      background-color: #999; 
      border-style: solid; 
      border-color: #999; 
      border: 0px 4px 0px 4px; 
      padding: 3px 6px 3px 6px; 
      margin: 10px 0; 
     } 
     input:focus { 
      border-style: solid; 
      border-color: black; 
     } 
     </style> 
    </head> 

    <body> 

    <form action="count.php" method="post" action="post"> 
    Name: <input type="text" name="customername" /><br /> 
    DOB: <input type="text" name="date" /> <input type="text" name="month" /> <input type="text" name="year" /><br /> 
    First Row: <input type="text" name="rowone" /><br /> 
    Second Row: <input type="text" name="rowtwo" /><br /> 
    Third Row: <input type="text" name="rowthree" /><br /> 
    <input type="submit" value="Go" /> 
    </form> 

    </body> 
    </html> 

A oto php, które wykonują dane formularzy, że wprowadzone przez użytkownika.

<?php 
    $cname = $_POST['customername']; 
    $dob_date = $_POST['date']; 
    $dob_month = $_POST['month']; 
    $dob_year = $_POST['year']; 
    $year = gmdate("Y"); 
    $month = gmdate("m"); 
    $day = gmdate("d"); 
    $age = $year - $dob_year; // $age calculates the user's age determined by only the year 
    if ($month < $dob_month) { // this checks if the current month is before the user's month of birth 
     $age = $age - 1; 
    } else if (
      $month == $dob_month && $day >= $dob_date) { // this checks if the current month is the same as the user's month of birth and then checks if it is the user's birthday or if it is after it 
     $age = $age; 
    } else if ($month == $dob_month && $day < $dob_date) { //this checks if the current month is the user's month of birth and checks if it before the user's birthday 
     $age = $age - 1; 
    } 

    //add all initial data into an matrix variable for easier access to them later 
    //To access rowone use $rows[0][0], rowtwo $rows[1][0] ect. 
    //The matrix is an array which contains multiple array. eg. 2-dimensional arrays 
    //To get all the variables with $r1X simply retrieve the first array of the matrix eg $rows[0] 
    $rows = array(array($_POST['rowone']), array($_POST['rowtwo']), array($_POST['rowthree']), array()); 

    //Similarities between row1 and row2 made me incoporate modulo value as an argument. 
    function incmod($a, $m) { 
     return ($a % $m) + 1; 
    } 

    //Population each row, with $populationCount number of elements, where each element is added with incmod(X, $mod) 
    function populateRow($rowId, $populationCount, $mod) { 
     //The global keyword is needed in order for the function to access the global variable. 
     global $rows; 
     $row = $rows[$rowId]; 
     while (sizeof($row) < $populationCount) { 
      $rowInd = sizeof($row) - 1; 
      $m = incmod($row[$rowInd], $mod); 
      array_push($row, $m); 
     } 

     //Due to how php works with variables and references we need to set the row back into the global variable. 
     $rows[$rowId] = $row; 
    } 

    //This function makes sure that the values allways are between 1 and 12. 
    function bindToRange($v) { 
     if ($v == 0) 
      return 1; 
     return ($v - 1) % 12 + 1; 
    } 

    //Population the first three rows 
    populateRow(0, 7, 7); 
    populateRow(1, 12, 12); 
    populateRow(2, 12, 12); 

    //Creating the forth row by nested forloops. 
    //The first loop iterates over the entries in a row (in your example this would be the letters e.g r1a r1b ect) 
    //The second (inner) loop iterates of the rows (in you example this would be the number you had in your variables.) 
    //The sum over each of the three rows are added, then bound to 1-12 range, before being added to the forth row. 
    for ($cId = 0; $cId < 7; $cId++) { 
     $sum = 0; 
     for ($rId = 0; $rId < 3; $rId++) { 
      $sum += $rows[$rId][$cId]; 
     } 
     array_push($rows[3], bindToRange($sum)); 
    } 

    //Same as above, but for the last two remaining values. Should give a total of nine entries in the forth row. 
    for ($cId = 7; $cId < 12; $cId++) { 
     $sum = 0; 
     for ($rId = 1; $rId < 3; $rId++) { 
      $sum += $rows[$rId][$cId]; 
     } 
     array_push($rows[3], bindToRange($sum)); 
    } 

    function lower_than_2($var){ 
     return ($var > 1); 
    } 
    $cssClassName = "match"; 

    // array_count_values will count how many times each value is in the array 
    $cssBase = array_count_values($rows[3]); 
    // remove from array values that are lower than 2 
    $cssBase = array_filter($cssBase, "lower_than_2"); 

    $cssNumber = array(); 
    $cssCounter = 1; 
    // make $cssNumber be a mirror of $cssBase (same keys), but with serial values 
    foreach ($cssBase as $key => $value) { 
     $cssNumber[$key] = $cssCounter; 
     $cssCounter++; 
    } 
    unset($cssCounter); 
    // ------------------------------------------------ 

    ?> 
    <!DOCTYPE HTML> 
    <html> 
     <head> 
      <meta http-equiv="content-type" content="text/html" /> 
      <title>Result</title> 
      <link rel="stylesheet" type="text/css" href="./css/style.css" /> 
     </head> 

     <body> 
      Customer Name: <?php echo $cname; ?><br /> 
      DOB: <?php echo $dob_date; ?>/<?php echo $dob_month; ?>/<?php echo $dob_year; ?><br /> 
      <b><?php echo $age; ?></b> Years Old 
      <table> 
       <?php 
       //Instead of listing up (hard-coded) I've used nested forloops to generate the html. 
       //The loops are similar to the ones above, but use sizeof keyword to figure out how many iterations it needs. 

       $lines = sizeof($rows)+1; // $rows have 4 rows, we will need 1 more 
       for ($rId = 0; $rId < $lines; $rId++) { 
        echo "<tr>\n"; 

        if($rId < 3){ 
         $row = $rows[$rId]; 
         $rowSize = sizeof($row); 

         for ($cId = 0; $cId < $rowSize; $cId++) { 
          echo "<td>" . $row[$cId] . "</td>\n"; 
         } 
        } else if($rId == 3){ 
         $row = $rows[$rId]; 
         $rowSize = sizeof($row); 

         for ($cId = 0; $cId < $rowSize; $cId++) { 
          echo "<td"; // open td 
          // if the value is in cssBase array, we will apply a css class 
          if(array_key_exists($row[$cId], $cssBase)) 
           echo ' class="'. $cssClassName . $cssNumber[$row[$cId]] .'"'; 
          echo ">"; // close td 
          echo $row[$cId]; 
          echo "</td>\n"; 
         } 
        } else if($rId == 4){ 
         for ($cId = 0; $cId < 12; $cId++) { 
          if($cId == (($age-1)%12)){ 
           echo '<td>'. "$age Years Old" .'</td>'."\n"; 
          } else { 
           echo "<td></td>\n"; 
          } 
         } 
        } 
        echo "</tr>\n"; 
       } 

    // ------------------------------------------------ 

       ?> 
      </table><br /><br /> 
      <a href="./" target="_blank" title="Calculate Again">Calculate Again</a> 

     </body> 
    </html> 

Czy jest możliwe aby dodać przycisk Save na stronie count.php a wartość będzie tym, który przycisk użytkownika w wcześniej na stronie formularza. A przycisk zapisu wyświetli echo "Dane zapisane" lub, jeśli istnieje, wyświetli "Dane już istniejące", które znajdują się na tej samej stronie. Jeśli tak, to jakiej metody muszę użyć? Jestem całkowicie nowy, ponieważ szukam google, nie mogłem znaleźć dokładnie odpowiedzi, której potrzebuję. Już utworzyłem tabelę w mysql do przechowywania danych.

Dane, które chcę przechowywać to data urodzenia, rowone, rowtwo i rząd trzeci. Stwórz tabelę w mysql z dob jako date, rowone, rowtwo i rowthree jako varchar (255) i id jako int (11).

Oto moja insertdata.php

<?php 

    $dbhost = "localhost"; 

    $dbuser = "root"; 

    $dbpass = ""; 

    $dbname = "mama"; 

    class dob { 
     public function set_dob($dob_date, $dob_month, $dob_year) { 
      $this->dob = $dob_date.'/'.$dob_month.'/'.$dob_year; 
     } 
    } 

    $con=mysqli_connect($dbhost,$dbuser,$dbpass,$dbname); 
    $sql="INSERT INTO profile (dob,rowone,rowtwo,rowthree) VALUES ('$_POST[dob]','$_POST[rowone]','$_POST[rowtwo]','$_POST[rowthree]')"; 

    if (!mysqli_query($con,$sql)) 
     { 
     die('Error: ' . mysqli_error($con)); 
     } 
    echo "1 record added"; 

    /* close connection */ 
    $mysqli->close(); 
    ?> 

i pokazuje błąd jak poniżej: Zawiadomienie: Undefined index: DOB w katalogu C: \ xampp \ htdocs \ mama \ inc \ insertdata.php na linii 18

Wskazówki: niezdefiniowany index: rowone C: \ xampp \ htdocs \ mama \ Inc \ insertdata.php na linii 18

Wskazówki: niezdefiniowany index: rowtwo C: \ xampp \ htdocs \ mama \ Inc \ insertdata .php on line 18

Uwaga: Niezdefiniowany indeks: rowthree w C: \ xampp \ htdocs \ mama \ inc \ insertdata.php on line 18 1 rekord dodany Uwaga: Niezdefiniowana zmienna: mysqli w C: \ xampp \ htdocs \ mama \ inc \ insertdata .php na linii 27

Fatal error: Zadzwoń do końca funkcji członka() na non-object in C: \ xampp \ htdocs \ mama \ inc \ insertdata.php na linii 27

Odpowiedz

0

do przechowywania danych wysłane z twojej strony widoku, myślę, że musisz najpierw ustanowić połączenie między twoją aplikacją a bazą danych MySQL w twoim count.php, a następnie stworzyć metodę przechowywania twoich danych.

Może chcesz zobaczyć link:

http://www.w3schools.com/php/php_mysql_insert.asp

Nadzieja pomaga

0

Istnieje wiele sposobów, aby to zrobić ... Korzystanie z bibliotek stronie klienta (jQuery, angularjs, dojo .. . etc), które można zrobić za pomocą AJAX poprawności połączeń, lub jeśli chcesz używać zwykłego html z php, można użyć coś podobnego do tego:

<form action="count.php" method="post" action="post"> 
Name: <input type="text" name="customername" value="<?php echo $prevCName; ?>" /><br /> 
DOB: <input type="text" name="date" value="<?php echo $prevDate; ?>" /> <input type="text" name="month" value="<?php echo $prevMonth; ?>" /> <input type="text" name="year" value="<?php echo $prevYear; ?>" /><br /> 
First Row: <input type="text" name="rowone" value="<?php echo $prevROne; ?>" /><br /> 
Second Row: <input type="text" name="rowtwo" value="<?php echo $prevRTwo; ?>" /><br /> 
Third Row: <input type="text" name="rowthree" value="<?php echo $prevRThree; ?>" /><br /> 
<input type="submit" value="Go" /> 
</form> 

ten plik formularza musi być plikiem php i powinieneś upewnić się, że poprzednie wartości zostały zapisane ... albo w $ _SESSION lub ... w poprzednim pliku przy użyciu zawiera ... wymaga ... itd.

+0

ale jak to zrobić z moim aktualnym kodem? Jestem trochę nowy i utknąłem tutaj, wszystko jest ustawione tylko trzeba zapisać w bazie danych tylko – Jeff

0

W końcu po prostu chcesz wykonać następujące czynności:

$con=mysqli_connect($host,$user,$password,$db); 
$sql = "INSERT INTO tablename (dob,rowone,rowtwo,rowthree) 
VALUES (".$_POST['customername'].",".$_POST['date'].",".$_POST['month'].",".$_POST['year'].");" 
mysqli_query($con,$sql); 

Używam mysqli w moim przykładzie. Lepsze podejście jest oczywiście PDO: http://tw1.php.net/manual/en/book.pdo.php

Ostatecznie będziemy chcieli bezpieczeństwa oczywiście, więc będziesz używać przygotowanych sprawozdań: http://php.net/manual/en/pdo.prepared-statements.php

+0

Dodałem kod błędu, umysł, aby spojrzeć, gdzie się nie pomyliłem? ale nie było danych dodanych do bazy danych – Jeff

+0

Powinno być: '$ sql =" INSERT INTO profile (dob, rowone, rowtwo, rowthree) VALUES ($ _POST [dob], $ _ POST [rowone], $ _ POST [rowtwo] , $ _ POST [rowthree]) ";' lub '$ sql =" INSERT INTO profile (dob, rowone, rowtwo, rowthree) VALUES (". $ _POST [dob].", ". $ _ POST [rowone]. ",". $ _ POST [rowtwo]. ",". $ _ POST [rowthree]. ")"; PRZYPOMINAJĄC, że istnieje '$ _POST [rowone]'. Nie jestem pewien, czy jest to zmienna, której chcesz użyć, czy też powinna to być '$ _POST ['rowone']' – Viridis

+0

ciągle ten sam błąd – Jeff

0

Być może można dostać to, co chcesz przy użyciu find („pierwszy”) lub znajdź ("wszystkie").

$ex = $this->find('first' , array(
'condition' => array ('model_name.id' => 22 //specific id 
))); 

Możesz uzyskać dowolną wartość z tabeli/tabel o określonej lokalizacji (identyfikator). Aby być bardziej zrozumiałym, np. Element kolumny j-tej wiersza.

Powiązane problemy