2013-08-29 2 views
0

저는 Joomla 모듈에서 작업하고 있습니다. 폼에서 입력을 받아서 데이터베이스에 삽입하려고합니다. 여기 내 "helper.php"코드입니다 :PHP가 데이터베이스에 삽입되지 않습니다.

<?php 

/** post form to db module **/ 

// No direct access 
defined('_JEXEC') or die('Restricted access'); 



//--build the form------------> 
?> 
<form name="names" id="names" action="<?php echo JURI::current(); ?>" method="post"> 
    <p><input type="text" name="fname" id="fname" value="" /></p> 
    <p><input type="text" name="lname" id="lname" value="" /></p> 
    <p><input id="submit" name="submit" type="submit" value="Submit Names" /></p> 
</form> 
<!-- //--END BUILD THE FORM--------| --> 
<? 
if((isset($_POST['lname'])) || (isset($_POST['fname']))) { 
    //first name or last name set, continue--> 
    $lname = $_POST['lname']; 
    $fname = $_POST['fname']; 
/* $data =new stdClass(); 
    $data->id = NULL; 
    $data->firstname = $fname; 
    $data->lastname = $lname;*/ 

    $db =& JFactory::getDBO(); 
    $query = "INSERT INTO `#__names` (`fname`, `lname`) 
     VALUES ($fname, $lname);"; 
    $db->setQuery($query); 
    $db->query(); 

} else { 
    echo '<h4>One Field Is Required!</h4>'; 
} 

?> 

내가 양식을 볼 수는 있지만 데이터를 전송할 때이 데이터베이스 테이블을 업데이트하지 않습니다. 아파치 오류 로그를 확인했지만 그것에 대한 정보가 없습니다. 내가 뭘 놓치고 있니?

+1

'$ dB = JFactory :: getDBO(); 비트 PHP4이다', 그냥 다음 '사용 PDO' 또는', 다음 괜찮은 쿼리를 작성하는 법을 배워야하고 주입에 대해 배울 ... 앰퍼샌드 드롭 mysqli_ *'. 나는 이것이 무딘 것을 알지만 코드가 아파요 –

+0

어떤 버전의 joomla가 있습니까? – Elin

+0

내 Joomla! 버전은 Joomla! 2.5. – ArthurTheLearner

답변

1

필드가

$lname = (trim($lname) != '') ? $lname : 'NULL'; 
$fname = (trim(fname) != '') ? $fname : 'NULL'; 
+0

작동하지 않습니다. 나는 아직도 같은 결과를 얻는다. – ArthurTheLearner

+0

삽입 쿼리 앞에'$ _POST'를 출력하고 – Gautam3164

+0

'print ($ _ POST);가'Array'를 출력합니다. '$ _POST [ 'fname']'또는'$ _POST [ 'lname']'을 출력하면 필드에 무엇을 넣을 수 있습니다. – ArthurTheLearner

0

처럼 비어있는 경우이 시도 NULL을 삽입해야 $fname

$query = "INSERT INTO `#__names` (`fname`, `lname`) 
      VALUES ('".$fname."', '".$lname."')"; 

$lname 선택적 문자열에 따옴표를 쿼리에서 ; 제거하고 추가

$query = "INSERT INTO `#__names` (`fname`, `lname`) 
    VALUES ('$fname', '$lname');"; 
+0

데이터베이스를 사용하는 경우 insert into를 사용하지 마십시오. mysql이 아닙니다. – Elin

+1

@Elin : ?? 무슨 소리 야? [MSSql] (http://msdn.microsoft.com/en-us/library/aa977880(v=vs.71) .aspx), [PostgreSQL] (http://www.postgresql.org/docs/8.2/) static/sql-insert.html), SQLite ... 모두 INSERT INTO'를 알고 있습니다 ... 게다가 DB 어댑터를 변경할 가능성이있는 경우 ORM이 필요합니다. 괜찮은 API를 사용하면 하드 - 코드 쿼리 –

+2

그래, 구피했다, 삽입에 차이가 있지만이 경우지만, 그는 joomla 쿼리 작성기를 사용 하여이 같은 문자열을 사용해야합니다. – Elin

3

귀하의 질의에 대해서는 2.5와 같이 작동하지 않는 방식과 비슷해야합니다.

$db = JFactory::getDbo(); 

$query = $db->getQuery(true) 

->insert($db->quoteName('#__names')) 
->columns(array($db->quoteName('fname', 'lname'))) 
->values($db->quote($fname),$db->quote($lname)); 
$db->setQuery($query); 
$db->execute(); 
+0

작동하지 않습니다. 아파치 오류 로그에 다음과 같은 내용이 있습니다 :'PHP 구문 분석 오류 : 예기치 않은 구문 오류 '->'(T_OBJECT_OPERATOR) in ... [skipped] ' – ArthurTheLearner

+0

ack이 세미콜론을 제거합니다. ... 고정 – Elin

+0

나는 동일한 출력을 얻었다. 아파치 오류 로그에는 시각화와 같은 메시지가 없습니다. – ArthurTheLearner

관련 문제