w3concepts.form

Gesperrt
marcello89
Beiträge: 116
Registriert: Di 20. Sep 2005, 18:10
Wohnort: Lörrach
Kontaktdaten:

w3concepts.form

Beitrag von marcello89 »

hallo zusammen,

ich habe folgendes problem seitdem ich das formular modul eingebaut habe:

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /srv/www/vhosts/vp-inet.de/httpdocs/contenido/includes/include.con_editcontent.php(619) : eval()'d code on line 840

an was könnte dies liegen viele grüße und danke marcello
GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ »

Das ist nur ein "Warning" von PHP dass die Funktion pass-by-reference oder so als deprecated eingestuft ist...
wenn Du also eine zukünftige PHP Version verwendest kann es sein dass da irgendwas nicht mehr funktioniert...

ist denn auf Deinem Server im PHP allow_call_time_pass_reference auf on ??

aber ich denke da ist irgendwo ein "&" zuviel 8)
GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ »

Oder es wird eine fehlerhafte Referenz übergeben... glaub ich... aber das war ja das & ??? öhhmm... ich werd müde :?
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

poste mal die klasse. ich kann dir dann sagen, wo du eine anpassunge machen musst. das ganze hängt mit der übergabe per referenz zusammen, die künftig dann nicht mehr funktionieren wird.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
marcello89
Beiträge: 116
Registriert: Di 20. Sep 2005, 18:10
Wohnort: Lörrach
Kontaktdaten:

Beitrag von marcello89 »

Hallo Herr Kummer,

hier ist das modul
input:

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :       w3concepts.form.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     20-08-2004
* Modified    :     20-08-2004
************************************************/


echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">";

echo "<tr><td>Zieladresse (alias@mydomain.com):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[0]\" value=\"CMS_VALUE[0]\" size=\"30\" /></td></tr>";

echo "<tr><td>Betreff:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size=\"30\" /></td></tr>";

echo "<tr><td>Antwortadresse (alias@mydomain.com):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"30\" /></td></tr>";

echo "<tr><td>Emailname (z.B. Vorname Name):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"30\" /></td></tr>";

echo "<tr><td>Hintergrundfarbe bei Fehlern (z.B. red):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"30\" /></td></tr>";

echo "</table>";

und hier der output:

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.form.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     20-08-2004
* Modified    :     20-08-2004
************************************************/

class w3form {

   var $email, $aufgedroeselt, $form, $formularFeld;

   function w3form() {
   }

   // PRIVATE
   function sendEmail() {
      $this->aufdroeseln($this->suppress('sent'));
      $this->generateEmailMessage();
      mail($this->email['adresses'],$this->email['subject'],$this->email['message'],"From: {$this->email['from']['name']} <{$this->email['from']['email']}>\nReply-To: {$this->email['from']['email']}\nX-Mailer: PHP/" . phpversion());
   }

   // PRIVATE
   function aufdroeseln($aufzudroeseln,$prefix = '') {
      foreach ($aufzudroeseln as $key => $value) {
         if (is_array($value)) {
            $this->aufdroeseln($value,$key." ");
         } else {
            $this->aufgedroeselt["{$prefix}{$key}"] = $value;
         }
      }
   }

   // PRIVATE
   function add2Message($key,$value) {
      if (strlen($key) > 25 OR strlen($value) > 54) {
         $this->email['message'] .= "$key\n$value\n";
      } else {
      $this->email['message'] .= $key;
      $this->email['message'] .= str_repeat(' ',25-strlen($key));
      $this->email['message'] .= "$value\n";
      }
   }

   // PRIVATE
   function generateEmailMessage() {
      if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
         $this->add2Message($key,$value);
      }
   }

   // PRIVATE
   function suppress() {
      $suppress = func_get_args();
      foreach ($_POST as $key => $value) {
         if (array_search($key,$suppress) === false) $fields[$key] = $value;
      }
      return $fields;
   }



   // PUBLIC
   function addEmailAdress($email) {
      if (empty($this->emailAdresses)) {
         $this->email['adresses'] .= "$email";
      } else {
         $this->email['adresses'] .= ", $email";
      }
   }

   // PUBLIC
   function setEmailSubject($subject) {
      $this->email['subject'] = $subject;
   }

   // PUBLIC
   function setEmailFrom($email,$name) {
      $this->email['from']['email'] = $email;
      $this->email['from']['name'] = $name;
   }

   // PUBLIC
   function setForm($form) {
      $this->form['form'] = $form;
   }

   // PUBLIC
   function setAnswer($answer) {
      $this->form['answer'] = $answer;
   }

   // PUBLIC
   function setBackgroundError($color) {
      $this->form['colorError'] = $color;
   }

   // PRIVATE
   function formularInterpretation(&$formular) {
      $felder = split('###',$formular);
      for ($i=1;$i<count($felder);$i=$i+2) {
         $attributte = split(';',trim($felder[$i]));
         foreach ($attributte as $attribut) {
            $namewert = split(':',trim($attribut));
            if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') {
               $feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1];
            } else {
               $feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1];
            }
         }
      }
      return $feld;
   }

   // PRIVATE
   function formularAusgabe($sent = false) {
      echo '<form action="" method="POST">';
      echo '<input type="hidden" name="sent" value="true" />';
      $formular = $this->form['form'];
      $formulardaten = $this->formularInterpretation(&$formular);
      $formular = split('###',$formular);
      foreach ($formular as $formularteil) {
         if (!empty($formulardaten["{$formularteil}"])) {
            $this->formularFeld($formulardaten["{$formularteil}"],$sent);
         } else {
            echo $formularteil;
         }
      }
      echo '</form>';
   }

   // PRIVATE
   function formularFeld($attribute,$sent) {
      $parameter = "name=\"{$attribute['name']}\"";
      if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style=\"background-color:{$this->form['colorError']};\"";
      switch ($attribute['type']) {
         case 'select':
         case 'password':
         case 'text':
            if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
            break;
      }
      switch ($attribute['type']) {
         case 'textarea':
         case 'text':
            if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
            if (!empty($attribute['value'])) $value = $attribute['value'];
            if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
            break;
      }
      switch ($attribute['type']) {
         case 'text':
            echo "<input type=\"text\" $parameter value=\"$value\" $style />";
            break;
         case 'password':
            echo "<input type=\"password\" $parameter value=\"$value\" $style />";
            break;
         case 'textarea':
            echo "<textarea name=\"{$attribute['name']}\" cols=\"";
            echo (empty($attribute['cols']))?('20'):($attribute['cols']);
            echo "\" rows=\"";
            echo (empty($attribute['rows']))?('2'):($attribute['rows']);
            echo "\" wrap=\"virtual\" $style>$value</textarea>";
            break;
         case 'select':
            echo "<select $parameter $style>";
            for ($i=0;$i<count($attribute['option']);$i++) {
               if (!empty($attribute['optionvalue'][$i])) {
                  if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
                     echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
                  } else {
                     if (empty($_POST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) {
                        echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
                     } else {
                        echo "<option value=\"{$attribute['optionvalue'][$i]}\">{$attribute['option'][$i]}</option>\n";
                     }
                  }
               } else {
                  if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['option'][$i]) {
                     echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
                  } else {
                     if (empty($_POST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) {
                        echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
                     } else {
                        echo "<option>{$attribute['option'][$i]}</option>\n";
                     }
                  }
               }
            }
            echo "</select>";
            break;
         case 'checkbox':
            $formularbezeichner = preg_split('[\[|\]]',$attribute['name']);
            if ($sent) {
               if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) {
                  echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
               } else {
                  echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
               }
            } else {
               if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
                  echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
               } else {
                  echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
               }
            }
            break;
         case 'radio':
            if (!empty($_POST["{$attribute['name']}"])) {
               if ($_POST["{$attribute['name']}"] == $attribute['value']) {
                  echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
               } else {
                  echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" />";
               }
            } else {
               if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
                  echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
               } else {
                  echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\"/>";
               }
            }
            break;
      }
   }

   // PRIVATE
   function formularVollstaendig() {

      $formular = $this->form['form'];

      $felder = $this->formularInterpretation(&$formular);

      foreach ($felder as $feld) {
         if (!$this->formularFeldKorrekt(&$feld)) return false;
      }

      return true;
   }

   // PRIVATE
   function success() {
      $this->sendEmail();
      echo $this->form['answer'];
   }

   // PRIVATE
   function formularFeldKorrekt(&$feld) {

      // prüfung, ob pflichtfeld vorhanden
      if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false;

      // wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
      if (empty($_POST["{$feld['name']}"])) return true;

      // regular expression prüfungen
      if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[öäüéà èâêîça-z-]*$",$_POST["{$feld['name']}"])) return false;
      if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéà èâêîça-z-]*$",$_POST["{$feld['name']}"])) return false;
      if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false;
      if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false;
      if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false;
      if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéà èâêîç_a-z0-9-]+(\.[öäüéà èâêîç_a-z0-9-]+)*@[öäüéà èâêîça-z0-9-]+(\.[öäüéà èâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false;

      // grössenbereich bei integer und float prüfen
      if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false;
      if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false;

      // längenbereich bei allen typen prüfen
      if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false;
      if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false;

      return true;
   }

   //PUBLIC
   function process() {
      if (!isset($_POST['sent'])) {
         $this->formularAusgabe();
      } elseif ($this->formularVollstaendig()) {
         $this->success();
      } else {
         $this->formularAusgabe(true);
      }
   }

}

if ($edit) {
   echo "<h1>Formularkonfiguration</h1>";
   echo "<p>Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:</p>";
   echo "CMS_HTML[0]";
   echo "<p>Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:</p>";
   echo "CMS_HTML[1]";
} else {
   $formular = new w3form();
   $formular->addEmailAdress("CMS_VALUE[0]");
   $formular->setEmailSubject("CMS_VALUE[1]");
   $formular->setEmailFrom("CMS_VALUE[2]","CMS_VALUE[3]");
   $formular->setBackgroundError("CMS_VALUE[4]");
   $formular->setForm("CMS_HTML[0]");
   $formular->setAnswer("CMS_HTML[1]");
   $formular->process();
}

?>
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

du musst folgende zeilen ersetzen (die jeweils obere durch die untere):

Code: Alles auswählen

$formulardaten = $this->formularInterpretation(&$formular);
$formulardaten = $this->formularInterpretation($formular);

if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style=\"background-color:{$this->form['colorError']};\""; 
if ($sent && !$this->formularFeldKorrekt($attribute)) $style ="style=\"background-color:{$this->form['colorError']};\""; 

$felder = $this->formularInterpretation(&$formular); 
$felder = $this->formularInterpretation($formular); 

if (!$this->formularFeldKorrekt(&$feld)) return false; 
if (!$this->formularFeldKorrekt($feld)) return false; 
dann sollte die warnung nicht mehr ausgegeben werden.

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
marcello89
Beiträge: 116
Registriert: Di 20. Sep 2005, 18:10
Wohnort: Lörrach
Kontaktdaten:

Beitrag von marcello89 »

okay danke vielmals!
marcello89
Beiträge: 116
Registriert: Di 20. Sep 2005, 18:10
Wohnort: Lörrach
Kontaktdaten:

Beitrag von marcello89 »

hallo nochmal ich habe noch eine frage, ich möchte eine jobböse realisieren und das formular sollte dann bei mehreren jobs eingebunden werden kann ich das dann direkt mit den feldern definiert irgendwie einbauen ? und ist es möglich via email den headertext und evtl articel id mitzugeben?


danke vielmals gruß
marcello
marcello89
Beiträge: 116
Registriert: Di 20. Sep 2005, 18:10
Wohnort: Lörrach
Kontaktdaten:

Beitrag von marcello89 »

hi bekomme jetzt auf einmal folgende fehlermeldung...

Code: Alles auswählen

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /srv/www/vhosts/vp-inet.de/httpdocs/contenido/includes/include.con_editcontent.php(619) : eval()'d code on line 1025

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /srv/www/vhosts/vp-inet.de/httpdocs/contenido/includes/include.con_editcontent.php(619) : eval()'d code on line 1040

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /srv/www/vhosts/vp-inet.de/httpdocs/contenido/includes/include.con_editcontent.php(619) : eval()'d code on line 1136

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /srv/www/vhosts/vp-inet.de/httpdocs/contenido/includes/include.con_editcontent.php(619) : eval()'d code on line 1139
an was liegt das nun ? checke leider in php nicht durch danke für eure hilfe !

gruß
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

marcello89 hat geschrieben:hi bekomme jetzt auf einmal folgende fehlermeldung...

...
Hast du weitere Module eingebaut? Es handelt sich um den selben Fehler wie oben, du verwendest Referenzen bei Funktionsargumenten (d. h., du setzt ein '&' vor eine Variable, die du als Argument an eine Funktion übergibst - damit kann die Funktion diese Variable ändern). Einfachste Lösung: Wie oben schon gemacht, nach dem Vorkommen von '&$' suchen und das '&' löschen (allerdings nur bei den Funktionsaufrufen, nicht bei den Funktionsdeklarationen). Kann aber zu Problemen führen, wenn in der Funktionsdeklaration keine Referenz angegeben ist. Du solltest dich am Besten zumindest ein bisschen mit PHP beschäftigen, um dir ggf. auch mal selbst helfen zu können.
marcello89
Beiträge: 116
Registriert: Di 20. Sep 2005, 18:10
Wohnort: Lörrach
Kontaktdaten:

Beitrag von marcello89 »

hi calvini habe kein weiteres modul eingebaut ist genau das selbe wie oben und es hat schon funktioniert :-/
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

marcello89 hat geschrieben:hi calvini habe kein weiteres modul eingebaut ist genau das selbe wie oben und es hat schon funktioniert :-/
Falls du nichts geändert hast und diese Warnungen beim Aufruf einer Seite auftauchen, die bisher warnungsfrei aufgerufen werden konnte, ist das sehr, sehr seltsam :shock:.
Nichtsdestotrotz funktioniert die Fehlerbehebung genau so, wie oben beschrieben: Schau dir die betroffenen Module an und suche dort nach Referenzen, die an Funktionen übergeben werden. Entferne diese und dann sollten auch die Warnungen verschwinden.
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

suche hier im forum. das problem tritt wegen den referenzen auf. ich habe die lösung schon diverse male publiziert...
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
marcello89
Beiträge: 116
Registriert: Di 20. Sep 2005, 18:10
Wohnort: Lörrach
Kontaktdaten:

Beitrag von marcello89 »

hallo zusammen kann mir jemand genauer helfen bekomme das leider garnicht hin :-/ danke vielmals

gruß
marcello
wosch

Beitrag von wosch »

kummer hat geschrieben:du musst folgende zeilen ersetzen (die jeweils obere durch die untere):
Vielen Dank.
Bei mir ist der Fehler (nach Umstallung auf php5) nun auch aufgetreten,
dank deiner Beschreibung aber nicht lange :wink:
Gesperrt