2012-03-26 22 views
1

Ich habe ein Formular, das eine Reihe von Feldern über die Details einer Kamera aufnimmt. Dies ist eine benutzerdefinierte Seite, die ich auf Joomla erstelle. Zuerst habe ich das Datenbankobjekt:mysql_real_escape_string nicht anwenden

$db = &JFactory::getDBO(); 

Prozess des Kameranamen in dem Formular eingetragen und in der DB:

$add_name = $_POST['camera_name']; 
$query_insert_camera = "INSERT INTO #__cameras (camera_name, ... , user_id) VALUES ('".mysql_real_escape_string($add_name)."', ... ,'".$user->id."')"; 
$db->setQuery($query_insert_camera); 
$db->query(); 

ich nur eine leere Zeichenfolge für Kameranamen bekommen. Wenn ich mysql_real_escape_string herausnehmen, funktioniert es gut. Ich schätze mysql_real_escape_string mag nicht die Art, wie ich eine Verbindung aufbaue ... denke ich.

Irgendwelche Ideen?

+0

Erhalten Sie eine Warnung? Die Dokumentation gibt an, dass eine Warnung ausgegeben wird, wenn keine Verbindung gefunden werden kann. Ansonsten würde ich empfehlen, das Verbindungshandle in den Funktionsaufruf zu legen. – staticsan

+0

Welche Art von Verbindung wird 'getDBO()' tatsächlich verwendet? Erzeugt man einen mit mysql_connect() oder mysqli() oder PDO? Welche API wird aufgerufen? mysql_real_escape_string() 'ist nur verfügbar, wenn die Verbindung mit mysql_connect()' hergestellt wurde. –

+1

Warum benutzt du Joomlas getVar nicht? http://docs.joomla.org/Retrieving_and_Filtering_GET_and_POST_requests_with_JRequest::getVar – Shaz

Antwort

1

Möglicherweise möchten Sie in JRequest :: getVar http://docs.joomla.org/Retrieving_and_Filtering_GET_and_POST_requests_with_JRequest::getVar

jedoch sehen, es scheint nicht, dass es in einem Modul verwendet werden können: http://groups.google.com/group/joomla-dev-general/browse_thread/thread/15ebde03b858c9e8

+0

Danke. Wie kann ich sehen, was es geflohen ist? Wenn ich nur die Ergebnisse zurückgebe, sehe ich nicht, dass es den Charakteren entgeht. – Tom

+0

Ich lerne immer noch selbst - als ich mit dieser Portion kämpfte, versuchte ich es zu brechen, indem ich in eine "um zu sehen, ob es entkam oder nicht. Vor der Verwendung von JRequest :: getVar brach es, danach nicht. – Gisto

-1

sollte Ihr Code arbeiten. Ich sehe mysql_real_escape_string() verwendet fast auf die gleiche Weise here.

Der Unterschied zwischen diesem Code und was Sie haben kleinere, aber vielleicht so etwas wie dieses stattdessen versuchen:

$db = &JFactory::getDBO(); 

// Escape the POST var as you grab it 
$add_name = mysql_real_escape_string(JRequest::getVar('camera_name', '', 'post', 'string')); 

$query_insert_camera = "INSERT INTO #__cameras (camera_name) VALUES ('" . $add_name . "')"; 
$db->setQuery($query_insert_camera); 
$db->query(); 
+0

Leider gibt es immer noch eine leere Zeichenfolge aus. – Tom

1

ich auf die Frage kam gerade mysql (i) _real_escape_string() innerhalb von Joomla verwenden, und stellte fest, dass ich die DB-Verbindung als ersten Parameter übergeben musste:

Verwandte Themen