Seite 1 von 1

w3concepts.form

Verfasst: Di 18. Sep 2007, 22:45
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

Verfasst: Di 18. Sep 2007, 23:07
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)

Verfasst: Di 18. Sep 2007, 23:26
von GaMbIt_
Oder es wird eine fehlerhafte Referenz übergeben... glaub ich... aber das war ja das & ??? öhhmm... ich werd müde :?

Verfasst: Mi 19. Sep 2007, 08:22
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.

Verfasst: Mi 19. Sep 2007, 09:26
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();
}

?>

Verfasst: Mi 19. Sep 2007, 09:44
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

Verfasst: Mi 19. Sep 2007, 10:13
von marcello89
okay danke vielmals!

Verfasst: Mi 19. Sep 2007, 16:37
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

Verfasst: Mi 19. Sep 2007, 20:10
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ß

Verfasst: Mi 19. Sep 2007, 20:44
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.

Verfasst: Mi 19. Sep 2007, 21:00
von marcello89
hi calvini habe kein weiteres modul eingebaut ist genau das selbe wie oben und es hat schon funktioniert :-/

Verfasst: Do 20. Sep 2007, 07:49
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.

Verfasst: Do 20. Sep 2007, 08:13
von kummer
suche hier im forum. das problem tritt wegen den referenzen auf. ich habe die lösung schon diverse male publiziert...

Verfasst: Do 20. Sep 2007, 18:15
von marcello89
hallo zusammen kann mir jemand genauer helfen bekomme das leider garnicht hin :-/ danke vielmals

gruß
marcello

Verfasst: Mi 16. Jan 2008, 16:23
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: