Joomla! Forum Schweiz wird Teil der D-A-CH Community

Nach vielen Jahren als zentrale Anlaufstelle für Fragen rund um Joomla! in der Schweiz wird das Joomla! Forum Schweiz künftig als Archiv weitergeführt.

Die Joomla!-Communities aus Deutschland, Österreich und der Schweiz arbeiten heute enger denn je zusammen. Deshalb bündeln wir künftig auch den deutschsprachigen Support und Austausch an einem gemeinsamen Ort im Joomla! D-A-CH Forum.

Für neue Fragen, Diskussionen und den Austausch mit der Community nutzt bitte ab sofort:

forum.joomla.de

Das Joomla! Forum Schweiz bleibt weiterhin bestehen und wird als Archiv im Lesemodus erhalten. Die vielen Beiträge, Lösungen und Erfahrungen aus den vergangenen Jahren bleiben damit weiterhin zugänglich und über die Suche auffindbar.

Wir bedanken uns herzlich bei allen Mitgliedern, Moderatoren und Helfern, die das Schweizer Joomla! Forum über viele Jahre mit ihrem Wissen und ihrem Engagement geprägt haben.

Wir sehen uns im Joomla! D-A-CH Forum!

Daten werden nicht in die Datenbank geschrieben

  • luckynuts
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
28 März 2009 12:27 #21377 von luckynuts
hey leute,

ich soll für meinen chef eine Komponente erstellen, mit der partner der firma ihre projekte "registrieren" können.

Da es eine schöne komponente von einem noch cooleren buch gibt, die in etwa das gleiche macht (com_reviews schreibt Restaurantreviews in eine Datenkbank und gibt diese im frontend aus)
dachte ich mir, nehm ich diese doch als grundbasis.

also bin ich hergegangen, und hab erstmal die datenbankfelder geändert und meinen wünschen nach angepasst.
danach bin hab ich mir die dateien

admin.reviews.html.php (das formular zum übergeben der daten)
controller.php (in der dateien sind die funktionen drinnen die verwendet werden sollen)
und die /tables/review.php (setzt die variablen auf null)

zur hand genommen und angepasst.

jetzt schreibt er aber nur das erstellungsdatum in die datenbank, der rest ist leer.
ich find leider den fehler nciht, kann mir wer helfen?

admin.reviews.html.php:
Code:
<?php defined( '_JEXEC' ) or die( 'Restricted access' ); class HTML_reviews { function editReview( $row, $lists, $option ) { // $editor =& JFactory::getEditor(); // JHTML::_('behavior.calendar'); ?> <form action="index.php" method="post" name="adminForm" id="adminForm"> <fieldset class="adminform"> <legend>Projektdetails</legend> <table class="admintable"> <tr> <td width="100" align="right" class="key"> Partnername: </td> <td> <input class="text_area" type="text" name="partnername" id="partnername" size="50" maxlength="250" value="<?php echo $row->partner_partnername;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Projektname: </td> <td> <input class="text_area" type="text" name="projektname" id="projektname" size="50" maxlength="250" value="<?php echo $row->partner_projektname;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Ansprechpartner: </td> <td> <input class="text_area" type="text" name="ansprechpartner" id="ansprechpartner" size="50" maxlength="250" value="<?php echo $row->partner_ansprechpartner;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Partner Email: </td> <td> <input class="text_area" type="text" name="partneremail" id="partneremail" size="50" maxlength="250" value="<?php echo $row->partner_email;?>" /> </td> </tr> <p><strong>Kunde<strong></p> <tr> <td width="100" align="right" class="key"> Firmenname: </td> <td> <input class="text_area" type="text" name="firmenname" id="firmenname" size="50" maxlength="250" value="<?php echo $row->kunde_firmenname;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Internetadresse: </td> <td> <input class="text_area" type="text" name="internetadresse" id="internetadresse" size="50" maxlength="250" value="<?php echo $row->kunde_internet;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Stra&szlig;e: </td> <td> <input class="text_area" type="text" name="strasse" id="strasse" size="50" maxlength="250" value="<?php echo $row->kunde_strasse;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Ort: </td> <td> <input class="text_area" type="text" name="ort" id="ort" size="50" maxlength="250" value="<?php echo $row->kunde_ort;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Postleitzahl: </td> <td> <input class="text_area" type="text" name="postleitzahl" id="postleitzahl" size="10" maxlength="5" value="<?php echo $row->kunde_postleitzahl;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Land: </td> <td> <?php echo $lists&#91;'land'&#93;; ?> </td> </tr> <tr> <td width="100" align="right" class="key"> Projektbetrag: </td> <td> <input class="text_area" type="text" name="projektbetrag" id="projektbetrag" size="50" maxlength="250" value="<?php echo $row->kunde_projektbetrag;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Zeitraum:<br /> <span class="small"><strong>Beispiel:</strong> 30-04-2009 bis 15-06-2009</span> </td> <td> <input class="text_area" type="text" name="zeitraum" id="zeitraum" size="50" maxlength="250" value="<?php echo $row->kunde_zeitraum;?>" /> </td> </tr> </table> </fieldset> <input type="hidden" name="id" value="<?php echo $row->id; ?>" /> <input type="hidden" name="published_date" value="<?php echo $row->published_date; ?>" /> <input type="hidden" name="option" value="<?php echo $option;?>" /> <input type="hidden" name="task" value="" /> <?php echo JHTML::_( 'form.token' ); ?> </form> <?php } ..........

controller.php
Code:
<?php defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.controller' ); class ReviewController extends JController { function __construct( $default = array() ) { parent::__construct( $default ); $this->registerTask( 'add' , 'edit' ); $this->registerTask( 'apply', 'save' ); $this->registerTask( 'unpublish', 'publish' ); } function edit() { global $option; $row =& JTable::getInstance('review', 'Table'); $cid = JRequest::getVar( 'cid', array(0), '', 'array' ); $id = $cid&#91;0&#93;; $row->load($id); $lists = array(); $land = array( '0' => array('value' => 'Deutschland', 'text' => 'Deutschland'), '1' => array('value' => 'Oesterreich', 'text' => '&Ouml;sterreich'), '2' => array('value' => 'Schweiz', 'text' => 'Schweiz'), ); $lists&#91;'land'&#93; = JHTML::_('select.genericlist', $land, 'land', 'class="inputbox" '. '', 'value', 'text', $row->kunde_land ); // $lists&#91;'smoking'&#93; = JHTML::_('select.booleanlist', 'smoking', 'class="inputbox"', $row->smoking); // $lists&#91;'published'&#93; = JHTML::_('select.booleanlist', 'published', 'class="inputbox"', $row->published); HTML_reviews::editReview($row, $lists, $option); } function save() { global $option; JRequest::checkToken() or die( 'Invalid Token' ); $row =& JTable::getInstance('review', 'Table'); if (!$row->bind(JRequest::get('post'))) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } $row->id = (int) $row->id; // Hier ist noch ein Fehler. er schreibt noch nicht alle daten in die datenbank $date =& JFactory::getDate($row->published_date); $row->published_date = $date->toMySQL(); if (!$row->store()) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } switch ($this->_task) { case 'apply': $msg = 'Changes to Review saved'; $link = 'index.php?option=' . $option . '&task=edit&cid&#91;&#93;='. $row->id; break; case 'save': default: $msg = 'Review Saved'; $link = 'index.php?option=' . $option; break; } $this->setRedirect($link, $msg); } function showReviews() { global $option, $mainframe; $limit = JRequest::getVar('limit', $mainframe->getCfg('list_limit')); $limitstart = JRequest::getVar('limitstart', 0); $db =& JFactory::getDBO(); $query = "SELECT count(*) FROM #__reviews"; $db->setQuery( $query ); $total = $db->loadResult(); $query = "SELECT * FROM #__reviews"; $db->setQuery( $query, $limitstart, $limit ); $rows = $db->loadObjectList(); if ($db->getErrorNum()) { echo $db->stderr(); return false; } jimport('joomla.html.pagination'); $pageNav = new JPagination($total, $limitstart, $limit); HTML_reviews::showReviews( $option, $rows, $pageNav ); } function remove() { global $option; $cid = JRequest::getVar( 'cid', array(), '', 'array' ); $db =& JFactory::getDBO(); if(count($cid)) { JArrayHelper::toInteger($cid); $cids = implode( ',', $cid ); $query = "DELETE FROM #__reviews WHERE id IN ( $cids )"; $db->setQuery( $query ); if (!$db->query()) { echo "<script> alert('".$db->getErrorMsg()."'); window. history.go(-1); </script>\n"; } } $this->setRedirect( 'index.php?option=' . $option ); } function publish() { global $option; $cid = JRequest::getVar( 'cid', array(), '', 'array' ); if( $this->_task == 'publish') { $publish = 1; } else { $publish = 0; } $reviewTable =& JTable::getInstance('review', 'Table'); $reviewTable->publish($cid, $publish); $this->setRedirect( 'index.php?option=' . $option ); } function comments() { global $option, $mainframe; $limit = JRequest::getVar('limit', $mainframe->getCfg('list_limit')); $limitstart = JRequest::getVar('limitstart', 0); $db =& JFactory::getDBO(); $query = "SELECT count(*) FROM #__reviews_comments"; $db->setQuery( $query ); $total = $db->loadResult(); $query = "SELECT c.*, r.name FROM #__reviews_comments AS c LEFT JOIN #__reviews AS r ON r.id = c.review_id "; $db->setQuery( $query, $limitstart, $limit ); $rows = $db->loadObjectList(); if ($db->getErrorNum()) { echo $db->stderr(); return false; } jimport('joomla.html.pagination'); $pageNav = new JPagination($total, $limitstart, $limit); HTML_reviews::showComments( $option, $rows, $pageNav ); } function editComment() { global $option; $row =& JTable::getInstance('comment', 'Table'); $cid = JRequest::getVar( 'cid', array(0), '', 'array' ); $id = $cid&#91;0&#93;; $row->load($id); HTML_reviews::editComment($row, $option); } function saveComment() { global $option; $row =& JTable::getInstance('comment', 'Table'); if (!$row->bind(JRequest::get('post'))) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } if (!$row->store()) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } $this->setRedirect('index.php?option=' . $option . '&task=comments', 'Comment changes saved'); } function removeComment() { global $option; $cid = JRequest::getVar( 'cid', array(), '', 'array' ); $db =& JFactory::getDBO(); if(count($cid)) { JArrayHelper::toInteger($cid); $cids = implode( ',', $cid ); $query = "DELETE FROM #__reviews_comments WHERE id IN ( $cids )"; $db->setQuery( $query ); if (!$db->query()) { echo "<script> alert('".$db->getErrorMsg()."'); window.history.go(-1); </script>\n"; } } $this->setRedirect( 'index.php?option=' . $option . '&task=comments' ); } } ?>

admin.reviews.php
Code:
<?php defined( '_JEXEC' ) or die( 'Restricted access' ); require_once( JApplicationHelper::getPath( 'admin_html' ) ); require_once( JPATH_COMPONENT.DS.'controller.php' ); JTable::addIncludePath(JPATH_COMPONENT.DS.'tables'); $controller = new ReviewController( array('default_task' => 'showReviews') ); $controller->execute( JRequest::getVar( 'task' ) ); $controller->redirect(); ?>
Code:
<?php defined('_JEXEC') or die('Restricted access'); class TableReview extends JTable { var $id = null; var $partner_partnername = null; var $partner_projektname = null; var $partner_ansprechpartner = null; var $partner_email = null; var $kunde_firmenname = null; var $kunde_internet = null; var $kunde_strasse = null; var $kunde_ort = null; var $kunde_postleitzahl = null; var $kunde_land = null; var $kunde_projektbetrag = null; var $kunde_zeitraum = null; var $user_id = null; var $published_date = null; var $published = null; function __construct(&$db) { parent::__construct( '#__reviews', 'id', $db ); } } ?>
Mehr
28 März 2009 16:01 #21378 von jimbo
Hast Du denn auch die Tabellenfelder in der Datenbank geändert/umbenannt? Die müssen dieselben Bezeichnung haben, sonst klappt das nicht...

Gruss Dany (Jimbo)
Kein Support per PN.
  • luckynuts
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
28 März 2009 16:03 #21379 von luckynuts
jap, die hab ich auch angepasst.
die heißen jetzt 1 zu 1 wie in der untersten datei hier im post.

also id, partner_partnername, partner_projektname ....
Mehr
28 März 2009 19:42 #21381 von Tribal6
Hossa....

Formularfelder, Datenbankfelder und Members der Tabellenklasse müssen denselben Namen haben, damit das so klappt.
Die Tableclass sucht beim "binden" z.B. für die Variable $partner_projektname eine gleichlautende Variable im (post)-Hash. Findet sie aber nicht, da sie durch den Formularnamen unter $_POST gespeichert ist. Wenn du da das Formularfeld umbenennst in ...name="partner_projektname"..... wird sie auch der entsprechenden Table-Class-Var zugeschrieben, und landet so auch in der Datenbank, anstelle des Initialwertes.

Das "published_date" wird als einziges gespeichert, weil da der Name überall gleich ist.

Cheers
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • luckynuts
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
29 März 2009 13:33 #21387 von luckynuts
wow wie geil! jetzt gehts!
du hast mir stunden gespart!! Dankeschön!
  • luckynuts
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
30 März 2009 11:40 #21391 von luckynuts
Jetzt bin ich leider auf ein weiteres Problem gestoßen.
Ich möchte einen View für den Registrierten Frontendbenutzer basteln, damit dieser Projekte Registrieren kann und somit in die Datenbank schreiben kann. Am besten mit published=1 damit es automatisch online ist.

ich hab den view mit den dateien:
add
-metadata.xml
-view.html.php
tmpl
--default.php

models
- add.php

das formular zeigt er mir auch an.
aber er schreibt mir wiedereinmal die daten nicht in die Datenbank und leitet mich auf eine 404 Error Seite (500 - Seitenansicht nicht gefunden [Name, Typ, Präfix]: frontpage,html,View) weiter wenn ich auf abschicken gehe.

die variablen welche ich im formular benutze hab ich in der add.php auf null gesetzt. diese heißen als Datenbankfeld genau gleich und auch im formular unter name="" heißen sie gleich.

hinweis: es ist sicher noch einiges an überflüssigen code in den dateien, da dies ja von der componente com_reviews stammt.

Models/add.php
Code:
<?php defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.model' ); class ModelReviewsAdd extends JModel { var $partner_partnername = null; var $partner_projektname = null; var $partner_ansprechpartner = null; var $partner_email = null; var $kunde_firmenname = null; var $kunde_internet = null; var $kunde_strasse = null; var $kunde_ort = null; var $kunde_postleitzahl = null; var $kunde_land = null; var $kunde_projektbetrag = null; var $kunde_zeitraum = null; var $user_id = null; var $published_date = null; var $published = null; var $id = null; function __construct() { global $mainframe; parent::__construct(); $params =& $mainframe->getParams(); $id = $params->get('id', 0); if(!$id) { $id = JRequest::getVar('id', ''); } $this->_id = $id; } /* function getReview() { if(!$this->_review) { $query = "SELECT * FROM #__reviews WHERE id = '" . $this->_id . "'"; $this->_db->setQuery($query); $this->_review = $this->_db->loadObject(); if(!$this->_review->published) { JError::raiseError( 404, "Invalid ID provided" ); } } return $this->_review; } */ } ?>

view.html.php
Code:
<?php defined( '_JEXEC' ) or die( 'Restricted access' ); jimport('joomla.application.component.view'); class ViewAdd extends JView { function display($tpl = null) { global $option, $mainframe; $model =& $this->getModel(); $user =& JFactory::getUser(); // $review = $model->getReview(); // $comments = $model->getComments(); $pathway =& $mainframe->getPathWay(); $backlink = JRoute::_('index.php?option=' . $option . '&view=all' ); $params = &$mainframe->getParams(); // $currency = $params->get('currency_symbol', '€'); $review->published_date = JHTML::Date($review->published_date); /* for($i = 0; $i < count($comments); $i++) { $row =& $comments&#91;$i&#93;; $row->comment_date = JHTML::Date($row->comment_date); } */ $pathway->addItem($review->name, ''); $this->assignRef('option', $option); /* $this->assignRef('review', $review); $this->assignRef('comments', $comments); $this->assignRef('backlink', $backlink); $this->assignRef('name', $user->name); $this->assignRef('currency', $currency); */ $this->assignRef('partner_partnername', $partner_partnername); parent::display($tpl); } } ?>

default.php
Code:
<?php defined( '_JEXEC' ) or die( 'Restricted access' ); ?> <form action="index.php" method="post" name="add"> <table> <tr> <td width="100" align="right" class="key"> Partnername: </td> <td> <input class="text_area" type="text" name="partner_partnername" id="partner_partnername" size="50" maxlength="250" value="<?php echo $row->partner_partnername;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Projektname: </td> <td> <input class="text_area" type="text" name="partner_projektname" id="partner_projektname" size="50" maxlength="250" value="<?php echo $row->partner_projektname;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Ansprechpartner: </td> <td> <input class="text_area" type="text" name="partner_ansprechpartner" id="partner_ansprechpartner" size="50" maxlength="250" value="<?php echo $row->partner_ansprechpartner;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Partner Email: </td> <td> <input class="text_area" type="text" name="partner_email" id="partner_email" size="50" maxlength="250" value="<?php echo $row->partner_email;?>" /> </td> </tr> <p><strong>Kunde<strong></p> <tr> <td width="100" align="right" class="key"> Firmenname: </td> <td> <input class="text_area" type="text" name="kunde_firmenname" id="kunde_firmenname" size="50" maxlength="250" value="<?php echo $row->kunde_firmenname;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Internetadresse: </td> <td> <input class="text_area" type="text" name="kunde_internet" id="kunde_internet" size="50" maxlength="250" value="<?php echo $row->kunde_internet;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Stra&szlig;e: </td> <td> <input class="text_area" type="text" name="kunde_strasse" id="kunde_strasse" size="50" maxlength="250" value="<?php echo $row->kunde_strasse;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Ort: </td> <td> <input class="text_area" type="text" name="kunde_ort" id="kunde_ort" size="50" maxlength="250" value="<?php echo $row->kunde_ort;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Postleitzahl: </td> <td> <input class="text_area" type="text" name="kunde_postleitzahl" id="kunde_postleitzahl" size="10" maxlength="5" value="<?php echo $row->kunde_postleitzahl;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Land: </td> <td> <input class="text_area" type="text" name="kunde_land" id="kunde_land" size="50" maxlength="250" value="<?php echo $row->kunde_land;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Projektbetrag: </td> <td> <input class="text_area" type="text" name="kunde_projektbetrag" id="kunde_projektbetrag" size="50" maxlength="250" value="<?php echo $row->kunde_projektbetrag;?>" /> </td> </tr> <tr> <td width="100" align="right" class="key"> Zeitraum:<br /> <span class="small"><strong>Beispiel:</strong> 30-04-2009 bis 15-06-2009</span> </td> <td> <input class="text_area" type="text" name="kunde_zeitraum" id="kunde_zeitraum" size="50" maxlength="250" value="<?php echo $row->kunde_zeitraum;?>" /> </td> </tr> </table> <input type="hidden" name="review_id" value="<?php echo $this->review->id; ?>" /> <input type="hidden" name="option" value="<?php echo $option; ?>" /> <input type="hidden" name="published_date" value="<?php echo $row->published_date; ?>" /> <input type="submit" class="button" id="button" value="Submit" /> </form>
Mehr
30 März 2009 12:45 #21392 von Tribal6
..so auf die Schnelle: Namenskonventionen beachten!

Für die View-Klasse:

[Komponame ohne com_]View[Viewname] - class ReviewsViewAdd extends JView

Model-Klasse:

[Komponame ohne com_]Model[Model/View-Name] - class ReviewsModelAdd extends JModel

Und die Form-Action würde ich auch noch ändern:
Code:
<form action="<?php echo JRoute::_('index.php?com_reviews&view=add') ?>">
oder was in dieser Art....

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • luckynuts
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
30 März 2009 13:56 #21395 von luckynuts
Ich hab das mal geändert aber so ganz funktionieren tut das noch ned ;(

default.php
Code:
<form action="index.php" IN <form action="<?php echo JRoute::_('index.php?com_reviews&view=add') ?>"

view.html.php
Code:
class ViewAdd extends JView IN class ReviewsViewAdd extends JView

add.php
Code:
class ModelReviewsAdd extends JModel IN class ReviewsModelAdd extends JModel
Moderatoren: Tribal6RePaoDragonlordChris Hoefligerpascaleadiheutschi.ch
Powered by Kunena Forum

Joomla! Verband Schweiz - Mitglied werden