2014-02-15 3 views
1

Здесь ошибка я получаю:данных не будет размещать в базе данных MySQL

SQL QUERY: INSERT INTO portfolio (portImg,portTitle,portDesc,portCat,portSkill,portDate) VALUES (IMAGE, TITLE, sadasdasd, CAT, SKILL, 2014-02-15 08:53:10) 
Could not enter data: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 
sadasdasd, CAT, SKILL, 2014-02-15 08:53:10)' at line 1 

Вот мой PHP код:

<?php 

//if form has been submitted process it 
if(isset($_POST['submit'])){ 

    $portImg =$_POST['portImg']; 
    $portTitle =$_POST['portTitle']; 
    $desc=$_POST['portDesc']; 
    $portDesc = trim($desc); 
    $portCat=$_POST['portCat']; 
    $portSkill=$_POST['portSkill']; 
    $portDate=date('Y-m-d H:i:s'); 

    //very basic validation 
    if($portImg ==''){ 
     $error[] = 'Please enter the title.'; 
    } 
    if($portTitle ==''){ 
     $error[] = 'Please enter the title.'; 
    } 

    if($portDesc ==''){ 
     $error[] = 'Please enter the description.'; 
    } 

    if($portCat ==''){ 
     $error[] = 'Please enter the content.'; 
    } 

    if($portSkill ==''){ 
     $error[] = 'Please enter the content.'; 
    } 

    if(!isset($error)){ 

     $query="INSERT INTO portfolio (portImg,portTitle,portDesc,portCat,portSkill,portDate) VALUES ($portImg, $portTitle, $portDesc, $portCat, $portSkill, $portDate)"; 


     echo "SQL QUERY: ".$query."<br />"; 


     if (!mysql_query($query)) 
     { 
      die('Could not enter data: ' . mysql_error()); 
     } 
     echo "Entered data successfully\n"; 
     } 

      //redirect to index page 
      header('Location: index.php?action=added'); 
      exit; 

     } 

//check for any errors 
if(isset($error)){ 
    foreach($error as $error){ 
     echo '<p class="error">'.$error.'</p>'; 
    } 
} 
?> 

Это, как представляется, проблема вызвана TEXTAREA (описание). Кажется, это добавление пространства до и после. Есть идеи?

+2

Вау, ваш код очень уязвим для SQL-инъекции. Используйте [PDO] (http://www.php.net/manual/en/book.pdo.php). Если это для курсов, пожалуйста, сообщите учителю, что функции 'mysql()' официально устарели. Вы можете использовать либо 'mysqli()' функции, либо PDO (рекомендуется). – KarelG

+0

Хороший URL-адрес может помочь вам http://www.mustbebuilt.co.uk/php/insert-update-and-delete-with-pdo/ –

ответ

2

для строковых полей, вы должны вложить свою ценность с ' во время вставки ... как:

SQL QUERY: INSERT INTO portfolio (portImg,portTitle,portDesc,portCat,portSkill,portDate) 
VALUES ('IMAGE', 'TITLE', 'sadasdasd', 'CAT', 'SKILL', '2014-02-15 08:53:10') 

Так что ваш PHP должен быть

INSERT INTO portfolio (portImg,portTitle,portDesc,portCat,portSkill,portDate) 
VALUES ('$portImg', '$portTitle', '$portDesc', '$portCat', '$portSkill', '$portDate') 
0

Вы не дезинфицируете свой вход. Если теперь вы вставляете двойную кавычку (") в одну из своих строк, ваша строка запроса сбрасывается, и вы получаете недопустимый запрос.

Кроме того, вы рискуете XSS-атаками, поскольку каждый может ввести запрос по желанию . способ

0

Поместите 'sadasdasd' в одинарные кавычки иначе SQL воспринимает его как столбец таблицы

0

я думаю, вы вошли apostroph в вашем описании текстового поля

использование попробовать этот

$portTitle = mysql_real_escape_string($portTitle) ; 
    $portDesc = mysql_real_escape_string($portDesc) ; 
    .... 
    .....//escape other variables also like that. 

затем использовать это:

VALUES ('".$portImg."', '".$portTitle."', '".$portDesc."', '".$portCat."', '".$portSkill."', '".$portDate."') 
Смежные вопросы