Kleinanzeigen, Funktion
Ein einfaches Kleinanzeigen-Script. Die Anzeige wird automatisch nach
einer durch den Inserenten ausgewählen Zeit gelöscht, oder
vorzeitig per Passwort. Hyperlinks werden unterdrückt. Um Spam zu
verhindern, erscheint die E-Mail-Adresse der Inserenten nicht in der Anzeige,
sonder wird mit der Antwort auf das Inserat per Mail zugesendet.
Ein Bestätigungs-Mail geht an den Inserenten und ein Mail zur
Kontrolle an den Webmaster.
Zur Erstellung werden folgende Dateien benötigt:
- anzeigen.php um die Anzeigen anzuzeigen
- anzeigen_eing.php um Anzeigen aufzugeben
- anzeigen_mail.php um Mails als Antwort aufzugeben
- anzeigen_loe.php um Anzeigen zu löschen
- anzeigen_loe1.php um das Löschen zu bestätigen
- anzeigen_loe_int.php um als Administrator Anzeigen zu löschen
zudem eine MySQL-Datenbank-Tabelle.
Als erstes erstellen wir, am Besten mit
phpMyAdmin, in der MySQL-Datenbank unsere Tabelle mit drei
Datensätzen mit verschiedenen Test-Eintragungen.
Das Programm phpMyAdmin ist bei den meisten Providern bereits
installiert und hilft uns, unsere Datenbank zu warten.
In phpMyAdmin öffnen wir die Seite SQL. Nun kopieren wir den Inhalt des
gesamten untenstehenden Scripts in das Feld SQL und drücken OK.
Dadurch erstellt phpMyAdmin die benötigte Tabelle.
Anschliessend sollte gleich geprüft werden, ob die Tabelle "anzeigen"
auch erstellt wurde und die Datensätze sich in der Tabelle befinden.
Generell: es ist immer besser, zuerst die Tabellen zu erstellen. Auch
einen ersten Datensatz sollte in die Tabellen, um so die php-Skripte
gleich auf ihre Funktion prüfen zu können.
Code MySQL - Datenbank
PHP & MySQL: Kleinanzeigen v1.2, SQL Datenbank# Tabellenstruktur für Tabelle `anzeigen`
CREATE TABLE `anzeigen` (
`id_anz` int(11) NOT NULL AUTO_INCREMENT,
`art` varchar(10) DEFAULT NULL,
`vname` varchar(50) DEFAULT NULL,
`nname` varchar(50) DEFAULT NULL,
`ort` varchar(50) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
`tel` varchar(50) DEFAULT NULL,
`titel` varchar(50) DEFAULT NULL,
`anzeige` text NOT NULL,
`kennwort` varchar(10) DEFAULT NULL,
`verfall` int(11) DEFAULT NULL,
`datum` timestamp(14) NOT NULL,
PRIMARY KEY (`id_anz`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;
# Daten für Tabelle `anzeigen`
INSERT INTO `anzeigen`
(`id_anz`, `art`, `vname`, `nname`, `ort`, `email`, `tel`, `titel`, `anzeige`, `kennwort`, `verfall`, `datum`)
VALUES
(1, 'Biete', 'Hans', 'Tester', 'Testdorf', 'xy@xy.xy', '+41 0 000 00 00', 'Biete einen Test', 'Dies ist ein Testtext.\r\nWir bieten einen Test.', 'test', 2147483647, '20041022113516'),
(2, 'Suche', 'Hans', 'Tester', 'Testort', '', '+41 00 000 00 00', 'Testsuche', 'Dies ist eine Testsuche als Beispiel.\r\nAuch Zeilenumbruch geht!', 'test', 2147483647, '20041022122239'),
(3, 'Tausche', 'Otto', 'Beispiel', 'Teststadt', 'xy@xy.xy', NULL, 'Testtausch', 'Wir tauschen alles!', 'test', 2147483647, '20041022123000');
Script Update:
29.04.08
Erklärungen zum Code
Zu den Zeilen:
1: Hier steht als Kommentar der Inhalt dieses Scriptes. Dieser
könnte auch weggelassen werden.
3 - 17: Die Definition unserer Tabelle.
4: Die ID wird festgelegt, zudem wird angeben, dass diese sich
selbst vergibt mittels einem Zähler (auto_increment).
Es empfiehlt sich, für die ID nie nur "id" zu verwenden, sondern immer einen
Namen zu vergeben, der zur Tabelle passt. Denn, wenn mehrere Tabellen
verwendet werden sollten, könnte es leicht zu Verwechselungen kommen.
5 - 15: Es folgen die diversen Felder.
12: Der eigentliche Anzeigentext, wir haben den
Feldtyp "text" verwendet, was 65535 Zeichen zulassen würde. Man könnte
auch den Feldtyp "tinytext" verwenden, dies würde jedoch nur 255 Zeichen
zulassen.
14: Die hier gespeicherte Unix-Time erleichtert das Rechnen für die
automatische Löschung. Eine Woche hat 604800 Sekunden.
15: Mit "timestamp" wird das Speicherdatum der Anzeige festgehalten.
19: Dient nur als Kommentar
21 - 26: Hiermit werden drei unterschiedliche Datensätze in die
Tabelle eingefügt. Das erleichtert uns die Überprüfung
des folgenden Scriptes.
Nun erstellen wir mit einem Editor eine Datei "anzeigen.php"
und fügen folgendes Script ein:
Code Kleinanzeigen
Datei: anzeigen.php
PHP & MySQL: Kleinanzeigen v1.2, Anzeigen<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
</head>
<body>
<?php
include ('sicher/inc.php');
// Variable zur Sicherheit auf 0 setzen
$x = "";
// herausfinden ob Dateien verfallen sind
$query = "SELECT * FROM anzeigen ";
for ($i = 0; $i < $num; $i++){
// ist Datei verfallen?
$id_anz = $row['id_anz'];
$verfall = $row['verfall'];
if ($verfall > $jetzt) {$x = "druck";}
else {$x = "loesch";}
// wenn verfallen, loeschen
if ($x == "loesch") {
$query = "DELETE FROM anzeigen WHERE id_anz = '".$id_anz."'";
}
}
?>
<table width="100%" summary="Die einzelnen Anzeigen">
<colgroup>
<col width="90" />
<col />
<col />
<col width="90" />
</colgroup>
<?php
// Verbindung mit anzeigen fuer Eintraege anzeigen
$query = "SELECT *, DATE_FORMAT(datum,'%d.%m.%y') AS datum_f
FROM anzeigen ORDER BY datum DESC";
for ($i = 0; $i < $num; $i++){
<tr class="bgweiss">
<td><p><strong> '.$row['art'].'</strong></p></td>
<td colspan="2"><p><strong> '.$row['titel'].'</strong></p></td>
<td>
<p class="kl center">'.$row['datum_f'].'</p>
</td>
</tr>
<tr>
<td>   </td>
<td colspan="2">'.nl2br($row['anzeige']).'</td>
<td class="center">
';
if ($row['email'] != ""){
$id_anz = $row['id_anz'];
<form action ="php_anzeigen_mail.php" method ="post">
<input type="hidden" name="id_anz" value="'.$id_anz.'" />
<input class="norm" type="submit" value="email" />
</form>
';
}
</td>
</tr>
<tr>
<td>   </td>
<td class="bgweiss">  
<p class="kl">'.$row['vname'].' '.$row['nname'].', '.$row['ort'].'</p>
</td>
<td class="bgweiss">
<p class="kl">  
';
if ( $row['tel'] != "" ){
echo 'Tel: '.$row['tel'] ;
}
</p>
</td>
<td>   </td>
</tr>
<tr>
<td colspan="4"><hr /></td>
</tr>
';
}
?>
</table>
<!--
Quelle Script: http://www.zudila.ch/scripte/php_anzeigen.php
Zudila Kleinanzeigen v1.2, GPL
-->
</body>
</html>
Script Update:
29.04.08
Erklärungen zum Code
Zu den Zeilen:
1 - 5: Hier der nicht vollständige head-Teil.
Dazu kann der Quelltext dieser Seite betrachtet werden.
10: Jetzt inkludieren wir den Zugang zu unserer Datenbank. Dieser
sollte immer in einer eigenen Datei sein, um so bei einer Änderung
der Zugangsdaten, diesen nur an einem Ort anpassen zu müssen.
Beispiel: inc.php
12 - 32: Hier wird mit jedem Seitenaufruf die Datenbank auf verfallene
Anzeigen überprüft.
Sollten sich sehr viele Anzeigen (hunderte!) in der
Datenbank befinden, so sollte dieser Teil in eine eigene Datei verlegt
werden, um so den Seitenaufbau zu beschleunigen und den Rechenaufwand
auf dem Server zu reduzieren. Diese Datei würde dann am Besten mit einem
CronJob periodisch aufgerufen.
12: Als Erstes vorsichtshalber x auf Null setzen.
21: Die Funktion time() gibt die aktuelle Zeit im UNIX-Format aus (Anzahl
Sekunden seit dem 01.01.1970).
25 - 31: Ist die aktuelle Zeit grösser als "verfall", wird der Datensatz
gelöscht.
36 - 41: Die Standard-HTML-Tags colgroup und col werden zu unrecht
selten verwendet.
Damit lassen sich die Tabellenzellen vorgängig formatieren. Der
Seitenaufbau erfolgt schneller und die Serverlast wird reduziert.
45 - 46: Die Datenbank-Tabelle wird aufgerufen. Das Datum wird gleich
in das übliche Format gewandelt und die Sortierung vom jüngsten
zum ältesten Datum vorgenommen.
49 - 96: Die Schlaufe wird so oft durchlaufen wir Datensätze ($num)
vorhanden sind.
61: Die Funktion nl2br sorgt für den allfälligen richtigen
Zeilenumbruch.
64 - 72: Wenn eine E-Mail-Adresse eingegeben wurde, so wird ein Button
mit Link zum Antwort-Formular ausgegeben.
67: Mit "action" wir der Link zum Formular definiert.
68: Die ID wird mitgegeben.
84 - 86: Wurde eine Telefonnummer angegeben, so wird diese allenfalls
angezeigt.
107: Der guten Ordnung halber, schliessen wir die Verbindung zur Datenbank.
Wenn der oben stehende Code richtig eingegeben wurde, so sollten jetzt
die drei Beispiel-Datensätze bereits angezeigt werden.
Als nächstes wird nun die Datei zur Eingabe der Anzeigen erstellt:
"anzeigen_eing.php".
Code Kleinanzeigen aufgeben
Datei: anzeigen_eing.php
PHP & MySQL: Kleinanzeigen v1.2, Anzeigen aufgeben<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
</head>
<body>
<?php
include ("sicher/inc.php");
include ("script/funktionen.php");
$formanzeigen = "ja" ;
// Fehler auf NULL setzen
$tart = ''; $tnname = ''; $tvname = ''; $tort = ''; $temail = ''; $ttel = '';
$ttitel = ''; $tanzeige = ''; $tkennwort = ''; $tverfall = '';
// das Formular wird abgeschickt
if (isset($_POST['submit'])) {
// Tags entfernen
// $woher = strip_tags($_POST['woher']);
//Ablaufdatum festlegen
$woche = 604800; // = 60 * 60 * 24 * 7 Sekunden
if ( $verfall == "1 Woche" ) { $verfall_1 = $jetzt + $woche ; }
if ( $verfall == "2 Wochen" ) { $verfall_1 = $jetzt + ( $woche * 2 ) ; }
if ( $verfall == "4 Wochen" ) { $verfall_1 = $jetzt + ( $woche * 4 ) ; }
if ( $verfall == "8 Wochen" ) { $verfall_1 = $jetzt + ( $woche * 8 ) ; }
if ( $verfall == "12 Wochen" ) { $verfall_1 = $jetzt + ( $woche * 12 ) ; }
// Lange Wörter (>50) zwangstrennen, um Darstellung zu erhalten.
$anzeige = wordwrap($anzeige, 50, ' ', 1);
// doppelte Leerstellen entfernen
// prüfen ob alle Variablen richtig
if ( $art == "?" ) { $tart = "Bitte Art angeben!" ; }
if ( $nname == "" ) { $tnname = "Bitte Nachname angeben!" ; }
if ( $vname == "" ) { $tvname = "Bitte Vorname angeben!" ; }
if ( $ort == "" ) { $tort = "Bitte Ort angeben!" ; }
if ( $email != "" ) {
if (check_email($email)) { $temail = "" ; }
else { $temail = "E-Mail nicht richtig!" ; }
}
if ( ereg("[a-z_A-Z()/]",$tel)) { $ttel = "Format: +00 0 000 00 00" ; }
if ( $titel == "" ) { $ttitel = "Bitte Titel angeben!" ; }
if ( $verfall == "?" ) { $tverfall = "Bitte Laufzeit angeben!" ; }
if ( $kennwort == "" ) { $tkennwort = "Bitte Kennwort angeben!" ; }
if ( $anzeige == "" ) { $tanzeige = "Bitte Anzeigetext angeben!" ; }
if ( $tel == '' && $email == '' ) { $temail = 'Bitte E-Mail oder Telefon angeben!' ; }
// senden, wenn i.O.
if ( $tart == "" && $tnname == "" && $tort == "" && $ttitel == "" && $tkennwort == "" && $tanzeige == "" && $temail == "" ) {
// Mails senden
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/plain; charset=iso-8859-1\n";
$headers .= "From:".$vname." ".$nname." <".$email.">\n";
$headers .= "Reply-To: ".$email."\n";
$headers .= "X-Sender-IP:".$REMOTE_ADDR."\n";
$betreff = "XY Kleinanzeigen";
$kopf1 = "Folgende Kleinanzeige ging ein:\n\n";
$eintrag = "Art: ".$art."\nNachname: ".$nname."\nVorname: "
.$vname."\nOrt: ".$ort."\nEMail: ".$email."\nTel: "
.$tel."\nAnzeigetitel:".$titel."\nAnzeige:\n".$anzeige;
$loesch1 = "\n\nAnzeige löschen:\n\n
http://www.xy.xy/scripte/anzeigen_loe_int.php" ;
$text1 = $kopf1.$eintrag.$loesch1;
@mail( "webmaster@xy.xy" ,$betreff,$text1,$headers);
if ($email !="") {
$kopf2 = "Sie haben bei uns folgende Kleinanzeige eingetragen:\n\n";
$loesch2 = "\n\nAnzeige löschen:\n\n
http://www.xy.xy/anzeigen_loe.php?email=".$email ;
$fuss2 = "\n\nVielen Dank.\nXY AG\nwww.xy.xy";
$text2 = $kopf2.$eintrag.$loesch2.$fuss2;
@mail($email,$betreff,$text2,$headers);
}
// Eintraege an db Newsletter senden
//if ($email != ""){
// $query= "INSERT into newsletter (vname,name,ort,email,woher)
// VALUES ('$vname','$name','$ort','$email','$woher')";
// mysql_query($query, $conn);
//}
// Eintraege an db Anzeigen senden
$query1= "INSERT into anzeigen (art,vname,nname,ort,email,tel,titel,anzeige,kennwort,verfall)
VALUES ('$art','$vname','$nname','$ort','$email','$tel','$titel','$anzeige','$kennwort','$verfall_1')";
<p class="e3"><br />Erfolgreich eingef&252;gt!<br /><br />
<a href="anzeigen.php"><strong>Zur&252;ck zu den Anzeigen</strong></a>.<br />
';
$formanzeigen = "nein" ;
}
else {
$fehlermeldung = 'Es hat noch Fehler!';
}
}
if ( $formanzeigen == "ja" ) {
<form method="post" action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" name="meldung">
<table>
<tr>
<td>Art</td>
<td>
<select name="art" size="1">
<option value="?" '.(($art == "?") ? "selected" : "" ).'>?</option>
<option value="Biete" '.(($art == "Biete") ? "selected" : "" ).'>Biete</option>
<option value="Suche" '.(($art == "Suche") ? "selected" : "" ).'>Suche</option>
<option value="Tausche" '.(($art == "Tausche") ? "selected" : "" ).'>Tausche</option>
</select>
<span class="rot"><strong>'.$tart.' </strong></span>
</td>
</tr>
<tr>
<td>Nachname</td>
<td>
<input type="text" name="nname" size="40" maxlength="50" value="'.$nname.'" tabindex="1" />
<span class="rot"><strong>'.$tnname.' </strong></span>
</td>
</tr>
<tr>
<td>Vorname</td>
<td>
<input type="text" name="vname" size="40" maxlength="50" value="'.$vname.'" tabindex="2" />
<span class="rot"><strong>'.$tvname.' </strong></span>
</td>
</tr>
<tr>
<td>Ort</td>
<td>
<input type="text" name="ort" size="40" maxlength="50" value="'.$ort.'" tabindex="3" />
<span class="rot"><strong>'.$tort.' </strong></span>
</td>
</tr>
<tr>
<td>E-Mail</td>
<td>
<input type="text" name="email" size="40" maxlength="50" value="'.$email.'" tabindex="4" />
<span class="rot"><strong>'.$temail.' </strong></span>
</td>
</tr>
<tr>
<td>Telefon</td>
<td>
<input type="text" name="tel" size="40" maxlength="50" value="'.$tel.'" tabindex="5" />
<span class="rot"><strong>'.$ttel.' </strong></span>
</td>
</tr>
<tr>
<td>Anzeigetitel</td>
<td>
<input type="text" name="titel" size="40" maxlength="50" value="'.$titel.'" tabindex="6" />
<span class="rot"><strong>'.$ttitel.' </strong></span>
</td>
</tr>
<tr>
<td>Laufzeit</td>
<td>
<select name="verfall" size="1" tabindex="7">
<option value="1 Woche" '.(($verfall == "1 Woche") ? "selected" : "" ).'>1 Woche</option>
<option value="2 Wochen" '.(($verfall == "2 Wochen") ? "selected" : "" ).'>2 Wochen</option>
<option value="4 Wochen" '.(($verfall == "4 Wochen") ? "selected" : "" ).'>4 Wochen</option>
<option value="8 Wochen" '.(($verfall == "8 Wochen") ? "selected" : "" ).'>8 Wochen</option>
<option value="12 Wochen" '.(($verfall == "12 Wochen") ? "selected" : "" ).'>12 Wochen</option>
</select>
<span class="rot"><strong>'.$tverfall.' </strong></span>
</td>
</tr>
<tr>
<td>Kennwort</td>
<td>
<input type="password" name="kennwort" size="10" maxlength="10" value="'.$kennwort.'" tabindex="8" />
<span class="kl">(Zum Löschen der Anzeige.)</span>
<span class="rot"><strong>'.$tkennwort.' </strong></span>
</td>
</tr>
<tr>
<td>Anzeigetext</td>
<td>
<textarea rows="9" name="anzeige" cols="60" tabindex="9">'.$anzeige.'</textarea>
<div class="rot"><strong>'.$tanzeige.' </strong></div>
</td>
</tr>
</table>
<input type="hidden" name="woher" value="InseratAuf" />
<input class="norm" type="submit" name="submit" value="Abschicken" tabindex="11" />
</form>
';
}
?>
<!--
Quelle Script: http://www.zudila.ch/scripte/php_anzeigen.php
Zudila Kleinanzeigen v1.2, GPL
-->
</body>
</html>
Script Update:
30.04.08
Erklärungen zum Code
Zu den Zeilen:
Es werden nur die Teile erklährt, die in den oben stehenden Dateien nicht
bereits vorgekommen sind!
11: Die eingebundene Datei enthält die Funktion zur Prüfung der
E-Mail-Adresse.
12: Die Variable wird auf "ja" gesetzt um das Formular anzuzeigen.
19 - 116: Die zu durchlaufenden Zeilen, wenn das unten stehende Formular
abgesendet wird.
22 - 32: Aus den eingegebenen Angaben entfernen wir alle Tags (strip-tags)
und Leerschläge am Anfang und Ende (trim).
32: Diese Zeile nur wenn Newslettereintrag.
35 - 41: Je nach ausgewähltem Zeitrahmen, wird die Verfallzeit errechnet.
Diese Angaben können gut angepasst werden, müssen jedoch mit
den Zeilen 180 - 184 übereinstimmen.
49 - 62: Es wird geprüft, ob die Pflichtfelder auch ausgefüllt wurden.
Die E-Mail wird mit der in Zeile 11 eingebundenen Funktion "check_email"
geprüft. Die Telefonnummer wird einer einfachen Prüfung unterzogen (ereg).
Der auszugebende Fehlertext wird definiert.
65 - 112: Sind die Bedingungen in Zeile 65 erfüllt, so werden die Zeilen
durchlaufen.
69 - 74: Der Hader für die Mails wir definiert.
76 - 83: Das Mail an den Webmaster wird definiert.
85: Das Mail an den Webmaster wird versendet. Das @ dient dazu, eine
allfällige Fehlermeldung zu verhindern.
87 - 94: Wenn eine eigene E-Mail eingegeben wurde, wird ein Kontrollmail
an den Inserent gesendet.
90: Der Link um die Anzeige vorzeitig zu löschen. Aus Sicherheit geben
wir das Kennwort nicht mit, sondern nur die E-Mail.
96 - 101: Sollte die Adresse auch in eine Datenbank-Tanelle "newsletter"
abgespeichert werden, so müssten die "//" vor den einzelnen Zeilen entfernt
werden.
Die Tabelle müsste in der Datenbank selbstverständlich auch angelegt sein.
Wenn nicht gebraucht, können die Zeilen gelöscht werden.
104 - 106: Nun wird die Anzeige in die MySQL-Datenbank eingefügt.
107 - 110: Am Bildschirm wird die Meldung zur erfolgreichen Eintragung
und ein Link "zurück zu den Anzeigen" ausgegeben.
111: Die Variable wird auf "nein" gesetzt um zu verhindern, dass das
Formular nochmals angezeigt wird.
118 - 211: Als erstes wird geprüft, ob das Formular angezeigt werden soll,
falls ja, so werden die Zeilen angezeigt.
101: Wir geben an, dass mit dem abschicken dieses Formulares
diese Seite erneut aufgerufen wird.
125 - 130: Die Optionsfelder können in gleicher Art beliebig erweitert
werden.
131: Die oben defienierte Fehlermeldung wird nun hier ausgegeben.
206: Die Zeile wird nur benötigt, wenn die Newsletter-Tabelle vorhanden
ist, ansonsten kann sie gelöscht werden.
Um auf die Anzeigen antworten zu können, die Seite für die Mails.
Code Kleinanzeigen beantworten (Mails)
Datei: anzeigen_mail.php
PHP & MySQL: Kleinanzeigen v1.2, Anzeigen Mail<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
</head>
<?php
include ("sicher/inc.php");
include ("script/funktionen.php");
$formanzeigen = 'ja';
$fehlermeldung = '';
// Variable uebernehmen
$id_anz_t = $_POST['id_anz'];
else { $id_anz == '' ; }
// Verbindung mit Anzeigen
$query = "SELECT *, DATE_FORMAT(datum,'%d.%m.%y') AS datum_f FROM anzeigen WHERE id_anz = '$id_anz'";
?>
<body>
<?php
// prüfen ob id vorhanden
if ($id_anz == '') {
$formanzeigen = 'nein' ;
echo '<p class="center rot"><strong>Keine Anzeige!</strong></p>';
}
// Fehler auf NULL setzen
$tnname = ''; $tvname = ''; $tort = ''; $temail = ''; $ttel = ''; $tantwort = '';
// Mails senden
if (isset($_POST['submit'])) {
// Lange Wörter (>50) zwangstrennen, um Darstellung zu erhalten.
$antwort = wordwrap($antwort, 50, ' ', 1);
// doppelte Leerstellen entfernen
// prüfen ob alle Variablen richtig
if ( $nname == "" ) { $tnname = "Bitte Nachname angeben!" ; }
if ( $vname == "" ) { $tvname = "Bitte Vorname angeben!" ; }
if ( $ort == "" ) { $tort = "Bitte Ort angeben!" ; }
if ( $email != "" ) {
if (check_email($email)) { $temail = "" ; }
else { $temail = "E-Mail nicht richtig!" ; }
}
if ( ereg("[a-z_A-Z()/]",$tel)) { $ttel = "Format: +00 0 000 00 00" ; }
if ( $antwort == "" ) { $tantwort = "Bitte Antworttext angeben!" ; }
if ( $tel == '' && $mail == '' ) { $temail = 'Bitte E-Mail oder Telefon angeben!' ; }
// senden, wenn i.O.
if ( $tnname == '' && $tvname == '' && $tort == '' && $ttel == '' && $tantwort == '' && $temail == '' ) {
// Mails senden
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/plain; charset=iso-8859-1\n";
if ( $email != "" ) {
$headers .= "From:".$vname." ".$nname." <".$email.">\n";
$headers .= "Reply-To: ".$email."\n";
}
else {
$headers .= "From: info@zudila.ch\n";
}
$headers .= "X-Sender-IP:".$REMOTE_ADDR."\n";
$betreff = "Zudila Kleinanzeigen";
$kopf1 = "Folgende Antwort ging auf Ihre Kleinanzeige ein:\n\n";
$an1 = "\nVon Mail: mailto:".$email."\n" ;
$eintrag = "\nName: ".$vname." ".$nname."\nOrt: "
.$ort."\nTel: ".$tel."\n\n".$antwort;
$trenner = "\n------------------------------------------------";
$ursprung = "\nUrsprüngliche Anzeige:\nArt: ".$art."\nTitel: "
.$titel."\n\n".$anzeige ;
$fuss = "\n\nVielen Dank.\nZudila AG\nwww.zudila.ch";
$text1 = $kopf1.$an1.$eintrag.$trenner.$ursprung.$trenner.$fuss;
@mail($email,$betreff,$text1,$headers);
if ($email !=""){
$kopf2 = "Sie haben bei uns folgende Antwort auf eine Kleinanzeige geschrieben:\n\n";
$an2 = "\nAn Mail: mailto:".$emailanzeige."\n";
$text2 = $kopf2.$an2.$eintrag.$trenner.$ursprung.$trenner.$fuss;
@mail($emailanzeige,$betreff,$text2,$headers);
}
// Eintraege an db Newsletter senden
//if ($email != ""){
// $query = "INSERT into newsletter (vname,nname,ort,email,woher)
// VALUES ('$vname','$nname','$ort','$email','$woher')";
// mysql_query($query, $conn);
//}
<p><br />Erfolgreich gesendet!<br /><br />
<a href="anzeigen.php">
<strong>Zurück zu Anzeigen</strong></a><br />
';
$formanzeigen = "nein" ;
}
else {
$fehlermeldung = 'Es hat noch Fehler!';
}
}
if ( $formanzeigen == "ja" ) {
<h2>Anzeige</h2>
<table width="100%">
<colgroup>
<col width="90" />
<col />
<col />
<col width="90" />
</colgroup>
<tr class="bgweiss">
<td><p><strong> '.$art.'</strong></p></td>
<td colspan="2"><p><strong> '.$titel.'</strong></p></td>
<td><p class="kl center">'.mysql_result($result,0,"datum_f").'</p></td>
</tr>
<tr>
<td>   </td>
<td colspan="2">'.$anzeige.'</td>
<td>   </td>
</tr>
<tr>
<td>   </td>
<td colspan="2" class="bgweiss">
</td>
<td>   </td>
</tr>
</table>
<hr />
<h2>Antwort</h2>
<form method="post" action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" name="meldung">
<table>
<tr>
<td colspan="2">
<span class="rot"><strong>'.$fehlermeldung.'</strong></span> 
</td>
<tr>
<tr>
<td>Nachname</td>
<td>
<input type="text" name="nname" size="40" value="'.$nname.'" maxlength="50" tabindex="1" />
<span class="rot"><strong>'.$tnname.' </strong></span>
</td>
</tr>
<tr>
<td>Vorname</td>
<td>
<input type="text" name="vname" size="40" value="'.$vname.'" maxlength="50" tabindex="2" />
<span class="rot"><strong>'.$tvname.' </strong></span>
</td>
</tr>
<tr>
<td>Ort</td>
<td>
<input type="text" name="ort" size="40" value="'.$ort.'" maxlength="50" tabindex="3" />
<span class="rot"><strong>'.$tort.' </strong></span>
</td>
</tr>
<tr>
<td>E-Mail</td>
<td>
<input type="text" name="email" size="40" value="'.$email.'" maxlength="50" tabindex="4" />
<span class="rot"><strong>'.$temail.' </strong></span>
</td>
</tr>
<tr>
<td>Telefon</td>
<td>
<input type="text" name="tel" size="40" value="'.$tel.'" maxlength="50" tabindex="5" />
<span class="rot"><strong>'.$ttel.' </strong></span>
</td>
</tr>
<tr>
<td>Antworttext</td>
<td>   </td>
</tr>
<tr>
<td colspan="2">
<textarea rows="9" name="antwort" cols="60" tabindex="9">'.$antwort.'</textarea>
<div class="rot"><strong>'.$tantwort.' </strong></div>
</td>
</tr>
</table>
<input type="hidden" name="empfaenger" value="'.mysql_result($result,0,"email").'" />
<input type="hidden" name="id_anz" value="'.$id_anz.'" />
<input type="hidden" name="woher" value="InseratAnt" />
<input class="norm" type="submit" name="submit" value="Abschicken" tabindex="11" />
</form>
';
}
?>
<!--
Quelle Script: http://www.zudila.ch/scripte/php_anzeigen.php
Zudila Kleinanzeigen v1.2, GPL
-->
</body>
</html>
Script Update:
30.04.08
Erklärungen zum Code
Zu den Zeilen:
Von der Funktionalität her, gibt es kaum etwas neues.
15: Hier wird die ID-Variable von der vorherigen Seite übernommen
16 - 17: Die Variable wird geprüft, ob es sich dabei nur um Ziffern handelt.
Da eine Anzeige bereits vor ihrem Ablauf nicht mehr aktuell sein kann,
geben wir dem Inserenten die Möglichkeit diese vorzeitig zu löschen.
Code Kleinanzeigen löschen
Datei: anzeigen_loe.php
PHP & MySQL: Kleinanzeigen v1.2, Anzeigen Löschen<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script src="/script/formpruef-de.js" type="text/javascript"></script>
</head>
<body onload="startemail()">
<?php
include ("sicher/inc.php");
include ("script/funktionen.php");
// Aus dem Bestätigungsmail
$tkennwort = '';
if (isset($_POST['submit'])) {
// pruefen ob alle Variablen richtig
if ( $kennwort == "" ) { $tkennwort = "Bitte Kennwort angeben!" ; }
if ( $email == "" ) { $temail = "Bitte E-Mail angeben!" ; }
else {
if(check_email($email)) { $temail = "" ; }
else { $temail = "E-Mail nicht richtig!" ; }
}
// senden, wenn i.O.
if ( $kennwort != "" && $temail == "" ) {
$query = "SELECT *, DATE_FORMAT(datum,'%d.%m.%y') AS datum_f FROM anzeigen WHERE email ='$email' AND kennwort = '$kennwort' ORDER BY datum DESC";
if ( $num == 0 ) {
<div class="rot"><strong>Die eingegebene Kombination ist
in unserer Datenbank nicht vorhanden!<br />
Versuchen Sie es erneut.</strong></div>
';
$formanzeigen = "ja" ;
}
else {
<table width="100%">
<colgroup>
<col width="90" />
<col />
<col />
<col width="90" />
</colgroup>
';
for ($i = 0; $i < $num; $i++){
<tr class="bgweiss">
<td><p><strong> '.$row['art'].'</strong></p></td>
<td colspan="2"><p><strong> '.$row['titel'].'</strong></p></td>
<td><p class="kl center">'.$row['datum_f'].'</p></td>
</tr>
<tr>
<td>   </td>
<td colspan="2">'.nl2br($row['anzeige']).'</td>
<td class="center">
';
if ( $row['email'] != "" ){
<div class="nopaper">
<form action="anzeigen_loe1.php" method="post">
<input type="hidden" name="id_anz" value="'.$row['id_anz'].'">
<input type="hidden" name="kennwort" value="'.$row['kennwort'].'">
<input class="norm" type="submit" name=delete" value="löschen">
</form>
</div>
';
}
</td>
</tr>
<tr>
<td>   </td>
<td class="bgweiss">
<p class="kl"> '.$row['vname'].' '.$row['nname'].', '.$row['ort'].'</p>
</td>
<td class="bgweiss">  
';
if ( $row['tel'] != "" ){
<p class="kl">Tel: '.$row['tel'].'</p>
' ;
};
</td>
<td>   </td>
</tr>
<tr>
<td colspan="4"><hr /></td>
</tr>
';
}
$formanzeigen = "nein" ;
</table>
';
}
}
else {
$formanzeigen = "ja" ;
}
}
?>
</table>
<?php
if ( $formanzeigen == "ja" ){
<p>Geben Sie Ihre E-Mail-Adresse ein, an welche Sie das
Bestätigungsmail erhalten haben, sowie das Kennwort.</p>
<form method="post" action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" name="meldung">
<table width="100%">
<tr>
<td>E-Mail</td>
<td>
<input type="text" name="email" size="40" maxlength="50" value="'.$email.'" tabindex="1" />
<span class="rot"><strong>'.$temail.' </strong></span>
</td>
</tr>
<tr>
<td>Kennwort</td>
<td>
<input type="password" name="kennwort" size="10" maxlength="10" tabindex="2" />
<span class="rot"><strong>'.$tkennwort.' </strong></span>
</td>
</tr>
</table>
<p><input class="norm" type="submit" name="submit" value="Abschicken" /></p>
</form>
';
}
?>
<!--
Quelle Script: http://www.zudila.ch/scripte/php_anzeigen.php
Zudila Kleinanzeigen v1.2, GPL
-->
</body>
</html>
Script Update:
30.04.08
Erklärungen zum Code
Zu den Zeilen:
5: Das eingefügte JavaScript positioniert den Curser in das erste
Eingabefeld.
19 - 111: Nach dem Absenden wird dieser Teil durchlaufen.
54 - 101: Sollte auf mehrere Datensätze die gleich E-Mail und das
selbe Kennwort zutreffen, so werden alle Anzeigen zur Auswahl angezeigt.
70: Beim Absenden wird hier nicht auf diese Seite, sondern auf die
Seite "anzeigen_loe1.php" weitergeleitet.
Prinzipiell könnte die ausgelagerte Funktion auch auf dieser Seite
verarbeitet werden, die Übersichtlichkeit des Codes würde jedoch schlechter.
71 + 72: Dem Formular werden die Variablen "$id_anz" und "kennwort" mitgegeben.
117 - 143: Der Teil, der beim Öffnen der Seite durchlaufen wird. Wenn
der Inserent aus dem erhaltenen Bestätigungsmail den Link zum Löschen
anklickt, so kommt er hier hin.
Aus der oben stehenden Seite zum Löschen, wird beim Löschen
auf folgende Seite verwiesen.
Code Kleinanzeigen löschen Folgeseite.
Datei: anzeigen_loe1.php
PHP & MySQL: Kleinanzeigen v1.2, Anzeigen Löschen Folgeseite<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<?php
include ("sicher/inc.php");
// Variable uebernehmen
$id_anz_t = $_POST['id_anz'];
else { $id_anz == '' ; }
// loeschen Datensatz
$query = "DELETE FROM anzeigen WHERE id_anz = '".$id_anz."' AND kennwort = '".$kennwort."' ";
?>
<p class="e2"><br /><br />
<strong>Der Datensatz wurde gelöscht!</strong><br /><br />
</p>
</body>
</html>
Erklärungen zum Code
Zu den Zeilen:
5: Diese Seite solle nicht von den Suchmaschinen aufgenommen werden.
20 - 21: Der entsprechende Datensatz wird gleich gelöscht.
Die folgende Seite dient dem Administrator zur allfälligen Löschung
von nicht erwünschten Anzeigen.
Die Seite sollte (muss!) geschützt werden, mit .htaccess oder einer Session.
Code Kleinanzeigen Admin löschen
Datei: anzeigen_loe_int.php
PHP & MySQL: Kleinanzeigen v1.2, Anzeigen Löschen Intern<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<?php
include ("sicher/inc.php");
// loeschen
if (isset($_POST['delete'])) {
$id_anz_t = $_POST['id_anz'];
$query = "DELETE FROM anzeigen WHERE id_anz = '$id_anz'" ;
}
?>
<table width="100%">
<colgroup>
<col width="90" />
<col />
<col />
<col width="90" />
</colgroup>
<?php
$query = "SELECT *, DATE_FORMAT(datum,'%d.%m.%y') AS datum_f FROM anzeigen ORDER BY datum DESC";
for ($i = 0; $i < $num; $i++){
$id_anz = $row['id_anz'];
<tr class="bgweiss">
<td><p><strong> '.$row['art'].'</strong></p></td>
<td colspan="2">
<p><strong> '.$row['titel'].'</strong></p>
</td>
<td>
<p class="kl center">'.$row['datum_f'].'</p>
</td>
</tr>
<tr>
<td>   </td>
<td colspan="2">'.nl2br($row['anzeige']).'</td>
<td class="center">
<input type="hidden" name="id_anz" value="'.$id_anz.'" />
<input class="norm" type="submit" name="delete" value="löschen" /><br />
'.$id_anz.'
</form>
</td>
</tr>
<tr>
<td>   </td>
<td class="bgweiss">
<p class="kl"> '.$row['vname'].' '.$row['nname'].', '.$row['ort'].'</p>
</td>
<td class="bgweiss">  
';
if ( $row['tel'] != "" ){
<p class="kl">Tel: '.$row['tel'].'</p>
' ;
};
</td>
<td>   </td>
</tr>
<tr>
<td colspan="4"><hr /></td>
</tr>
';
}
?>
<!--
Quelle Script: http://www.zudila.ch/scripte/php_anzeigen.php
Zudila Kleinanzeigen v1.2, GPL
-->
</body>
</html>
Script Update:
30.04.08
Erklärungen zum Code
Zu den Zeilen:
14 - 19: Die durchlaufenen Zeilen beim Löschen.
15: Die ID übernehmen.
16: Prüfen ob die ID auch eine Zahl ist.
Vielleicht hat Ihnen unser Skript ein paar Stunden Arbeit erspart?
|