2017-01-07 19 views
0

를 통해 편집 MySQL의 내용에 일부 오류가내가 어떤 문제를 PHP

난 내 프로젝트를 수행하지만, 문제는 당신은 당신의 SQL 구문에 오류가

처럼에있다; '= 입찰' 이 근처에 '깜짝 ='ASD를 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 1 ''라인 6 에서 편집 파일 편집 내 책 콘텐츠를

<?php 
include("../includes/config.php"); 
$cuser = mysql_query("SELECT * FROM books"); 
$id = intval($_GET['id']); 
$bname = strip_tags($_POST['bname']); 
$bpic = strip_tags($_POST['bpic']); 
$bdesc = strip_tags($_POST['bdesc']); 
$bauthor = strip_tags($_POST['bauthor']); 
$blink = strip_tags($_POST['blink']); 
if(isset($_GET['edit'])){ 
    $cuuser = mysql_fetch_object($cuser); 
    echo "<form action='editbook.php?edit=yes&id=".$cuuser->bid."' method='POST'> 
    <table> 
    <tr> 
    <td>bname : </td> 
    <td><input name='bname' type='text' value='".$cuuser->bname."' /></td> 
    </tr> 
    <tr> 
    <td>bpic : </td> 
    <td><input name='bpic' type='text' value='".$cuuser->bpic."' /></td> 
    </tr> 
    <tr> 
    <td>bdesc : </td> 
    <td><input name='bdesc' type='text' value='".$cuuser->bdesc."' /></td> 
    </tr> 
    <tr> 
    <td>blink : </td> 
    <td><input name='blink' type='text' value='".$cuuser->blink."' /></td> 
    </tr> 
    <tr> 
    <td>bauthor : </td> 
    <td><input name='bauthor' type='text' value='".$cuuser->bauthor."' /></td> 
    </tr> 
    <td><input name='do' type='submit' value='GO' /></td> 
    </table> 
    </form>"; 
} 
     if($_REQUEST['edit'] == 'yes'){ 
      $uuser = mysql_query("UPDATE books SET 
      bname = '$bname', 
      bpic = '$bpic', 
      bdesc = '$bdesc', 
      bauthor = '$bauthor' 
      blink = '$blink' 
      WHERE bid='$id' ") or die(mysql_error()) ; 
      if(isset($uuser)){ 
       echo "done"; 
      } 
     } 

?> 

내가 삭제할 때의 저장 및 을 편집 할 쿼리 (= '$ 깜빡'깜박)하지만 난 내 프로젝트 노트에 필요 : 나는 많은 시간 동안 깜박 변경 (같은 문제) 다른 이름을 시도

PHP를 통해 mysql 콘텐츠를 편집하는 또 다른 방법이 있다면 매우 행복합니다 :) anything le 내 프로젝트가 제대로

+0

'bauthor = '$ bauthor',', 쉼표를 유의하십시오. – Xorifelse

+1

이것은 라이브 사이트가 아닙니다. –

+0

해당 TYPO가 적절합니다. – RiggsFolly

답변

1

먼저

감사합니다 :) 일 T, 당신은 bauthorblink 라인 후 업데이트 문에 쉼표를 생략.

둘째, 입력 데이터 처리를하지 않은 것을 확인합니다. 그것은 SQL 주입에 매우 취약합니다. 누군가가 입력 데이터 안에 따옴표를 입력하면 저장 쿼리도 실패합니다. 그래서이 목적을 위해 수정해야합니다. 각 입력에 대해 mysql_real_escape_string 기능을 적용하면 쉼표가 포함 된 문자열 데이터의 저장 실패를 방지 할 수 있습니다.

그래서 빠른 수정을 위해 다음과 같은 코드를 시도 :

if($_REQUEST['edit'] == 'yes'){ 
      $uuser = mysql_query("UPDATE books SET 
      bname = '" . mysql_real_escape_string($bname) . "', 
      bpic = '" . mysql_real_escape_string($bpic) . "', 
      bdesc = '" . mysql_real_escape_string($bdesc) . "', 
      bauthor = '" . mysql_real_escape_string($bauthor) . "', 
      blink = '" . mysql_real_escape_string($blink) . "' 
      WHERE bid='$id' ") or die(mysql_error()) ; 
      if(isset($uuser)){ 
       echo "done"; 
      } 
     } 

더 나은 보안 옵션의 경우, 당신은 준비된 문 PDO을 시도 할 수 있습니다.

+1

+1 이제 보안 모드가 아니라고 말하면서 그것에 대해 이야기 해 줘서 고마워. 스크립트에서 버그를 찾고 프로그래밍하는 데 많은 시간이 걸린다. :) 고마워. –

+1

나는 사용하지 않을 것이다. mysql_real_escape_string()은 아직 mysql_ * 만 작동한다. 그것들은 낡고 비추천이며'mysql_real_escape_string()'은 여전히 ​​SQL 인젝션을 위해 열릴 수 있습니다. * "입력을 저장할 때마다 mysql_real_escape_string 함수를 적용하기 만하면됩니다."* - 그렇지 않습니다. 스택에 대한 다음 Q & A를 참조하십시오. http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string –

+1

* "보안을 강화하려면 PDO를 사용할 수 있습니다."* 준비된 진술이 없다면, PDO만으로는 여전히 주사가 잘됩니다. –