PHP Problem Überprüfung einer Angabe

minbo

Allington Pepping
Registriert
08.01.04
Beiträge
190
Hallo,

ich habe nicht viel Ahnung über PHP, also keine Ahnung, nichtsdestotrotz soll für die Fachhochschule eine Webseite erstellt werden mit einer PHP Anwendung.

Ich habe mir überlegt eine Seite mit einer Interessengemeinschaft zu gestalten. Es erscheint ein Formular mit Angaben des Nicknames, Geburtsjahr, Passwort, emailadresse und ein paar Hobbies, die per Checkbox abgehackt werden. Eine Sendebutton lässt alle Infos in eine txt schreiben und dann auf der nächsten Seite werden die Personen angezeigt, die die gleichen Interessen haben.

Mein Problem ist jetzt bei der Überprüfung des "Nicknames", des Spitznamens. Gewollt ist eine Ausgabe des Textes, dass der Name schon vergeben ist und dann soll nur das Formular kommen, damit man sich einen anderen Namen eintragen kann, aber da kommen leider auch alle anderen Infos.

Wie schreibe ich das in PHP, dass bis auf das Formular nichts mehr kommen soll?
Code:
<html>
<head>
    <title>
    Registrierung
    </title>
</head>
<body>
<?php
if (isset($submit)) {
$userdefined=false;
$interessen_array=file("register.txt");
foreach ($interessen_array as $zeile){
	$felder= split (",",$zeile);
	if ($nickname == $felder[0]) {
		$userdefined=true;
	}
}
if ($userdefined==true) {
?>
Nickname schon vergeben. Bitte geben Sie einen anderen Namen ein.
<br>
<form action="register.php" method=POST>
<br>
  <table border="0" cellpadding="5" cellspacing="0" bgcolor="#E0E0E0">
    <tr>
      <td align="right">Nickname:</td>
      <td><input name="nickname" type="text" size="30" maxlength="30"></td>
    </tr>
    <tr>
      <td align="right">Kennwort:</td>
      <td><input name="kennwort" type="password" size="6" maxlength="12"></td>
    </tr>
     <tr>
      <td align="right">E-Mail:</td>
      <td><input name="Mail" type="text" size="30" maxlength="30"></td>
    </tr>
    <tr>
      <td align="right">Geburtsjahr(z.B. 1954):</td>
      <td><input name="geb" type="text" size="4" maxlength="4"></td>
    </tr>
<?php
$interessen_array=file("hobbies.txt");
foreach ($interessen_array as $hobby){
	print "<tr><td align='right'>".$hobby."</td><td><input type='checkbox' name='interessen[]' value='".$hobby."'></td></tr>";
}
?>
	<table border="0">
        <input type="submit" name="submit" value=" Absenden">
        <input type="reset" value=" Angaben l&ouml;schen">
   </table>
<?php
} else {
print "Nickname:".$nickname."<br>";
print "Geburtsjahr:".$geb."<br>";
print "Interessen: ";
$n=count($interessen);
$i=0;
foreach ($interessen as $element){
	$i=$i+1;
	print $element;
	if ($i<$n) {
		print ", ";
	}
}
print "<br>";
$handle=fopen("register.txt",'a');
fputs($handle,$nickname.",".$kennwort.",".$Mail.",".$geb.",");
foreach($interessen as $element) {
fputs($handle,$element.",");
}
fputs($handle,"\r\n");
fclose($handle);
}
print "<h2>Personen mit gleichen Interessen:</h2>";
$interessen_array=file("register.txt");
foreach ($interessen as $hobby){
	print "<h3>Hobby ".$hobby.":</h3>";
	foreach ($interessen_array as $zeile){
		$felder= split (",",$zeile);
		foreach ($felder as $phobby){
			if ($hobby == $phobby){
				print $felder[0]." Kontakt &uuml;ber email: <a href='mailto:".$felder[2]."'>".$felder[2]."</a><br>";
			} 
		}
	}
}
} else {
?>
<center><h1>Willkommen bei lust zu Leben.de</h1></center>
<br>
Zun&auml;chst einmal ben&ouml;tigen wir ihre Daten. Bitte f&uuml;llen sie die Felder aus. Sie sollten sich nur mit einem Nickname eintragen, so bleibt ihre Anonymit&auml;t gewahrt.
<br>
<form action="register.php" method=POST>
<br>

  <table border="0" cellpadding="5" cellspacing="0" bgcolor="#E0E0E0">
    <tr>
      <td align="right">Nickname:</td>
      <td><input name="nickname" type="text" size="30" maxlength="30"></td>
    </tr>
    <tr>
      <td align="right">Kennwort:</td>
      <td><input name="kennwort" type="password" size="6" maxlength="12"></td>
    </tr>
     <tr>
      <td align="right">E-Mail:</td>
      <td><input name="Mail" type="text" size="30" maxlength="30"></td>
    </tr>
    <tr>
      <td align="right">Geburtsjahr(z.B. 1954):</td>
      <td><input name="geb" type="text" size="4" maxlength="4"></td>
    </tr>
<?php
$interessen_array=file("hobbies.txt");
foreach ($interessen_array as $hobby){
	print "<tr><td align='right'>".$hobby."</td><td><input type='checkbox' name='interessen[]' value='".$hobby."'></td></tr>";
}
?>
	<table border="0">
        <input type="submit" name="submit" value=" Absenden">
        <input type="reset" value=" Angaben l&ouml;schen">
   </table>
<?php
}
?>


</body>
</html>

Bitte erschlagt mich nicht. Ich habe 1,5 Tage lang php an der FH gehabt und noch 1,5 Tage HTML.
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Hast du die Möglichkeit einen Datenbank zu benutzen? Wenn du eine zur Verfügung hast, lässt sich dein Problem viel einfacher und professioneller lösen.
 

minbo

Allington Pepping
Registriert
08.01.04
Beiträge
190
Danke für die Antwort. Nein, ich darf keine Datenbank benutzen. Die Vorgabe ist das html und php benutzt wird.

Ich wollte eine Überprüfung des Alters vornehmen und das geht wohl auch komfortabler mit Javascript, aber ich darf auch nicht bzw. sollte nicht. Es muss einfach mal so lösbar sein.

Hast du denn etwas gefunden, auch wenn es unelegant ist?
 

stk

Grünapfel
Registriert
05.01.04
Beiträge
7.141
Moin,

nimm PEAR - da hast fertige Klassen um die ganzen Formularüberprüfungen ordentlich zu machen.

Gruß Stefan
 

minbo

Allington Pepping
Registriert
08.01.04
Beiträge
190
Hallo stk,

ich verstehe nicht, was ich damit soll und müsste mich da einarbeiten. Auch wenn es dilletantisch aussieht, was ich fabriziert habe. Die anderen werden auch nicht besser sein.
Ist das Problem den so schwerwiegend? Ich dachte, dass da irgendwo eine Zeile fehlt, die sagt: "Halt, nur das Formular".
 

Demo

Süssreinette (Aargauer Herrenapfel)
Registriert
02.04.04
Beiträge
411
Schau mal hier.
Als Denkanstoss sollte das sicherlich genuegen und wenn du damit rumspielst wirst Du auf dein erhofftes Ergebnis kommen.*


*Sofern ich Deine Frage richtig verstand.
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Es wird etwas komplizierter wenn du überprüfen willst ob der name schon in der txt Datei steht. Du musst dann die komplette Datei auslesen, weil du keine einzelnen Zeilen auswählen kannst. Danach musst du die Variable am besten mit regularen Ausdrücken und preg_match(); durchsuchen ob der Name schonmal vorgekommen ist und danach musst du die Datei neu schreiben. Ist also wirklich etwas komplizierter als es aussieht. Besonders die regulären Ausdrücke sind manchmal ganz schön fies.
 

chubchik

Gast
Hallo!
und an DBM / DBA hat keiner hier gedacht? Wäre eigentlich jetzt die idealste Lösung, falls keine RDBMS DBs benutzt werden dürfen. Ist dann im Prinzip auch eine Art DB, die über minimale DB Funktionalitäten verfügt, nur dann ist es eben ein File, was lokal auf dem FS liegt und dabei ist das komplette noch ziehmlich schnell, auch bei einer großen Anzahl der Daten.

Bei Interesse poste ich hier paar Beispiele...


viele Grüße
eugen
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Ich fänds cool, wenn du das mal zeigen könntest. Hab noch nie was davon gehört.
 

chubchik

Gast
duderino schrieb:
Ich fänds cool, wenn du das mal zeigen könntest. Hab noch nie was davon gehört.

http://de2.php.net/manual/de/ref.dba.php
Hier findest Du eigentlich alle Infos dazu und auch paar kleine Beispiele, die aber schon ganz gut die Richtung zeigen, wo es lang geht bei derartigen DBs.

Du musst aber halt sicherstellen, dass eine der mehreren Extensions für DBA in deinem PHP enthalten ist, sonst geht es natürlich nicht... aber ich meine, neukompilieren kann ja PHP fast immer und bei Schlund und so sind die Extensions immer dabei...
 
  • Like
Reaktionen: duderino

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Cool, danke. Hab schon ein paar Ideen wo ich dieses einfache System einsetzen kann. Supi!
 

TheRealDarklord

Gast
duderino schrieb:
Es wird etwas komplizierter wenn du überprüfen willst ob der name schon in der txt Datei steht. Du musst dann die komplette Datei auslesen, weil du keine einzelnen Zeilen auswählen kannst.
Das macht er schon bei file()... usw.
Das ist nicht viel komplizierter als ein Query an eine DB abzusetzen.
Und sofern man sich die Datensätze zeilenweise speichert und die einzelnen Werte durch einen eindeutigen Separator (Z.B. | [Alt Gr] + Größer/Kleiner-Taste) trennt, steht einem fehlerfreien Auslesen nichts im Weg.

@Topic
Habe mir dein ganzes Gewurschtel angesehen und keinen Fehler entdeckt.
Rein theoretisch müsste es funktionieren.
Aber leider sind Theorie und Praxis meist nicht vereinbar.

kleine Tipps noch:
- bei if und else Blöcken konsequent einrücken (haste am Anfang nicht so gemacht), dient einfach der besseren Lesbarkeit
- auf Variablen aus einem Formular mittels $_POST[var_name] zurückgreifen (hat den Sinn, dass diese Variablen nicht durch andere interne, identische Variablennamen überschrieben werden bzw. nicht per Linkanhängsel verändert werden können)

vllt. haste ja auch nur irgendwo eine } falsch gesetzt
das ist jetzt schwer herauszufinden wo, da dein Quelltext (meiner bescheidenen Meinung nach) nicht ganz optimal eingerückt ist
 

minbo

Allington Pepping
Registriert
08.01.04
Beiträge
190
Irgendwie wurde ich über Veränderungen im Thread nicht mehr benachrichtigt und habe das Problem mit JavaScript gelöst.
Es scheint sich ja verselbstständigt zu haben. Danke für alles.
Die Arbeit ist abgegeben und gut is...
 

minbo

Allington Pepping
Registriert
08.01.04
Beiträge
190
danke für die Mühe, aber ich bin kein Programmierer und werde es nie sein, deswegen habe ich auch keine Ahnung davon wie man einen vernünftigen Quelltext schreibt.