[php] Email Überprüfung

romeodadon

Angesehenes Mitglied
Hallo, habe folgendes Problem,
habe nun ein Formular erstellt wo mann daten eingeben kann, diese werden dann in der SQL DB gespeichert.
Das ganze Funktioniert auch super!
Die überprüfung der Email adresse soweit läuft auch, er zeigt mir an ob die adresse ok ist oder nicht,
jedoch trägt er sie trotzdem in die DB ein!

Wie kann ich es verhindern das er die email, falls sie falsch ist nicht einträgt und den nutzer auffwordert diese nachzubessern?
Ah ja und wenn alles OK ist soll er rausgebend as die daten gespeicehrt sind und mann eine bestätigungsmail bekommt.

Würde mcih freunen wenn mit jemand helfen könnte.


Hier der Skript in dem die PHP Daten sind:
CODE
<body>
<?php
$email= $_POST['email'];


####
function PruefeMail($email) {
if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email))
{ return TRUE; }
else
{ return FALSE; } }

####
$email = "$email";

echo $email."<br>";

####
if (PruefeMail($email))
{ echo "Emailadresse ist korrekt"; }

####
else
{ echo "Emailadresse ist fehlerhaft"; }


####
$email = "$email";

echo "<br><br><br>".$email."<br>";

if (PruefeMail($email))
{ echo "Emailadresse ist korrekt"; }
else
{ echo "Emailadresse ist fehlerhaft"; }



$link = mysql_connect('localhost', 'xxx', 'xxx');
if (!$link) {
die('Verbindung nicht möglich : ' . mysql_error());
}

// benutze Datenbank
$db_selected = mysql_select_db('usrxxx', $link);
if (!$db_selected) {
die ('Kann Datenbank nicht benutzen : ' . mysql_error());
}

$name= $_POST['name'];
$vorname= $_POST['vorname'];
$straße= $_POST['straße'];
$plz= $_POST['plz'];
$ort= $_POST['ort'];
$email= $_POST['email'];
$IP=$_SERVER['REMOTE_ADDR'];


$sqladd = ("INSERT INTO testfahrer (name,vorname,straße,plz,ort,email,ip) VALUES ('$name','$vorname','$straße','$plz','$ort','$email','$IP')");


mysql_query($sqladd);

?>




</body>
</html>


 
Ist das absichtlich so gewollt, dass mehrmals ausgegeben wird, ob die Email korrekt ist?
huh.gif


Zudem musst du vor dem Eintragen PHP sagen: wenn die Email richtig ist, dann trage es mir ein, wenn nicht, dann lass es.

Bsp:

CODE if (PruefeMail($email)){
  //Wenn korrekt, wird der Eintrag angelegt und eine Meldung ausgegeben
  echo "Emailadresse ist korrekt";
  $sqladd = ("INSERT INTO testfahrer (name,vorname,straße,plz,ort,email,ip) VALUES
  ('$name','$vorname','$straße','$plz','$ort','$email','$IP')");
  mysql_query($sqladd);
}else{
  echo "Emailadresse ist fehlerhaft";
}
 
Ein bisschen mit dem Klammern rumspielen:

CODE
<body>
<?php
$email= $_POST['email'];


####
function PruefeMail($email)
{
if(eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email))
{
return TRUE;
}
else
{
return FALSE;
}
}

if (PruefeMail($email))
{
// benutze Datenbank
$db_selected = mysql_select_db('usrxxx', $link);
if (!$db_selected) {
die ('Kann Datenbank nicht benutzen : ' . mysql_error());
}

$name= $_POST['name'];
$vorname= $_POST['vorname'];
$straße= $_POST['straße'];
$plz= $_POST['plz'];
$ort= $_POST['ort'];
$email= $_POST['email'];
$IP=$_SERVER['REMOTE_ADDR'];


$sqladd = ("INSERT INTO testfahrer (name,vorname,straße,plz,ort,email,ip) VALUES ('$name','$vorname','$straße','$plz','$ort','$email','$IP')");


mysql_query($sqladd);

}
else
{
echo "Emailadresse ist fehlerhaft";

}


?>




</body>
</html>


oder du schreibst


CODE
...
else
{
echo "Emailadresse ist fehlerhaft";
exit;//beendet den phpskript
}
...



mfg Severin

edit: da wa woll jemand schneller
wink.gif
 
@robert
war keine absicht, nur durch das testen ist das halt drinneng eblieben !
biggrin.gif

versuceh eure vorschläge mal und melde mcih sobald iches hingekreigt hab!

DANKEEE
 
Ah jetzt muss ich mich weider mal melden !
biggrin.gif

Wollte nur mal Fragen ob die Daten die ich jetzt in der DB hab irgendwie in eine Word datei Packen kann,
mir ist klar das das nun nicht al zu einfach ist.
In eine CSV Datei kriege ich es aber da sind die einträge ja nicht in den Spalten eingetragen, wenn sie es wären könnte ich das per Ms Acces lösen.
Kriege ich die da irgendwie so rein?

Oder gibt es da bessere alternativen, da ich anschliessend Rundbriefe verschicken möchte!

 
QUOTE (Only4yu @ Fr 29.12.2006, 14:22) In eine CSV Datei kriege ich es aber da sind die einträge ja nicht in den Spalten eingetragen, wenn sie es wären könnte ich das per Ms Acces lösen.
Kriege ich die da irgendwie so rein?

Excel und Access können CSV Dateien importieren. Einfach ein wenig herumspielen
wink.gif

Hast du es erstmal in einem Office Programm kriegst du es auch in jedes andere (Word, Excel, Access)
 
Ah ja hab es so gelöst,
Datei von csv in txt bennant.
Damm Excel geöffnet und auf " Datei -> Öffnen-> Alle anzeigen und die Txt auswählen.

Anschliessen kommt ein Menü wo mann die Trennzeichen ausfiltern kann.!

Wunderbar !!
biggrin.gif
ph34r.gif
 
Ah muss jetzt nochmal was fragen,
undz war möchte ich noch etwas in mein Formular einfügen.

Eine Auswahl von Bildern die dann per Radiobutton asugewählt werden sollen, zur verfügung stehen 20 bidler aber es dürfen maximal nur 3 angeklickt werden, wie kannich das denn in PHP definieren? habe da jetzt nix gefunden!
 
QUOTE (Roberto Zehnder @ Di 2.1.2007, 13:03) Musst du mit HTML / Java Script machen, da die Eingae Clientseitig ist und nichts mit dem Server (PHP) zu tun hat.

Stimmt nicht ganz siehe hier: http://www.ayom.com/topic-15791.html

mfg Severin
 
QUOTE (Severin Fink @ Di 2.1.2007, 13:09)
QUOTE (Roberto Zehnder @ Di 2.1.2007, 13:03) Musst du mit HTML / Java Script machen, da die Eingabe Clientseitig ist und nichts mit dem Server (PHP) zu tun hat.

Stimmt nicht ganz

Ja da geb ich dir Recht, man sollte alle Eingaben serverseitig nochmals prüfen, gilt auch für SQL-Injections.

Aber um den User zuerst mal zu hindern, kann man eine Java Script Lösung wählen und in einem 2. Schritt trotzdem nochmals serverseitig überprüfen, sollte dann aber auch wieder alle Angaben zurückspielen, damit der User nicht noch mal alle Angaben machen muss, nur weil er (aus Versehen) 4 Bilder gewählt hat.
 
Habe es jetzt so gelöst, aber er trägt nichts in die DB ein !
blink.gif


CODE
<html>

<head>
<script type='text/javascript'>

var docList;

var numValues = 5;
var maxValues = 2;
var liste = new Array(numValues);
var last = 0;
var i = 0;
var j = 0;

function onInit() {
docList = document.forms['myForm'].elements['eintrag'];
for (i = 0; i < numValues; i++) { liste[i] = 0; docList[i].checked = false; }
}



function check(pos) {

// alert(pos);

if(docList[pos - 1].checked && (liste[pos - 1] == 0)) {
// alert('Setzen');
j = 0;
for(i = 0; i < numValues; i++) {
if(liste[i] > 0) { j++; liste[i]++; }
}
// alert('Davor: ' + liste[pos - 1]);
liste[pos - 1] = 1;
// alert('Danach: ' + liste[pos - 1]);
// alert('j-Ergebnis: ' + j);
if (j == maxValues) {

// alert('Reduzieren');

for(i = 0; i < liste.length; i++) {
if(liste[i] == maxValues + 1) { liste[i] = 0; docList[i].checked = false; }
}
}
} else
{
// alert('Entfernen');
if(!docList[pos - 1].checked && (liste[pos -1] > 0)) {
j = liste[pos - 1];
liste[pos - 1] = 0
for (i = 0; i < numValues; i++) {
if (liste[i - 1] > j) { liste[i - 1]--; }
}

}


}
return;
var text = ''
for (i = 0; i < numValues; i++) {
text += 'Position: ' + i + ', pos: ' + liste[i] + String.fromCharCode(13, 10);
}
alert(text);

}

</script>

</head>

<body onload='onInit();' >

<form name='myForm'>

<input type='checkbox' name='eintrag' onclick='check(1);' value='1'>Erstens</input><br/>
<input type='checkbox' name='eintrag' onclick='check(2);' value='2'>Zweitens</input><br/>
<input type='checkbox' name='eintrag' onclick='check(3);' value='3'>Drittens</input><br/>
<input type='checkbox' name='eintrag' onclick='check(4);' value='4'>Viertens</input><br/>
<input type='checkbox' name='eintrag' onclick='check(5);' value='5'>Fünftens</input><br/>


</form>
<form action="test.php" method="post">

<tr>
<td colspan="2"><p class="Stil12">TEST</p>
<p class="Stil11"><span class="Stil14">Geben Sie hier Ihre Daten ein.</span> <br />
</p></td>
</tr>
<tr>
<td width="276"><p><strong>NAME</strong><br />
<input type="txt" maxlength="155" name="name" />
</p>
<p><br />
</p></td>
<td width="259"><p><strong>Vorname</strong><br />
<input type="txt" maxlength="155" name="vorname" />
</p>
<p><strong>Straße</strong><br />
<input type="txt" maxlength="155" name="straße" />
</p>
<p><strong>PLZ</strong><br />
<input type="txt" maxlength="155" name="plz" />
</p>
<p><strong>Ort</strong><br />
<input type="txt" maxlength="155" name="ort" />
</p>
<p><strong>e-mail</strong><br />
<input type="txt" maxlength="155" name="email" />
</p


<p><br />
</p></td>
</tr>

<input name="submit" type="submit" value="Anmelden" />
</body>
</html>

</html>



Verarbeitungsdatei


CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Unbenanntes Dokument</title>
</head>

<body>
<?php

$link = mysql_connect('localhost', 'xxx', 'xxx');
if (!$link) {
die('Verbindung nicht möglich : ' . mysql_error());
}

// benutze Datenbank
$db_selected = mysql_select_db('usr_xxx, $link);
if (!$db_selected) {
die ('Kann Datenbank nicht benutzen : ' . mysql_error());
}

$name= $_POST['name'];
$vorname= $_POST['vorname'];
$straße= $_POST['straße'];
$plz= $_POST['plz'];
$ort= $_POST['ort'];
$email= $_POST['email'];
$IP=$_SERVER['REMOTE_ADDR'];
$eintrag=$_POST['eintrag'];





function PruefeMail($email) {
if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email))
{ return TRUE; }
else
{ return FALSE; } }


if (PruefeMail($email)){
//Wenn korrekt, wird der Eintrag angelegt und eine Meldung ausgegeben
echo "Emailadresse ist korrekt";
$sqladd = ("INSERT INTO testfahrer (name,vorname,straße,plz,ort,email,ip,Auto1) VALUES
('$name','$vorname','$straße','$plz','$ort','$email','$IP','$eintrag')");
mysql_query($sqladd);
}else{
echo "Emailadresse ist fehlerhaft";
}

?>


</body>
</html>

 
aaah immer diese Tippfehler !
Habs gefunden !
tongue.gif


Aber immernoch trägt er nur einen der Ausgewählten felder ein!
huh.gif
 
QUOTE (Only4yu @ Di 2.1.2007, 14:18) Aber immernoch trägt er nur einen der Ausgewählten felder ein!
huh.gif


Das ist klar, weil du 1 Variable hast => eintrag

Und wenn ich nun 3 Auswahlen mache, dann wird nur die letzte übernommen, da die Variable immer wieder überschrieben wird.

Du solltest jedem Bild einen individuellen Namen geben und dafür dem value Wert einfach 1 zuweisen, dann per PHP abfragen, ist die Variable gültig, also == "1", dann ist diese Auswahl getätigt worden.

damit kann man dann auch gleich die Überprüfung machen, ob mehr als 3 gewählt wurden.
 
@ Robert

Heisst das, dass ich das mit dem Javascript dan sein lassen soll?
bzw. das es damit nicht funktioniert?
 
Zurück
Oben