2012-10-14 3 views
0

이것은 사용자가 편집 할 수있는 일부 텍스트 상자가있는 edit_inv.php 용입니다.
문제는 공백이 포함 된 값입니다. 예. 시스코 라우터 (phpmyadmin에서), 텍스트 상자에 값을 인쇄하거나 편집하거나 그대로두면 시스코 만 있습니다. 라우터라는 단어가 없습니다. 사용자가 Cisco 라우터 부분을 편집하고 싶지 않고 라우터를 다시 입력해야하는 경우에는 좋지 않습니다.공백 뒤에있는 텍스트 상자에서 데이터베이스에서 검색된 값

편집 스크립트가 작동합니다. 공백 다음의 모든 내용이 텍스트 상자에 없습니다.

저는 PHP를 시작하고 도움을 주셔서 감사합니다.

<?php 

// Mysql Connect 
include('lock.php'); 
require_once('mysql.php'); 
$edit_inv = $_GET['inventory_id'] ; 

$_SESSION['edit_inv'] = $edit_inv; 

$query = "SELECT * FROM inventory WHERE unikl_id= $login_session_id and inventory_id='$edit_inv'"; 
$result = mysql_query($query); 

    echo '<form method="post" action="handle_inv_edit.php">'; 
     // Table header. 
    echo '<table align="center" cellspacing="0" cellpadding="5" border="2"> 
    <tr> 
    <td align="center"><b>Inventory ID</b></td> 
    <td align="center"><b>Device Name</b></td> 
    <td align="center"><b>Quantity</b></td> 
    <td align="center"><b>Level/Room</b></td> 
    <td align="center"><b>Email</b></td> 
    <td align="center"><b>Availability</b></td> 
    </tr>'; 

     // Fetch and print all the records. 
     while ($row = mysql_fetch_array($result)) { 
     echo '<tr> 
       <td align="center">' . $row['inventory_id'] . '</td> 

       <td align="left"><input type="text" size="60" 
       name="pro_name" value='.$row['pro_name'].'></td> 

       <td align="left"><input type="text" size="4" 
       name="quantity" value='.$row['quantity'].'></td> 

       <td align="center"><input type="text" size="4" 
       name="level" value='.$row['level'].'></td> 

       <td align="left"><input type="text" size="60" 
       name="email" value='.$row['email'].'></td> 

       <td align="left"><input type="radio" name="available" value="Yes" CHECKED > Yes 
         <input type="radio" name="available" value="No"> No</td> 


       </tr>'; 
    } 
    echo '</table>'; 

    echo '<br /><div align="center"><input type="submit" 
    name="Submit" value="Edit" /></div> 
    <input type="hidden" name="submitted" value="TRUE" />'; 

    echo '</form>'; 
?> 
+0

[더 이상 사용되지 않는 데이터베이스 API] (http://stackoverflow.com/q/12859942/19068)를 사용하고 있으며 [SQL 주입 공격] (http://bobby-tables.com/)에 자신을 노출시키고 있습니다. API를 사용하면 쉽게 방어 할 수 있습니다 (http://stackoverflow.com/questions/60174/bes). t-way-to-prevent-sql-injection-in-php)을 사용하십시오. – Quentin

+0

전체 텍스트가 HTML 소스에 나타 납니까? –

+0

보기 페이지 원본을 마우스 오른쪽 단추로 클릭한다는 의미의 경우 Clodoaldo, 5412를 수행합니다. 나에게 꽤 이상한 크기/이름/값처럼 검은 색이다. – user1744840

답변

5

있을 수 있습니다

+0

좋은 지점. @ user1744840이 [validator] (http://validator.w3.org) – Quentin

+0

을 사용하면 자동으로 선택됩니다. 이제 작동합니다. 대단히 감사합니다 GBD! :) – user1744840

+0

답장을 주신 다른 분들께도 감사드립니다. 필자는 PHP와 MySQL을 배우기 시작하면서 앞으로의 작업에서 SQL 주입 방지에 대해 살펴볼 것입니다. – user1744840

-1

SQL 삽입의 희생자가 될 수 있으며 이스케이프 처리되지 않았기 때문에 공간이 표시되지 않습니다. 텍스트 상자의 값 속성 주위 ""을 놓친 때문에 value contains space 다음은 텍스트

<td align="left"><input type="text" size="60" 
       name="pro_name" value="'.$row['pro_name'].'"></td> 

당신이 당신의 모든 텍스트 상자에 ""코드를 삽입해야하는이 방법을 나누기 경우

<?php 

if (isset($_POST)) 
{ 
    $pro_name = $_POST["pro_name"]; // if you already escaped in a form you simply print post 
} 

?> 

<?php 

// Mysql Connect 
include('lock.php'); 
require_once('mysql.php'); 
$edit_inv = mysql_real_escape_string($_GET['inventory_id']); 

$_SESSION['edit_inv'] = (int)$edit_inv; 

$query = "SELECT * FROM inventory WHERE unikl_id= $login_session_id and inventory_id='$edit_inv'"; 
$result = mysql_query($query); 

    echo '<form method="post" action="handle_inv_edit.php">'; 
    // Table header. 
    echo '<table align="center" cellspacing="0" cellpadding="5" border="2"> 
    <tr> 
    <td align="center"><b>Inventory ID</b></td> 
    <td align="center"><b>Device Name</b></td> 
    <td align="center"><b>Quantity</b></td> 
    <td align="center"><b>Level/Room</b></td> 
    <td align="center"><b>Email</b></td> 
    <td align="center"><b>Availability</b></td> 
    </tr>'; 

    // Fetch and print all the records. 
    while ($row = mysql_fetch_array($result)) { 
    echo '<tr> 
      <td align="center">' . mysql_real_escape_string($row['inventory_id']) . '</td> 

      <td align="left"><input type="text" size="60" 
      name="pro_name" value='.mysql_real_escape_string($row['pro_name']).'></td> 

      <td align="left"><input type="text" size="4" 
      name="quantity" value='.mysql_real_escape_string($row['quantity']).'></td> 

      <td align="center"><input type="text" size="4" 
      name="level" value='.mysql_real_escape_string($row['level']).'></td> 

      <td align="left"><input type="text" size="60" 
      name="email" value='.mysql_real_escape_string($row['email']).'></td> 

      <td align="left"><input type="radio" name="available" value="Yes" CHECKED > Yes 
        <input type="radio" name="available" value="No"> No</td> 


      </tr>'; 
    } 
    echo '</table>'; 

    echo '<br /><div align="center"><input type="submit" 
    name="Submit" value="Edit" /></div> 
    <input type="hidden" name="submitted" value="TRUE" />'; 

    echo '</form>'; 
?> 
+1

공백은 SQL에서 이스케이프 할 필요가 없습니다 (따옴표로 묶어야 함). 'addslashes'는 MySQL의 데이터 이스케이프에 적합하지 않습니다. – Quentin

관련 문제