Portal > Foren > PHP > PHP-Programmierung > Parser-Fehler bei strlen()
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 06.01.2006, 21:17 Nach oben    #1
Benutzer
 
Registriert seit: 27.05.2005
Beiträge: 34
Standard Parser-Fehler bei strlen()

Hallo,

ich starte gerade mit PHP und habe gleich ein kleines Problem:

Ich möchte über ein Formular eine Email-Adresse einlesen. Diese soll dann auch mittels strlen() geprüft werden, aber ich bekomme hier immer einen Fehler.

Code:
<body>
<?php
$email = isset($_POST['email']);
$sent = isset($_POST['sent']);
if ($sent) {

	if (strlen($email)) > 0  { 
		echo 'Email bereits gesetzt';
	}
	else 
	echo 'Email fehlt';
	
}
Wäre für einen Tipp sehr dankbar.

Vielleicht findet sich hier auch jemand, den ich bei Problemen per PN löchern kann?
andy74 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2006, 21:31 Nach oben    #2
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.209
Standard

vieleicht

PHP-Code:
if ($sent) {

    if ( (
strlen($email)) > )
        { 
        echo 
'Email bereits gesetzt';
    }
    else 
    echo 
'Email fehlt';
    


Geändert von robo47 (06.01.2006 um 21:33 Uhr)
robo47 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2006, 21:32 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Hallo erstmal,
Zitat:
Zitat von andy74
ich starte gerade mit PHP und habe gleich ein kleines Problem
Wäre ja schlimm, wenn du das alles direkt könntest *gg*

Also. Generell ist es sehr hilfreich, wenn du die Fehlermeldung per Copy/Paste in deine Beiträge mit einfügst. Kannste ja in "Quote"-bbCode packen oder so.

Nun zum Problem.
Schreibe das mal so:
PHP-Code:
<html>
 <body>
   
    <?php


        
/* 
          Überprüft, ob der Schlüssel "sent" im Array $_POST existiert.
          Du könntest auch auf $_SERVER['REQUEST_METHOD'] == 'POST' 
          prüfen. Wäre wohl auch in Ordnung
        */  
        
if(array_key_exists('sent'$_POST)) {
 
            
/*
               Überprüft die Länge der Mailadresse, wobei trim() die 
               Leerstellen am Anfang und am Ende abtrennt.
            */
            
if(strlen(trim($_POST['mail'])) > 0) {
                
// mach irgendwas dolles .. ;-)
            
}
            else {
                echo 
'Es wurde keine Mailadresse eingegeben.';
            }

        }
        else {
            
// Formular ausgeben
    
?>

        <form action="<?php echo $_SERVER['PHP_SELF']; ?> method="post">
            Mailadresse: <input type="text" name="mail" size="25" />
            <input type="submit" name="sent" value="senden" />
        </form>   

    <?php
        
}

    
?>
  </body>
</html>
Die Funktionen array_key_exists() und trim() kannst du ja mal nachschlagen.

Weiterhin wäre sicherlich auch empty() für dich ganz interessant ... und zu guter letzt .. gibt es sicherlich auch bessere Methoden eine Mailadresse auf ihre Korrektheit zu prüfen (Link)

Zitat:
Zitat von andy74
Vielleicht findet sich hier auch jemand, den ich bei Problemen per PN löchern kann?
Das Forum steht dir offen. Support per PN ist ja nicht der Sinn des Forums. Die muss weder was "peinlich" noch "unangenehm" noch irgendwas anderes sein ..

Lesen, ausprobieren, denken, lesen, denken, ausprobieren, tüfteln, fragen, Antwort lesen, denken, ausprobieren, ärgern, denken, ausprobieren, verzweifeln, nochmal fragen, nochmal Antwort lesen, an sich selbst zweifeln, sich freuen wenn es plötzlich "Klick" macht, nächstes Problem angehen.

Ein ganz normaler Weg .. ich denke, dass man lügt, wenn man sagt, dass einem das nicht bekannt vorkommt *gg*

Grüße Ben.

Geändert von Ben (06.01.2006 um 21:51 Uhr) Grund: Fehlende Klammer hinzugefügt ;-)
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2006, 21:33 Nach oben    #4
Benutzer
 
Registriert seit: 27.05.2005
Beiträge: 34
Standard

Das war´s. Ich sage höflich: Dankeschön
andy74 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2006, 21:33 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Umsonst den Beitrag geschrieben
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2006, 21:41 Nach oben    #6
Benutzer
 
Registriert seit: 27.05.2005
Beiträge: 34
Standard

Zitat:
Zitat von Ben
Umsonst den Beitrag geschrieben
Nene, hab mir auch Deinen Beitrag angesehen, auch gleich ausprobiert und dabei nen Tippfehler entdeckt. War also zum lernen auch sehr hilfreich.
andy74 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2006, 21:50 Nach oben    #7
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Imho ist die andere Lösung nicht so elegant, aber jedem das seine .
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 10:06 Nach oben    #8
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard

Darf ich den oberen Code trotzdem mal durchgehen?
PHP-Code:
<?php
$email 
= isset($_POST['email']);
// in der Voraussetzung, dass die Variable exisitiert hat $email den Wert TRUE, wenn nicht, dann FALSE

// ebenso auch $sent:
$sent = isset($_POST['sent']);
if (
$sent) {


// zu if solltest du nochmal ins Handbuch schauen, oder auch hier:
// http://forum.developers-guide.net/showthread.php?t=18#post88
// ich nehme mal an, dass du if(strlen($email) > 0) schreiben wolltest... doch was bringt das?

// if(strlen(TRUE) > 0)

    
if (strlen($email)) > 0  
        echo 
'Email bereits gesetzt';
    }
    else 
    echo 
'Email fehlt';
    
}
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 14:42 Nach oben    #9
Jay
Gast
 
Beiträge: n/a
Standard

In meiner Validationsklasse habe ich mir folgenden RegEx gebastelt:
PHP-Code:
...
return 
preg_match('/^[_a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,6}$/',$email); 
Natürlich kann man noch genauer prüfen. Allerdings wirst du trotzdem nicht mehr richtige Mail Adressen bekommen, weil jemand der eine falsche eingeben will schreibt abc@def.de => diese Adresse existiert nicht aber kein Ausdruck auf der Welt wird was dagegen haben.
Jemand der eine valide eingeben will kann sich verschreiben z.B. vorname.nachname@domainname.ed
Diese Adresse wird ebenfalls als richtig erkannt.

Man könnte neben der Prüfung noch den Domainnamen filtern und versuchen eine Anfrage mit fopen zu senden '(allow_url_fopen muss an sein). Damit kann man sicher sein, dass die Domain auch wirklich existiert.

Aber ansonsten...

-- Fat Tony
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 15:54 Nach oben    #10
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard

es gibt ferner die Möglichkeit zu prüfen, ob die Adresse existiert, aber ich weiß gerade nicht wie.

meikel hat dazu was geschrieben gehabt.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 15:59 Nach oben    #11
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

.. und zwar die Überprüfung nach einem gültigen MXRecord. Hier aus meiner etwas älteren Klasse:
PHP-Code:
<?php
    
function validateEmail($email$valevel 'Level 1') {
                 
// Prüft die E-Mail Adresse auf ihre gültigkeit,
                 // wobei der Level angegeben werden kann.

                 
if( !preg_match('#^level\s(\d{1})$#isU'$valevel$match) )
                         
$level 'level 1';
                 else
                         
$level strtolower($valevel);

                 
$levelnr = !empty($match[1]) ? $match[1] : substr($level6);
                 if(empty(
$levelnr) || $levelnr == 0)
                         
$levelnr 1;

                 
// Level 1:
                 // Prüfung durch einen Regulären Ausdruck
                 
$nonascii      "\x80-\xff";
                 
$nqtext        "[^\\\\$nonascii\015\012\"]";
                 
$qchar         "\\\\[^$nonascii]";
                 
$protocol      '(?:mailto:-)';
                 
$normuser      '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
                 
$quotedstring  "\"(?:$nqtext|$qchar)+\"";
                 
$user_part     "(?:$normuser|$quotedstring)";
                 
$dom_mainpart  '[a-zA-Z0-9][a-zA-Z0-9._-]*\\.';
                 
$dom_subpart   '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*';
                 
$dom_tldpart   '[a-zA-Z]{2,6}';
                 
$domain_part   "$dom_subpart$dom_mainpart$dom_tldpart";
                 
$regex         "$protocol?$user_part\@$domain_part";

                 
$valid preg_match("#^$regex$#",$email);
                 
                 if(
$levelnr == || !$valid)
                         return 
$valid;

                 if(
$levelnr 1) {
                         
// Level 2:
                         // Testen ob der Hostname gültig ist
                         
$valid FALSE;
                         
$temp explode('@'$email);
                         
$host $temp[1];

                         if( 
$fp = @fsockopen($host25$errno$errtext1) AND !empty($host) ) {
                                 
$valid TRUE;
                                 @
fclose($fp);
                         }
                         else
                                 
$valid FALSE;
                 }
                 if(
$levelnr == || !$valid)
                         return 
$valid;

                 if(
$levelnr 2) {
                         
// Level 3:
                         // Testen, ob ein gültiger MX-Record existiert

                         // Falls die Funktion getmxrr noch nicht existiert
                         // wird der derzeitige Prüfungsstand zurückgegeben
                         
if( !function_exists('getmxrr') )
                                 return 
$valid;

                         elseif( 
function_exists('getmxrr') AND @getmxrr ($host$mx) ) {
                                 
$valid TRUE;
                         }

                         elseif( 
function_exists('getmxrr') AND !@getmxrr ($host$mx)) {
                                 
// Nimmt der Host dann wenigstens E-Mails an?
                                 
if ( $fp1 = @fsockopen($mx[0], 25 $errno$errtext1) AND !empty($mx[0])) {
                                         
$valid TRUE;
                                 }

                                 else
                                         
$valid FALSE;
                         }
                         return 
$valid;
                 }
        }
__________________
http://www.ChrisDiary.De

Geändert von Chr!s (07.01.2006 um 16:01 Uhr)
Chr!s ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 17:52 Nach oben    #12
Jay
Gast
 
Beiträge: n/a
Standard

@Chr!s
Mit der habe ich auch schon mal gearbeitet, allerdings funktioniert das nur unter Linux.
Wenn jemand was platformunabhängiges hat. Immer her damit!

Mfg Fat Tony

Geändert von Jay (07.01.2006 um 18:03 Uhr)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.01.2006, 19:25 Nach oben    #13
Benutzer
 
Registriert seit: 27.05.2005
Beiträge: 34
Standard

Ist ja eine nette Diskussion geworden. Aber mein Ziel des Scriptes war eigentlich nur ein Eingabeforumular für Email und weitere Daten, welche dann in eine MySQL-DB eingetragen werden sollten. Und dabei wollte ich halt prüfen, ob eine Email eingetragen wurde (Pflichtfeld). Ob die Email existiert, war für mich nicht so von Interesse, da ich in einer weiteren Stufe dann eine Bestätigungsmail einbauen wollte.

Falls sich jemand fragt, warum so stufenweise.... ich versuch, es zu lernen und dabei auch zu verstehen. Würde mich aber über Tipps zur Herangehensweise an ein solches Script freuen.

Grüße
Andy74
andy74 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 09:23 Nach oben    #14
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.379
Standard

ok, wenn du einfach nur prüfen willst, ob etwas eingegeben wurde:

PHP-Code:
<?php
if(isset($_POST['email']) && isset($_POST['name']))
{
  
// ... Werte wurden übergeben
  // Wenn du überprüfen willst, ob die Variablen auch einen Wert beinhalten, dann musst du empty() benutzen
}
else
{
  
// das Formular
}
?>
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 15:12 Nach oben    #15
JaGeK
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Fat Tony
Wenn jemand was platformunabhängiges hat. Immer her damit!
Vielleicht taugt ja der Vorschlag im Manual was...
Zitat:
Zitat von http://php.net/getmxrr
Note: This function is not implemented on Windows platforms. Try the PEAR class Net_DNS.
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 21:57 Nach oben    #16
Benutzer
 
Registriert seit: 27.05.2005
Beiträge: 34
Standard

Ich habe mich nun einmal mittels isset() unset() und empty() ein Script gebastelt. Nun erhalte ich jedoch folgenden Fehler:
Zitat:
Parser-Fehler: C:\Programme\xampp\htdocs\zend\r1.php Zeile 25 - syntax error, unexpected $end
Der Code dazu:
PHP-Code:
<?php
if (isset($_POST['email'])) {
    if (empty(
$_POST['email'])) {
        unset(
$_POST['email']);
        echo <<<form
            <form method="POST" action="{$_SERVER['PHP_SELF']}">
            <input type="submit" name="Senden" value="Noch einmal probieren">

            form;
        }
    else {
        echo 'Email gesetzt';
    }
}

else {
echo <<<form
<form method="POST" action="
{$_SERVER['PHP_SELF']}">
Email: <input type="text" name="email" size="50">
Handy: <input type="text" name="handy" size="50">
<input type="submit" name="Senden" value="Senden">
form;
}
?>
Was hat es mit diesem $end auf sich?
andy74 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 22:01 Nach oben    #17
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Wenn Du PHP-Code in Deinen Beiträgen verwendest .. dann nutze bitte auch den bbCode für PHP. Danke.

Was genau soll das hier sein?
PHP-Code:
        echo <<<form
            <form method="POST" action="{$_SERVER['PHP_SELF']}">
            <input type="submit" name="Senden" value="Noch einmal probieren">

            form; 
Das "$end" sagt nur, dass irgendwo eine Klammer zu wenig ist .. so grob erklärt .
Es wird also noch etwas erwartet, z.B. bzw. meistens (oder sogar immer?) eine fehlende schließende Klammer.

Grüße Ben.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 22:07 Nach oben    #18
Benutzer
 
Registriert seit: 27.05.2005
Beiträge: 34
Standard

Ich hatte es mir damit so gedacht: Es wird geprüft, ob 'email' gesetzt ist. Wenn ja, wird geprüft, ob 'email' Daten enthält. Wenn leer, soll 'email' wieder gelöscht werden und das Script erneut starten.
Es gibt da sicherlich bessere Lösungen. Aber da ich mich noch nicht allzu lange mit php beschäftige, war dies meine erste Variante, die mir eingefallen ist. Durch den Parser-Fehler konnte ich leider noch nicht testen, ob dies so überhaupt funktioniert.
andy74 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.01.2006, 22:25 Nach oben    #20
JaGeK
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Ben
Das "$end" sagt nur, dass irgendwo eine Klammer zu wenig ist .. so grob erklärt