it-swarm.com.de

einfügen in eine Datenbank aus Joomla-Formularfeldern

Ich bin Anfänger bei Joomla! Entwicklung und haben ein sehr einfaches Modul erstellt.

Wie erstelle ich ein Formular mit 3 Textfeldern und speichere die eingegebenen Werte in einer Datenbanktabelle?

15
jehan

Versuchen Sie dieses Beispiel:

Wir veröffentlichen den Vor- und Nachnamen eines Benutzers in einer Tabelle.

erstellen Sie eine Tabelle in Ihrer Datenbank. Beachten Sie, dass es das Präfix "jos_" haben sollte

Wir werden dieses Formular "Namen" nennen. Also werden wir unsere Tabelle "jos_names" nennen

Führen Sie in der SQL-Zeile in PHPMyAdmin (oder einem anderen von Ihnen verwendeten Tool) diese Abfrage aus, um eine neue Tabelle zu erstellen:

CREATE TABLE `databasename`.`jos_names` (`id` int(11) NOT NULL auto_increment, `firstname` VARCHAR(100), `lastname` VARCHAR(100), PRIMARY KEY  (`id`) )

Zur Vereinfachung werden die Ergebnisse auf derselben Seite veröffentlicht. Erstellen wir das Formular:

<?php

/** post form to db module **/

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



//--POST YOUR FORM DATA HERE-->
$fname = $_POST['fname'];
$lname = $_POST['lname'];
//--END POST YOUR FORM DATA---|
//--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($lname)) || (isset($fname)) ) {
   //first name or last name set, continue-->
   $data =new stdClass();
   $data->id = NULL;
   $data->firstname = $fname;
   $data->lastname = $lname;

   $db = JFactory::getDBO();
   $db->insertObject('#__names', $data, id);

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

?>

Das sollte es tun. Wenn Sie ein traditionelles Joomla-Modul schreiben, sollte dies Ihre helper.php-Datei sein.

HINWEISE: Fügen Sie das Skript "die" nur einmal in ein Joomla-Dokument ein. (Defined ('_JEXEC').

JURI :: current () liest automatisch die aktuelle Seiten-URL. Wenn Sie echo JURI :: current () aufrufen; Auf einer Seite mit der URL http://www.example.com/names wird derselbe Link angezeigt.

Es ist wichtig, dass action = "" auf die genaue URL verweist, unter der Sie dieses Modul veröffentlichen werden.

Darüber hinaus wird das Posten von Daten in "SELBST" als schlechte Praxis angesehen. Sie sind jedoch in gewisser Weise auf ein Modul beschränkt. Wenn Sie also keine Komponente oder ein Plugin erstellen, sollten Sie Ihr Formular wie in diesem Beispiel in "SELBST" posten. (JURI :: current ();)

Wenn Sie sich im Joomla-Framework befinden, müssen Sie Ihren Datenbanknamen, Benutzernamen oder Ihr Kennwort nicht deklarieren, da Joomla bereits "angemeldet" ist. Anstatt also databasename.jos__tablename abzufragen, können Sie die Abfrage in Joomla durch folgenden Code ersetzen: #__tablename. Tatsächlich ist dies die beste Vorgehensweise beim Umgang mit Datenbankabfragen und Joomla, da Benutzer nicht das Standardpräfix jos_ verwenden müssen. Joomla ersetzt "#" automatisch durch das Präfix. In meinem Fall ist "# " gleich "jos"

Beachten Sie, wenn Sie die SQL abfragen, um die Tabelle zu erstellen. Stellen Sie sicher, dass Sie databasename durch den tatsächlichen Namen Ihrer Datenbank ersetzen.

Das sollte es tun.

Wenn Sie aus irgendeinem Grund keine Daten veröffentlichen können: 1) Stellen Sie sicher, dass das Formular nicht auf eine andere Seite umleitet, wenn Sie auf Senden klicken. Wenn dies der Fall ist, ändern Sie die Formularaktion "" in die absolute URL, unter der diese Seite veröffentlicht wird. Gehen Sie dann von dort aus.

2) Manchmal funktioniert die Methode $ data = new nicht. Dies hängt davon ab, wie Sie Ihr Modul, Ihre Funktionen und Ihre Klassen eingerichtet haben. Hier ist eine Alternative:

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

Versuchen Sie etwas wie http://www.chronoengine.com/ - Chronoformen

0
Jeepstone

Sie können eine benutzerdefinierte Abfrage ausführen, um ein Ergebnis für die TMPL-Datei zu erhalten, das einfach ist

<?php // no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
$category =  $_REQUEST['category'];
if(isset($category))
    {
$db = JFactory::getDbo();
$db->setQuery("SELECT machine_id FROM j25_machinefinder_products WHERE category = '$category'");
// Load the row.
$result = $db->loadRowList();

//your result will return here
print_r($result);



    }

 ?>
<form action="" method="get" name="usedequipment">
<select name="category">
<?php foreach($hello as $category)
    {
    ?><option value="<?php echo $category[0]; ?>"> <?php echo $category[0]; ?></option><?php
    } ?>

</select>
<input type="submit"  />
</form>
0
Tousif