Script-Probleme

Fragen und Tipps & Tricks zur Newsletter Software SuperMailer oder zum BirthdayMailer

Moderatoren: mirko, Wolfi

chewbacca55
Beiträge: 5
Registriert: 24.05.2011, 20:13

Beitrag von chewbacca55 »

ok jetzt läufts

war aber nix davon

ich hab ja nen backup von der original newsletter.php gemacht , die reinkopiert und dort nochmal die variablen geändert und dann gings

tja hab ich wohl ausversehn was geändert :augenroll:

danke trotzdem!!
Benutzeravatar
mirko
Beiträge: 23082
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Das eregi() ist veraltet, funktioniert aber trotzdem.

Im Script oben jede anzuzeigende URL prüfen, also die http://-Aufrufe müssen alle stimmen. Klappt es danach nicht, das Script und die anzuzeigenden Seiten in ein Verzeichnis legen, danach im Script alle http:// Angaben entfernen und nur die Dateinamen stehen lassen, so dass er lokal die Dateien aus dem Verzeichnis direkt lädt.
chewbacca55
Beiträge: 5
Registriert: 24.05.2011, 20:13

Beitrag von chewbacca55 »

also ich verzweifel langsam ;(

ich hab den newsletter bei t-online als .php5, .php4 und als .php ausgeführt

und immer wird die php aufgerufen, werde auch abgemeldet
nur dann kommt ne leere seite anstatt der abmeldebestätigung

sowohl per email abmeldelink als auch über die form

bei meinem heimserver klappt alles nur bei t-online nich
meine anderen php dateien werden ausgeführt nur diese nicht

vielleicht is das quatsch aber ich hab irgendwo gelesen dass
eregi() veraltet ist

kann es vielleicht sein dass es von t-online ignoriert wird?

plz help
Zuletzt geändert von chewbacca55 am 10.06.2011, 01:31, insgesamt 2-mal geändert.
Benutzeravatar
mirko
Beiträge: 23082
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Das Script funktioniert mit PHP 4 und PHP 5. Wenn bei T-Online .php5 für Scripte vorgeschrieben ist, dann einfach die .php Datei in .php5 umbenennen. Man muss danach natürlich im Anmeldeformular und im Abmeldelink überall .php in .php5 ändern.
chewbacca55
Beiträge: 5
Registriert: 24.05.2011, 20:13

Beitrag von chewbacca55 »

hiho mirko

da bin ich wieder

dein skript läuft super auf meinem heimrechner per xampp

jetzt haben wir das auf unsere homepage online gestellt und nun werden die skripte zwar ausgeführt aber zb werden die abmeldeseiten nich aufgerufen

auf dem t-online server werden die .php dateien standardmäßig als php5 ausgeführt

schätze es liegt daran
mein kollege hat auch schon das skript für php5 angefordert aber es kam wieder das für php4

kannst du mir das skript für php5 per pn schicken? die variablen sind egal die find ich schon um die auszufüllen

danke im vorraus
chewbacca55
Beiträge: 5
Registriert: 24.05.2011, 20:13

Beitrag von chewbacca55 »

danke schonmal für die antwort

hat mir die richtige richtung gezeigt hab den fehler gefunden ;D

btw super skript :i_respekt:
Benutzeravatar
mirko
Beiträge: 23082
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Im HTML-Formularcode gibt es eine Angabe

<select>
<option>anmelden</option>
<option>abmelden</option>
</select>

oder 2:

<input>
anmelden<br>
<input> abmelden

Dort ist Action mit großen A hinterlegt, das gibt an, ob sich derjenige anmelden oder abmelden will. Diese Angabe muss immer übermittelt werden, damit das Script weiss, was es tun soll.
chewbacca55
Beiträge: 5
Registriert: 24.05.2011, 20:13

Beitrag von chewbacca55 »

Hi mirko

zuerst is zu sagen dass die homepage noch nich fertig ist und bei mir auf meinem heimrechner läuft per xampp
und ich benutze die tinybutstrong template engine falls das was ausmacht
http://www.tinybutstrong.com/

ich habe dein skript bekommen für die an und abmeldung zum newsletter
hab es auf die homepage eingebunden und nun kommt die fehlermeldung

Es wurde das Feld Action nicht übermittelt!

hab die if abfrage schon gefunden wo die action variable abgefragt wird

if ( (!isset($Action)) || ($Action == \"\") ) {
print \"Es wurde das Feld Action nicht übermittelt!\";
exit;
}

nun is die frage was fragt der genau ab? isset ? was kann ich überprüfen?

danke im vorraus
Leachim4711
Beiträge: 5
Registriert: 20.11.2003, 14:40

Beitrag von Leachim4711 »

Alles klar - hab halt noch nie mit PHP gearbeitet.

ABER es funktioniert jetzt - ich danke Dir :)

GREETZ
Leachim
Benutzeravatar
mirko
Beiträge: 23082
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Für PHP-Scripte setzt man gar keine Rechte mit CHMOD. PHP-Scripte dürfen auch nicht ins cgi-bin Verzeichnis übertragen werden, sondern müssen in das normale Verzeichnis wo auch die HTML-Dateien oder Bilder drin liegen.


--
mirko
Leachim4711
Beiträge: 5
Registriert: 20.11.2003, 14:40

Beitrag von Leachim4711 »

Also Mirko - hab mich erkundigt und PHP4 ist auch möglich trotzdem kommt der Fehler immer noch.

Was für Rechte muß ich dem php-script den geben (CHMOD755 ??) Wenn das stimmt hab ich das gemacht.

Ich hab auch alles so verfolgt wie beschrieben - was kann das denn noch sein ??

Würde mich freuen, wenn Du dich nochmal meldest - ist nämlich wirklich wichtig, da ich bald einen großen Newsletter versenden möchte und ich den Empfängern die Möglichkeit geben möchte sich wieder abzumelden.

GREETZ
Leachim
Wolfi
Beiträge: 1444
Registriert: 29.08.2002, 01:20

Beitrag von Wolfi »

@Jimmy

Hallo,

die zuletzt gepostete Variante des HTML-Codes sowie des Scripts funktionieren einwandfrei (bei 1&1). Fehler 501 kommt bei 1&1 anscheinend öfters mal vor. Siehe: http://www.traum-projekt.com/forum/inha ... 898-1.html
--
Gruß
Wolfgang
Benutzeravatar
mirko
Beiträge: 23082
Registriert: 25.11.2001, 15:14
Wohnort: Leipzig
Kontaktdaten:

Beitrag von mirko »

Das liegt am Script, vielleicht ist das LWP-Modul auf dem Server nicht installiert, wäre auch noch möglich.

Kann man den wirklich kein PHP ausführen? Das ist um einiges einfacher.


--
mirko
jimmy13
Beiträge: 4
Registriert: 17.11.2003, 22:52

Beitrag von jimmy13 »

Hallo Mirko,

ich habe nun alles überarbeitet. Aber leider habe ich noch immer das Problem, dass zwar das Anmeldefenster korrekt erscheint und ich dieses auch ausfüllen kann.

Sende ich den Eintrag dann jedoch ab, habe ich nach wie vor das gleiche Problem. Die Mail-Adresse wird nicht an das Postfach übertragen und es erscheint die Fehlermeldung, dass die Seite nicht aufgerufen werden kann.

Ich sende Dir noch einmal den überarbeiteten HTML-Code zu, sowie das Script.

HTML-Code:

<html>

<head>
<meta>
<meta>
<meta>
<title>Neue Seite 1</title>
</head>

<body>
<Newsletteranmeldung>
<form>
<p><font><b>Newsletter An-/
Abmeldung</b></font></p>
<p><font>Ihre E-Mail Adresse:<br>
<input></font></p>
<p><font>Sie möchten sich für
unseren Newsletter</font></p>
<p><font><input>
anmelden<br>
<input> abmelden</font></p>
<p>&nbsp;</p>
<p><font>
<input></font></p>
</form>
<Newsletteranmeldung>

</body>

</html>


Script:

<?
###################################################################### #######
# SUPERMAILER SUBSCRIBE/UNSUBSCRIBE SCRIPT #
# Copyright (c) 2001-2002 Mirko Boeer #
# http://www.supermailer.de/ #
# #
# Dieses Script kann kostenlos eingesetzt werden, jedoch muss dieser Header #
# im Script enthalten bleiben! #
# #
# Systemvoraussetzungen: PHP 4 und Windows/Unix #
###################################################################### #######

# Geben Sie die E-Mail Adresse Ihres speziellen POP3 Postfachs ein
$Recipient=\"newsletter@freemails.ch\";

# Geben Sie die Seite an, die angezeigt werden soll, wenn eine ANmeldung erfolgte
# Angabe mit http://

$SubscribeOKPage=\"http://www.kunstauktionen-net.de/newsletter/anbest.htm\";

# Geben Sie die Seite an, die angezeigt werden soll, wenn eine ABmeldung erfolgte
# Angabe mit http://

$UnsubscribeOKPage=\"http://www.kunstauktionen-net.de/newsletter/abbest.htm\";


# Geben Sie die Seite an, die angezeigt werden soll, wenn die E-Mail Adresse aeusserlich nicht korrekt ist = Fehlerseite
# Angabe mit http://

$ErrorPage=\"http://www.kunstauktionen-net.de/newsletter/error.htm\";


########### Ab hier nichts mehr aendern #####################
function CheckEMail($email) {
if (strpos($email, \"@\") === False)
return 0;
$s = substr($email, strpos($email, \"@\"), strlen($email));
if (count(explode(\".\", $s)) < 2)
return 0;
return 1;
}


if ( (!isset($EMail)) || ($EMail == \"\") || ( !CheckEMail($EMail) ) ) {
if ($ErrorPage != \"\")
header(\"Location: $ErrorPage\");
else
print \"<b>Es wurde keine E-Mail Adresse angegeben oder die E-Mail Adresse liegt nicht im korrekten Format vor!</b>\";
exit;
}

if ( (!isset($Action)) || ($Action == \"\") ) {
print \"Es wurde das Feld Action nicht übermittelt!\";
exit;
}


$headers = \"From: $EMailn\";
$headers .= \"X-Mailer: SuperMailScriptn\";
$headers .= \"Return-Path: <EMail>n\";


# $Action als Betreff
# message als Text der Mail
# Format des Mailtextes:
# FeldName: <feldinhalt>n
$message = \"EMail: $EMailn\";

# Beispiele fuer weitere Felder, diesen muessen im HTML-Formular und im SuperMailer angelegt werden!
#$message .= \"Name: $Namen\";
#$message .= \"Vorname: $Vornamen\";

# Versenden der Mail
mail($Recipient, $Action, $message, $headers);

if ($Action == \"subscribe\")
if ($SubscribeOKPage != \"\")
header(\"Location: $SubscribeOKPage\");
else
print \"<b>Die E-Mail Adresse wurde zu unserer Newsletterliste hinzugefügt!</b>\";
else
if ($UnsubscribeOKPage != \"\")
header(\"Location: $UnsubscribeOKPage\");
else
print \"<b>Die E-Mail Adresse wurde aus unserer Newsletterliste entfernt!</b>\";
?>



Ich bin am Verzweifeln. Wenn ich die Links direkt in den Browser einkopiere, funktionieren sie ohne Probleme.

Bitte hilf mir, Mirko!

Danke!

Lieben Gruß
Jimmy
Leachim4711
Beiträge: 5
Registriert: 20.11.2003, 14:40

Beitrag von Leachim4711 »

Das is ja mein Problem - ich kopier jetzt auch mal das Script:

#!/usr/bin/perl
###################################################################### #######
# SUPERMAILER SUBSCRIBE/UNSUBSCRIBE SCRIPT #
# Copyright © 2001-2002 Mirko Boeer #
# http://www.supermailer.de/ #
# #
# Dieses Script kann kostenlos eingesetzt werden, jedoch muss dieser Header #
# im Script enthalten bleiben! #
# #
# Systemvoraussetzungen: Perl und Windows/Unix #
###################################################################### #######
use LWP::UserAgent;
use CGI qw(header -no_debug);

# Geben Sie die E-Mail Adresse Ihres speziellen POP3 Postfachs ein
$Recipient=\'newslettercheck@bm-internetservice.de\';

# Geben Sie die Seite an, die angezeigt werden soll, wenn eine ANmeldung erfolgte
# Angabe mit http://

$SubscribeOKPage=\"http://www.bm-internetservice.de/danke.htm\";

# Geben Sie die Seite an, die angezeigt werden soll, wenn eine ABmeldung erfolgte
# Angabe mit http://

$UnsubscribeOKPage=\"http://www.bm-internetservice.de/schade.htm\";


# Geben Sie die Seite an, die angezeigt werden soll, wenn die E-Mail Adresse aeusserlich nicht korrekt ist = Fehlerseite
# Angabe mit http://

$ErrorPage=\"\";

# Pfad zum Mailprogramm, auf den meisten Servern ist diese Angabe richtig
$MailProgram = \"/usr/lib/sendmail -t\";

########### Ab hier nichts mehr aendern #####################

# E-Mail Adresse anschauen
sub email_check {
local($emails) = $_[0];

if ($emails =~ /(@.*@)|(..)|(@.)|(.@)|(^.)|(.$)/ ||
($emails !~ /^.+@localhost$/ &&
$emails !~ /^.+@[?(w|[-.])+.[a-zA-Z]{2,3}|[0-9]{1,3}]?$/)) {
return(0);
}

else {
if ($emails =~ /S/)
{
if ($emails =~ /^[w-.]+@[w-.]+$/)
{
return(1);
}
else
{
return(0);
}
}
}
}

# Form parsen
sub ReadParse
{
local (*in) = @_ if @_;
local ($i, $key, $val);

# Read in text
if (&MethGet)
{
$in = $ENV{\'QUERY_STRING\'};
}
elsif (&MethPost)
{
read(STDIN,$in,$ENV{\'CONTENT_LENGTH\'});
}

@in = split(/[&;]/,$in);

foreach $i (0 .. $#in)
{
# Convert plusses to spaces
$in[$i] =~ s/+/ /g;

# Split into key and value
# splits on the first =
($key, $val) = split(/=/,$in[$i],2);

# Convert %XX from hex numbers to alphanumeric
$key =~ s/%(..)/pack(\"c\",hex($1))/ge;
$val =~ s/%(..)/pack(\"c\",hex($1))/ge;

# Associate key and value
# \",\" is the multiple separator
$in{$key} .= \",\" if (defined($in{$key}));
$in{$key} .= $val;
}
return scalar(@in);
}

sub MethGet
{
return ($ENV{\'REQUEST_METHOD\'} eq \"GET\");
}

sub MethPost
{
return ($ENV{\'REQUEST_METHOD\'} eq \"POST\");
}

sub ShowPage {
$res = LWP::UserAgent->new->request(new HTTP::Request GET => $_[0]);
return $res->is_success ? $res->content : $res->status_line;
}

sub mail {
if (open (MAIL,\"|$MailProgram $Recipient\") ) {
print MAIL $headers;
print MAIL \"Subject: $Actionnn\";
print MAIL $message;
close (MAIL);
}
}

&ReadParse;
$EMail = $in{\'EMail\'};
$Action = $in{\'Action\'};

print \"Content-type: text/htmlnn\";

if ( ($EMail eq \"\") || (!&email_check($EMail)) ) {
if ($ErrorPage ne \"\") {
print &ShowPage($ErrorPage);
}
else {
print \"<b>Es wurde keine E-Mail Adresse angegeben oder die E-Mail Adresse liegt nicht im korrekten Format vor!</b>\";
}
exit;
}

if ( ($Action eq \"\") ) {
print \"Es wurde das Feld Action nicht übermittelt!\";
exit;
}


$headers = \"From: $EMailn\";
$headers .= \"X-Mailer: SuperMailScriptn\";
$headers .= \"Return-Path: <EMail>n\";


# $Action als Betreff
# message als Text der Mail
# Format des Mailtextes:
# FeldName: <feldinhalt>n
$message = \"EMail: $EMailn\";

# Beispiele fuer weitere Felder, diesen muessen im HTML-Formular und im SuperMailer angelegt werden!
# $Name = $in{\'Name\'};
# $message .= \"Name: $Namen\";
# $Vorname = $in{\'Vorname\'};
# $message .= \"Vorname: $Vornamen\";

# Versenden der Mail
mail($Recipient, $Action, $message, $headers);

if ($Action eq \"subscribe\") {
if ($SubscribeOKPage ne \"\") {
print &ShowPage($SubscribeOKPage);
}
else {
print \"<b>Die E-Mail Adresse wurde zu unserer Newsletterliste hinzugefügt!</b>\";
}
}
else {
if ($UnsubscribeOKPage ne \"\") {
print &ShowPage($UnsubscribeOKPage);
}
else {
print \"<b>Die E-Mail Adresse wurde aus unserer Newsletterliste entfernt!</b>\";
}
}
Antworten