du kannst die überprüfung natürlich auch eleminieren....
ürsprünglich:
Code: Alles auswählen
} elseif (!eregi("^[-a-z0-9\-\_\.]{2,63}\@[a-z0-9\-\_\.]{2,63}\.[a-z]{2,4}$",$modnews_email)) {
dafür musst den folgenden code einfach suchen und löschen:
Code: Alles auswählen
elseif (!eregi("^[-a-z0-9\-\_\.]{2,63}\@[a-z0-9\-\_\.]{2,63}\.[a-z]{2,4}$",$modnews_email)) {
$modnews_errormsg = "1002";
}
besser, aber bitte testen:
Code: Alles auswählen
} elseif (!eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $email)) {
ich geh mal davon aus, dass es für contenido wesentlich besser ist, wenn nur valide e-mail adressen in der table abgelegt werden. auf fast allen servern liefert die mail(); funktion einen internen server fehler, wenn dort eine nicht valide e-mail adresse an empfänger definiert ist.
so wie ich contenido kennengelernt habe, würde ich als anwender diese vermutung austesten.
wenn man sich aber vorher nicht die mühe gemacht hat, oder (wie's auch oft der fall ist) einfach ne buggige table vom kunden bekommt, ist einem mit folgenden skript vielleicht geholfen:
Code: Alles auswählen
<?php
$MySQL_HOST = "???";
$dbname = "????";
$MySQL_USER = "?????";
$MySQL_PASSW = "????";
//definition der benutzten tabellen
$cfgtableabos = $ ???
// Verbindung zur DB... evtl. schon vorhanden....
function connect(){
global $MySQL_HOST, $MySQL_USER, $MySQL_PASSW;
if (! $linkid=mysql_connect("$MySQL_HOST","$MySQL_USER","$MySQL_PASSW")){
echo "Die Verbindung zu ".$MySQL_HOST." konnte nicht hergestellt werden<br>";
exit;
}else{
//echo "<!-- Traumhaft! Verbindung zu ".$MySQL_HOST." erfolgreich hergestellt... -->";
}
return $linkid;
}
//SQL Query Maschine
function send_sql($dbname, $sql){
if (! $res=mysql_db_query($dbname, $sql)){
echo mysql_error();
exit;
}
return $res;
}
function checkmails () {
include("lib/cfg_mysql.inc.php");
openDatabase();
$i=0;
$sql = "select Email from $cfgtableabos";
$q = mysql_query($sql);
while ($result = mysql_fetch_row($q)) {
if(!ereg("^[_a-zA-Z0-9-]+([\._a-zA-Z0-9-])*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$", $result[0]))
{
//echo "$result[0]<br>\n";
$sql = "DELETE FROM $cfgtableabos WHERE Email='$result[0]'";
echo "$sql<br>\n";
$result=send_sql($dbname, $sql);
}
$i++;
}
echo "<br><br>insgesamt: $i e-mails durchsucht";
}
connect();
checkmails();
?>
nen paar includes fehlen vielleicht.... für diejenigen die's anwenden werden, ist es allerdings eh klar, was da passieren soll. soll ja auch nur ne anregung sein.
wo wir gerade bei newsletter datenbanken sind:
noch nen kleiner tipp, den contenido vielleicht auch nicht berücksichtigt... so genau kenn ich mich mit den klassen und funktionen von contenido nicht mehr aus... falls keine duplikats überprüfung vorgenommen wird, kann man relativ einfach über sql nen copy mit distinct machen. damit kopiert man alle datensätze, die duplikate werden allerdings nicht kopiert.
das wär's...
ganz nebenbei: das newsletter-tool von contenido ist nicht besonders leistungsfähig. triangel (
http://sourceforge.net/projects/triangle/) kann da wesentlich mehr und ist ebenfalls ne php4/mysql lösung, also rel. einfach in contenido zu integrieren... da funktioniert übrigens die validierung der e-mails einwandfrei
