PHP-Warnung bei geaendertem Kontakt-Formular

Gesperrt
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

PHP-Warnung bei geaendertem Kontakt-Formular

Beitrag von Halchteranerin » Do 11. Mär 2004, 09:02

Hallo an die PHP-Experten!

Ich habe folgendes Problem ... Ich brauchte das Kontakt-Formular (von agon), allerdings etwas abgeaendert. Hier der Output-Bereich (der das Problem verursacht):

Code: Alles auswählen

<?php
$email_to_name = explode(",","CMS_VALUE[8]");
$email_to_mail = explode(",","CMS_VALUE[9]");
$betreff = explode(",","CMS_VALUE[7]");
$mail = $_REQUEST['mail'];
$email_from_name = strip_tags($_REQUEST['email_from_name']);
$email_from_mail = strip_tags($_REQUEST['email_from_mail']);
$kommentar = strip_tags($_REQUEST['kommentar']);
if($mail == 1 && count($email_to)!==0)
{
  $header='From:'.$email_from_name.'<'.$email_from_mail.'>';
  for($x=0;$x<count($email_to_name);$x++){
   if(in_array($x,$email_to)) {
    $mailto .= $email_to_name[$x]." <".$email_to_mail[$x].">,";
    $adressat .= $email_to_name[$x]." ";
   }
  }
  for($y=0;$y<count($betreff);$y++){
   if(in_array($y,$betr)) {
    $anliegen .= $betreff[$y]." ";
   }
  }
  mail("$mailto",$anliegen,$kommentar,$header);
  echo '<h2 class="headline">Folgende Nachricht wurde versendet:</h2>
<table border="1" cellpadding="3" cellspacing="0" width="100%">
  <tr>
   <td>Absender:</td>
   <td width="90%">';
  if ($email_from_mail=="") { echo '<i>keine Absenderangabe</i>'; }
  else { echo $email_from_name.' &l'.'t;'.$email_from_mail.'&g'.'t;'; }
  echo '</td>
  </tr>
  <tr>
   <td>Adressat(en):</td>
   <td width="90%">'.$adressat.'</td>
  </tr>
  <tr>
   <td>Betreff:</td>
   <td width="90%">'.$anliegen.'</td>
  </tr>
  <tr>
   <td colspan="2">'.stripslashes(nl2br($kommentar)).'</td>
  </tr>
</table>';
} else
{
  echo '<form name="mail" action="'.$auth->url().'" method="post">
   <table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
     <td colspan="3">'; echo "<h1 class=\"headline\">CMS_HTMLHEAD[1]</h1>
      <span id=\"font\" class=\"subheadline\">CMS_HTML[1]</span>"; echo '</td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td class="subheadline" width="150">Ihr Name:</td>
     <td>&nbsp;</td>
     <td><input type="text" name="email_from_name" size="30" 
value="'.$email_from_name.'" class="Input"></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td class="subheadline" width="150">Ihre E-Mail-Adresse:</td>
     <td>&nbsp;</td>
     <td><input type="text" name="email_from_mail" size="30" 
value="'.$email_from_mail.'" class="Input"></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td valign="top" class="subheadline" width="150">Adressat:<br>(Mehrfachauswahl 
mit <br>gedrückter Strg-Taste)</td>
     <td>&nbsp;</td>
    <td><select name="email_to[]" size="'.count($email_to_name).'" multiple class="Input">';
 for($x=0;$x<count($email_to_name);$x++){
  echo '<option value="'.$x.'">'.$email_to_name[$x].'</option>';
 }
 echo '     </select>';
  if ($mail == 1) {
   echo '<br><i>Sie müssen mindestens einen Adressaten <br>auswählen, um die
Nachricht abzuschicken.</i>'; }
  echo '  </td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>

  <tr>
     <td class="subheadline" width="150">Betreff:</td>
     <td>&nbsp;</td>
     <td><select name="betr" size="1" class="Input">';
 for($y=0;$y<count($betreff);$y++)
 {
  if (in_array($y,$betr))
  {
   echo '<option value="'.$y.'" selected>'.$betreff[$y].'</option>';
  } else
  {
   echo '<option value="'.$y.'">'.$betreff[$y].'</option>';
  }
 }
 echo '     </select>
    </td>
    </tr>

    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td valign="top" class="subheadline" width="150">Ihre Nachricht:</td>
     <td>&nbsp;</td>
     <td><textarea cols="45" rows="10" name="kommentar" style="width:250px" 
class="InputArea">'.stripslashes($kommentar).'</text'.'area></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td valign="top" class="subheadline" width="150">&nbsp;</td>
     <td>&nbsp;</td>
     <td align="left"><input type="submit" value="E-Mail senden" name="submit" class="InputButton"></td>
     <input type="hidden" name="mail" value="1">
    </tr>
   </table>
  </fo'; echo 'rm>';
}
?>
Bei DEM Output entsteht folgender Eintrag in der errorlog.txt, und zwar gleich 8x (mit der selben Uhrzeit, auf die Sekunde genau!):
[11-Mar-2004 08:51:08] PHP Warning: in_array(): Wrong datatype for second argument in /www0901/www.halchter.com/contenido-halchter/cms ... t.php(546) : eval()'d code on line 534

Ich weiss auch, wodurch das verursacht wird, da ich aber mehr oder weniger keine Ahnung von PHP habe (ich habe nur hier und da fertige Sachen geaendert), weiss ich nicht, was ich wie aendern muss. Die problematische Stelle muss diese hier sein:

Code: Alles auswählen

<td><select name="betr" size="1" class="Input">';
 for($y=0;$y<count($betreff);$y++)
 {
  if (in_array($y,$betr))
  {
   echo '<option value="'.$y.'" selected>'.$betreff[$y].'</option>';
  } else
  {
   echo '<option value="'.$y.'">'.$betreff[$y].'</option>';
  }
 }
 echo '     </select>
    </td>
denn wenn ich die for-Schleife rausnehme, habe ich keine Eintraege mehr im errorlog.

Worum es mir geht: bei dem Modul hat man die Moeglichkeit, einen oder mehrere Empfaenger aus einer Liste auszuwaehlen. Die Betreffzeile muss ebenfalls aus einer vorgegebenen Liste ausgewaehlt werden. Nun war das so, dass wenn KEIN Empfaenger ausgewaehlt wurde, aber die Betreffzeile geaendert wurde (also ein anderer als der erste Eintrag ausgewaehlt wurde), eine Meldung kam, dass man einen Empfaenger auswaehlen sollte. Gleichzeitig wurde aber die Betreffzeile 'zurueckgesetzt', und dies soll mit obiger for-Schleife verhindert werden.

Kann mir jemand sagen, wie ich die PHP-Warnung loswerde?

Viele Gruesse
Christa

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 11. Mär 2004, 11:20

da ich den input teil des moduls nicht kenne frag ich einfach mal

was steht den in der variable $betr drinnen ?

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Do 11. Mär 2004, 12:24

Hallo emergence,
emergence hat geschrieben:da ich den input teil des moduls nicht kenne
dem kann man abhelfen. :wink:
emergence hat geschrieben:was steht den in der variable $betr drinnen ?
In $betr muesste die (aus dem Dropdown-Menue ausgewaehlte) Betreffzeile stehen. Hier aber sicherheitshalber auch der Input-Bereich ($betr muss aber nicht schon dort stehen, oder?):

Code: Alles auswählen

echo "<table cellspacing="0" cellpadding="10" border="0">
        <tr>
          <td>Adressaten-Namen:</td>
          <td><input type="text" name="CMS_VAR[8]" value="CMS_VALUE[8]" size=70></td>
        </tr>
        <tr>
          <td>Adressaten-Emails:</td>
          <td><input type="text" name="CMS_VAR[9]" value="CMS_VALUE[9]" size=70></td>
        </tr>
        <tr>
          <td>Betreffzeilen:</td>
          <td><input type="text" name="CMS_VAR[7]" value="CMS_VALUE[7]" size=70></td>
        </tr>
        <tr>
          <td colspan=2>Notieren Sie in den beiden ersten Feldern eine gleiche Anzahl von Adressaten und Email-Adressen, im dritten Feld die gewünschten Betreffzeilen;
           trennen Sie die Einträge jeweils mit Kommata.</td>
        </tr>
      </table>";
Danke schon mal fuers Anschauen!

Gruss
Christa

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 11. Mär 2004, 12:47

na ja wenn du
in_array($y,$betr) benutzt muss $betr ein array sein...
-> http://at2.php.net/manual/de/function.in-array.php

das andere was mir nicht ganz klar ist...
name="email_to[]"
das funktioniert ? (auch wieder was dazugelernt)

falls ja sollte
name="betr[]"
auch funktionieren...

$betr wäre dann ein array und der fehler sollte verschwinden...

hab ich mir gerade rausgesucht...
-> http://www.dynamic-webpages.de/php/lang ... ternal.php

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Do 11. Mär 2004, 13:23

emergence hat geschrieben: das andere was mir nicht ganz klar ist...
name="email_to[]"
das funktioniert ? (auch wieder was dazugelernt)

falls ja sollte
name="betr[]"
auch funktionieren...

$betr wäre dann ein array und der fehler sollte verschwinden...
name="email_to[]"
scheint zu funktionieren, ja, zumindest stehen dabei keine Eintraege im errorlog. Deswegen verstehe ich auch nicht, warum das mit betr nicht funktioniert. :evil:

HAEEEEEEEEEEEEEEEEEEEEEH? Ich verstehe gerade nur Bahnhof! Ich frage mich, woher ich den Quellcode vorhin hier reinkopiert habe, denn im Contenido IST das so eingetragen:
<select name="betr[]" size="1" class="Input">
und trotzdem kommt die Warnung. )-: Langsam zweifle ich an meinem Verstand. :( Ich hatte schon mal die Klammern weggelassen, aber das war nicht heute!

Also hier nochmal der Output-Bereich (und wie gesagt, die Warnungen kommen trotzdem):

Code: Alles auswählen

<?php
$email_to_name = explode(",","CMS_VALUE[8]");
$email_to_mail = explode(",","CMS_VALUE[9]");
$betreff = explode(",","CMS_VALUE[7]");
$mail = $_REQUEST['mail'];
$email_from_name = strip_tags($_REQUEST['email_from_name']);
$email_from_mail = strip_tags($_REQUEST['email_from_mail']);
$kommentar = strip_tags($_REQUEST['kommentar']);
if($mail == 1 && count($email_to)!==0)
{
  $header='From:'.$email_from_name.'<'.$email_from_mail.'>';
  for($x=0;$x<count($email_to_name);$x++){
   if(in_array($x,$email_to)) {
    $mailto .= $email_to_name[$x]." <".$email_to_mail[$x].">,";
    $adressat .= $email_to_name[$x]." ";
   }
  }
  for($y=0;$y<count($betreff);$y++){
   if(in_array($y,$betr)) {
    $anliegen .= $betreff[$y]." ";
   }
  }
  mail("$mailto",$anliegen,$kommentar,$header);
  echo '<h2 class="headline">Folgende Nachricht wurde versendet:</h2>
<table border="1" cellpadding="3" cellspacing="0" width="100%">
  <tr>
   <td>Absender:</td>
   <td width="90%">';
  if ($email_from_mail=="") { echo '<i>keine Absenderangabe</i>'; }
  else { echo $email_from_name.' &l'.'t;'.$email_from_mail.'&g'.'t;'; }
  echo '</td>
  </tr>
  <tr>
   <td>Adressat(en):</td>
   <td width="90%">'.$adressat.'</td>
  </tr>
  <tr>
   <td>Betreff:</td>
   <td width="90%">'.$anliegen.'</td>
  </tr>
  <tr>
   <td colspan="2">'.stripslashes(nl2br($kommentar)).'</td>
  </tr>
</table>';
} else
{
  echo '<form name="mail" action="'.$auth->url().'" method="post">
   <table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
     <td colspan="3">'; echo "<h1 class="headline">CMS_HTMLHEAD[1]</h1>
      <span id="font" class="subheadline">CMS_HTML[1]</span>"; echo '</td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td class="subheadline" width="150">Ihr Name:</td>
     <td>&nbsp;</td>
     <td><input type="text" name="email_from_name" size="30" 
value="'.$email_from_name.'" class="Input"></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td class="subheadline" width="150">Ihre E-Mail-Adresse:</td>
     <td>&nbsp;</td>
     <td><input type="text" name="email_from_mail" size="30" 
value="'.$email_from_mail.'" class="Input"></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td valign="top" class="subheadline" width="150">Adressat:<br>(Mehrfachauswahl 
mit <br>gedrückter Strg-Taste)</td>
     <td>&nbsp;</td>
    <td><select name="email_to[]" size="'.count($email_to_name).'" multiple class="Input">';
 for($x=0;$x<count($email_to_name);$x++){
  echo '<option value="'.$x.'">'.$email_to_name[$x].'</option>';
 }
 echo '     </select>';
  if ($mail == 1) {
   echo '<br><i>Sie müssen mindestens einen Adressaten <br>auswählen, um die
Nachricht abzuschicken.</i>'; }
  echo '  </td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>

  <tr>
     <td class="subheadline" width="150">Betreff:</td>
     <td>&nbsp;</td>
     <td><select name="betr[]" size="1" class="Input">';
 for($y=0;$y<count($betreff);$y++)
 {
  if (in_array($y,$betr))
  {
   echo '<option value="'.$y.'" selected>'.$betreff[$y].'</option>';
  } else
  {
   echo '<option value="'.$y.'">'.$betreff[$y].'</option>';
  }
 }
 echo '     </select>
    </td>
    </tr>

    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td valign="top" class="subheadline" width="150">Ihre Nachricht:</td>
     <td>&nbsp;</td>
     <td><textarea cols="45" rows="10" name="kommentar" style="width:250px" 
class="InputArea">'.stripslashes($kommentar).'</text'.'area></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td valign="top" class="subheadline" width="150">&nbsp;</td>
     <td>&nbsp;</td>
     <td align="left"><input type="submit" value="E-Mail senden" name="submit" class="InputButton"></td>
     <input type="hidden" name="mail" value="1">
    </tr>
   </table>
  </fo'; echo 'rm>';
}
?>
Irgendeine andere Idee?

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 11. Mär 2004, 13:31

na ja

$betr wird soweit ich das script bis jetzt angesehen habe erst dann zu einem array wenn das formular abgesendet wird.

Code: Alles auswählen

  if (in_array($y,$betr)) 
  { 
   echo '<option value="'.$y.'" selected>'.$betreff[$y].'</option>'; 
  } else 
  { 
   echo '<option value="'.$y.'">'.$betreff[$y].'</option>'; 
  } 
mal ersetzen durch

Code: Alles auswählen

if (is_array($betr)) {
  if (in_array($y,$betr)) 
  { 
   echo '<option value="'.$y.'" selected>'.$betreff[$y].'</option>'; 
  } else 
  { 
   echo '<option value="'.$y.'">'.$betreff[$y].'</option>'; 
  } 
} else {
 echo '<option value="'.$y.'">'.$betreff[$y].'</option>'; 
}
sollte gehen... getestet habe ich es aber nicht...

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Do 11. Mär 2004, 14:10

emergence hat geschrieben:getestet habe ich es aber nicht...
Aber ich! :) Und es scheint zu funktionieren, zumindest tauchte kein Eintrag mehr auf. Ich hoffe, es gibt nicht irgendwelche Seiteneffekte, die mir gerade nicht auffallen. :wink:

Danke schoen!

Gesperrt