1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

PHP Problem Überprüfung einer Angabe

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von minbo, 13.02.06.

  1. minbo

    minbo Allington Pepping

    Dabei seit:
    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.
     
  2. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    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.
     
  3. minbo

    minbo Allington Pepping

    Dabei seit:
    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?
     
  4. stk

    stk Grünapfel

    Dabei seit:
    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
     
  5. minbo

    minbo Allington Pepping

    Dabei seit:
    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".
     
  6. Demo

    Demo Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    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.
     
  7. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    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.
     
  8. chubchik

    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
     
  9. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    Ich fänds cool, wenn du das mal zeigen könntest. Hab noch nie was davon gehört.
     
  10. chubchik

    chubchik Gast

    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...
     
    duderino gefällt das.
  11. duderino

    duderino Goldparmäne

    Dabei seit:
    26.01.06
    Beiträge:
    556
    Cool, danke. Hab schon ein paar Ideen wo ich dieses einfache System einsetzen kann. Supi!
     
  12. 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
     
  13. minbo

    minbo Allington Pepping

    Dabei seit:
    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...
     
  14. minbo

    minbo Allington Pepping

    Dabei seit:
    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.
     

Diese Seite empfehlen