2013-05-14 3 views
0

Я создал эту форму, используя цикл while, так что мне не нужно делать 28 текстовых полей ... но когда я отправляю данные в свою базу данных mysql, он работает хорошо, но как отображать данные обратно в мою форму для редактирования и обновления .. когда я ввожу значение в текстовое поле (EX - submitted data from mysql в поле emp_name), то он повторяется 4 раза в текстовом поле .... я знаю, что это происходит из-за цикла, но есть любой способ, который я может отображать несколько данных в каждом текстовом поле для обновления после представления данных пользователя, как обычно ....Отображение данных из таблицы mysql

моего form.php

<form action="userdata.php" name="frmAdd" method="post"> 

<table width="80%" border="0" cellpadding="3" cellspacing="3" class="forms"> 
    <tr> 
    <td width="5"> <div align="center">NO</div></td> 
    <td width="91"> <div align="center">Employer's NAME</div></td> 
    <td width="160"> <div align="center">COUNTRY</div></td> 
    <td width="198"> <div align="center">POSITION</div></td> 
    <td width="70"> <div align="center">FROM</div></td> 
    <td width="70"> <div align="center">TO</div></td> 
    <td width="70"> <div align="center">SALARY</div></td> 
    <td width="70"> <div align="center">REASONS FOR LEAVING</div></td> 
    </tr> 

    <?php for($i=1;$i<=4;$i++) { ?> 

    <tr> 
    <th width="5"> <div align="center"><? echo $i . "."; ?></div></th> 
    <td><input type="text" name="emp_name<?=$i;?>" size="25" value="submitted data from mysql"></td> 
    <td><input type="text" name="emp_country<?=$i;?>" size="10"></td> 
    <td><input type="text" name="emp_pos<?=$i;?>" size="10"></td> 
    <td><input type="text" name="emp_frm<?=$i;?>" size="5"></td> 
    <td><input type="text" name="emp_to<?=$i;?>" size="5"></td> 
    <td><input type="text" name="emp_sal<?=$i;?>" size="5"></td> 
    <td><input type="text" name="emp_lev<?=$i;?>" size="25"></td> 
    </tr> 
    <?php } ?> 
    </table> 
    </br> 
    <input type="submit" name="doHis" value="Save Employment History"> 
    <input type="hidden" name="hdlfrm" value="<?=$i;?>"> 
    </form> 

и мой userdata.php

if($_POST['doHis'] == 'Save Employment History') 
    { 
     try{ 
       $conn = new PDO("mysql:host=localhost;dbname=dbname", "user", "pass"); 
      } 
      catch(PDOException $pe) 
       { 
        die('Connection error, because: ' .$pe->getMessage()); 
       } 

       for($i=1;$i<=$_POST["hdlfrm"];$i++){ 

         if($_POST["emp_name$i"] != ""){ 

          $sql = "INSERT INTO emp_table (emp_name, emp_country, emp_pos, emp_frm, emp_to, emp_sal, emp_lev) 
            VALUES (:emp_name, :emp_country, :emp_pos, :emp_frm, :emp_to, :emp_sal, :emp_lev)"; 
          $stmt = $conn->prepare($sql); 
          $stmt->bindParam(':emp_name', $_POST["emp_name$i"]); 
          $stmt->bindParam(':emp_country', $_POST["emp_country$i"]); 
          $stmt->bindParam(':emp_pos', $_POST["emp_pos$i"]); 
          $stmt->bindParam(':emp_frm', $_POST["emp_frm$i"]); 
          $stmt->bindParam(':emp_to', $_POST["emp_to$i"]); 
          $stmt->bindParam(':emp_sal', $_POST["emp_sal$i"]); 
          $stmt->bindParam(':emp_lev', $_POST["emp_lev$i"]); 
          $stmt->execute(); 

             echo "Save Done. Click <a href='phpMySQLListRecord.php'>here</a> to view."; 
           } 
} 



    } 

и вот снимок

enter image description here

+5

Вы в значительной степени просите атаку SQL-инъекций, используйте [подготовленные заявления] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php) t используйте расширения 'mysql_ *', [они устарели] (http://php.net/manual/en/changelog.mysql.php) – doublesharp

+2

Включить 'error_reporting (E_ALL)' это поможет. ; p –

+0

Да, у кода есть проблема с безопасностью, но на данный момент это позволяет пользователю, мне ... – fahim74

ответ

0

Проблема у вас есть ваша модель данных - вы сохраняете историю работы, но для кого? Он должен иметь employee_id где-то сказать, кому принадлежат эти данные, и присоединить его к таблице, которая сохраняет данные employee_table. Затем вам нужно иметь уникальный идентификатор на emp_table, чтобы идентифицировать каждую строку, которую вы можете использовать вместо своего индекса $i.

ТАБЛИЦА

history_id INT autoincrement | employee_id INT | emp_name VARCHAR | your other fields.... 

ВЫБРАТЬ

SELECT history_id, emp_name, ... FROM emp_history where employee_id = ? 

Вы можете затем цикл по результатам и использовать history_id для идентификации строки, что данные принадлежат обновить его. Передача нескольких полей с тем же именем будет массивом, который вы можете перебрать, поэтому вам не нужно использовать уникальное имя поля для каждого.

В качестве побочного примечания вы, вероятно, захотите использовать isset($_POST["key"]) вместо $_POST["key"] != "", чтобы проверить, было ли поле отправлено.

+0

ну немного путают здесь ....emp_table будет иметь уникальный идентификатор 'history_id', подобный 1, тогда emp_id для каждых 4 строк будет таким же, как 54 .. am i right and then ...? – fahim74

+0

Нет, идентификатор будет за строку в таблице, поэтому он будет уникальным идентификатором для этой строки, который вы можете использовать, чтобы сделать обновление. – doublesharp

+0

хорошо, что вы посоветовали хорошо работать .. thx ..bro, но все еще есть какая-то проблема ... и все еще работаю над этим ... – fahim74

Смежные вопросы