substr Problem

Taucher_2006

Mitglied
hi Forum,

stehe gerade auf dem Schlauch. Habe ein Formular, das eine Abfrage auf ein 6stelliges Feld hat. Leider will es nicht so wie ich es aus einer anderen Sprache gewohnt bin.
PHP:
<?php
$vpid = $_POST["HVP"];

if (substr($vpid,-3,3) <> "000");{
  echo "Die Prüfziffer stimmt nicht";
        exit;
        }

?>
Die Prüfziffer aus dem Formular wäre HVP000. Hier soll geprüft werden ob die letzten drei Ziffern eine Null ist. Wie muss es richtig sein, dam es funktioniert?

MFG Taucher
 
Bis auf das Semikolon zwischen „)“ und „{“ sieht es korrekt aus.
Lass dir doch einfach ausgeben, was substr($vpid,-3,3) zurückgibt.
 
Trivialerweise könnte man die echo-Anweisung oder eine andere Ausgabefunktion nehmen:
PHP:
echo substr($vpid,-3,3);
Am bessten ist jedoch die var_dump()-Funktion, die auch den Datentyp ausgibt:
PHP:
var_dump(substr($vpid,-3,3));
 
hi,

ok habe ich hinbekommen. Jetzt habe ich das ganz in meine Abfrage eingebaut, leider mit einem kleinen Problem. Ist es so richtig eingebaut?
PHP:
<?php
$verbindung = mysql_connect('xxx','xxx','xxx')
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("xxx") or die ("Datenbank konnte nicht ausgewählt werden");

$username = $_POST["username"];
$passwort = $_POST["passwort"];
$passwort2 = $_POST["passwort2"];
$email =   $_POST["EMail"];
$vpid =    $_POST["HVP"];

if (substr($vpid,-3,3) != "000"){
if($passwort != $passwort2 )
    {
      if($username == "" OR $passwort == "")
      {
        echo "Eingabefehler. Benutzername oder Passwort müssen ausgefüllt sein!. <a href=\"eintragen.html\">Zurück</a>";
        exit;
        }
    echo "Eingabefehler. Passwörter stimmen nicht überein. <a href=\"eintragen.html\">Zurück</a>";
    exit;
    }
$passwort = md5($passwort);

$result = mysql_query("SELECT id FROM login WHERE username LIKE '$username'");
$menge = mysql_num_rows($result);

if($menge == 0)
    {
    $eintrag = "INSERT INTO login (username, passwort, EMail) VALUES ('$username', '$passwort', '$email')";
    $eintragen = mysql_query($eintrag);

    if($eintragen == true)
        {
        echo "Benutzername <b>$username</b> wurde erstellt. <a href=\"login.html\">Login</a>";
        }
    else
        {
        echo "Fehler beim Speichern des Benutzernames. <a href=\"eintragen.html\">Zurück</a>";
        }
     }
else
    {
    echo "Benutzername schon vorhanden. <a href=\"eintragen.html\">Zurück</a>";
    }
    echo "Die HVP ID kann nicht gefunden werden!. <a href=\"eintragen.html\">Zurück</a>";
        exit;
   }
?>
Eventuell liegt aber ein else Problem vor, da nach dem Abschicken nichts mehr geschieht.

mfg Taucher
 
Ich würde es etwas anders aufbauen.
PHP:
$verbindung = mysql_connect('xxx','xxx','xxx') 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("xxx") or die ("Datenbank konnte nicht ausgewählt werden"); 
$errors = array();
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	if( !isset($_POST['username'], $_POST['passwort'], $_POST['passwort2'], $_POST['EMail'], $_POST['HVP']) ) {
		$errors[] = 'Anfragefehler';
	}
	if( !substr($_POST['HVP'], -3, 3)!='000' ) {
		$errors[] = 'Die HVP ID kann nicht gefunden werden!';
	}
	if( empty($_POST['username']) ) {
		$errors[] = 'Benutzername ist leer!';
	}
	if( empty($_POST['passwort']) || $_POST['passwort']!=$_POST['passwort2'] ) {
		$errors[] = 'Passwort ist leer oder Passwortwiederholung ist nicht identisch!';
	}

	if( empty($errors) ) {
		$result = mysql_query("SELECT id FROM login WHERE username LIKE '".mysql_real_escape_string($_POST['username'])."'");
		if( mysql_num_rows($result) ) {
			$errors[] = 'Benutzer bereits vorhanden!';
		}
	}
	if( empty($errors) ) {
		$eintrag = "INSERT INTO login (username, passwort, EMail) VALUES ('".mysql_real_escape_string($_POST['username'])."', '".md5($_POST['passwort'])."', '".mysql_real_escape_string($_POST['email']."')";
		if( !mysql_query($eintrag) ) {
			$errors[] = 'Datenbankfehler';
		}
	}

	if( !empty($errors) ) {
		echo 'Benutzername <b>'.htmlspecialchars($_POST['username']).'</b> wurde erstellt. <a href=\"login.html\">Login</a>';
	} else {
		echo 'Folgende Fehler sind aufgetreten:';
		echo '<ul><li>'.implode('</li><li>', $errors).'</li></ul>';
		echo '<a href="eintragen.html">Zurück</a>';
	}
}
Wenn du mit PHP 5 arbeitest, würde ich Ausnahmen statt der $errors-Variable arbeiten.
 
hi,

wow das ist jetzt aber für einen Anfänger wie mich schon etwas viel. Ich muss mich erstmal mit dem befassen was du mir hier geschrieben hast.

Taucher
 
hi,

es wird die Fehlermelung ausgegeben
Parse error: parse error, unexpected ';' in /homepages/28/d132633840/htdocs/Taucher/eintragen.php on line 38

Taucher
 
Zurück