Eingabe im Textfeld überprüfen

Allytools

Grünschnabel
Hallo,

ich habe mir mit viel Mühe und etlichen Suchanfragen bei Google und hier dieses Formular geschrieben.


PHP:
<?php
mysql_connect("localhost","web1","*******") or die(mysql_error());
mysql_select_db("usr_web1_1")or die(mysql_error());




if(isset($_POST['ueberpruefung'])) 
    { 
    $allesok = 1; 
    
    // Überprüfung Name "Nicht Leer"
    if (empty($_POST['name'])){
        // Meldung Fehler
        $allesok = 0; 
        $error['name'] = '<img src="/images/disable.gif">';
        $error['name1'] = "";
        }else {
        //Meldung OK
        $error['name'] = '<img src="/images/enable.gif">';}
    
    
    // Email überprüfen
    if (!ereg("^.+@.+\\..+$", ($_POST['email']))) {
        // Meldung Fehler
        $allesok = 0; 
        $error['email'] = '<img src="/images/disable.gif">';
        $error['email1'] = "Bitte überprüfe deine Emailadresse"; 
        }else {
        //Meldung OK
        $error['email'] = '<img src="/images/enable.gif">';}
    
    
    // Auswahl Uni überprüfen
    if (is_numeric($_POST['uni'])){
        //Meldung OK
        $error['uni'] = '<img src="/images/enable.gif">';
        }else{
        // Meldung Fehler
        $allesok = 0; 
        $error['uni'] = '<img src="/images/disable.gif">';
        $error['uni1'] = "Bitte wähle ein Uni aus";}

}


// Wenn alle Prüfungen bestanden sind
if($allesok){ 

      //Daten in DB eintragen
      
      $query = "INSERT INTO tool_order (name,email,uni,gala,ally,date_anfrage) 
      VALUES ('".$_POST['name']."','".$_POST['email']."','".$_POST['uni']."','".$_POST['gala']."','".$_POST['ally']."',NOW())";
      mysql_query($query) or die(mysql_error());
      
      //Daten ausgeben
      echo'<table border="0" width="100%" id="table1">
          	<tr>
          		<td colspan="2">Es wurden folgende Daten gespeichert<br><br></td>
          	</tr>
          	<tr>
          		<td width="80">Name :</td>
          		<td>'.$_POST['name'].'</td>
          	</tr>
          	<tr>
          		<td width="80">Email :</td>
          		<td>'.$_POST['email'].'</td>
          	</tr>
          	<tr>
          		<td width="80">Universum :</td>
          		<td>'.$_POST['uni'].'</td>
          	</tr>
          	<tr>
          		<td width="80">Galatool :</td>';
                  if ($_POST['gala'] == 1){
                  echo '<td>Ja</td>';
                  }else{
                  echo '<td>Nein</td>';
                  }
      echo '</tr>
          	<tr>
          		<td width="80">Allytool :</td>';
                  if ($_POST['ally'] == 1){echo '<td>Ja</td>';
                  }else{
                  echo '<td>Nein</td>';
                  }
      echo '</tr>
          	<tr>
          		<td colspan="2">&nbsp;<p>Du wirst in kürze eine Email mit deinen 
          		Zugangsdaten erhalten</td>
          	</tr>
          </table>'; 
          
      // Mail an Admin versenden
    


}

// Bei einem Fehler
else
{
?>
     <table>
      <form name="Tutorial" method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
       <table border="0" width="100%" id="table1" height="30">
      	<tr>
      		<td width="77" height="30">Name</td>
      		<td width="148" height="30"><input type="text" name="name" size="20" value="<?php echo $_POST['name'];?>"></td>
      		<td width="30" height="30" align="center"><?php echo $error['name'];?></td>
      		<td height="30"><font size="1">maximal 8 Zeichen<br>nur aus Groß/Kleinbuchstaben und Zahlen</font></td>
      	</tr>
      	<tr>
      		<td width="77" height="30">Email</td>
      		<td width="148" height="30"><input type="text" name="email" size="20" value="<?php echo $_POST['email'];?>"></td>
      		<td height="30" width="30" align="center"><?php echo $error['email'];?></td>
      		<td height="30"><?php echo $error['email1'];?></td>
      	</tr>
      	<tr>
      		<td width="77" height="30">Universum</td>
      		<td width="148" height="30">
          <select size="1" name="uni">
      		<option selected><?php echo $_POST['uni'];?></option>
          <option>1</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
          <option>5</option>
          <option>6</option>
          <option>7</option>
          <option>8</option>
          <option>9</option>
          <option>10</option>
          <option>11</option>
          <option>12</option>
          <option>13</option>
          <option>14</option>
          <option>15</option>
          <option>16</option>
          <option>17</option>
          <option>18</option>
          <option>19</option>
          <option>20</option>
          <option>21</option>
          <option>22</option>
          <option>23</option>
          <option>24</option>
          <option>25</option>
          <option>26</option>
          <option>27</option>
          <option>28</option>
          <option>29</option>
          <option>30</option>
          <option>31</option>
          <option>32</option>
          <option>33</option>
          <option>34</option>
          <option>35</option>
          <option>36</option>
          <option>37</option>
          <option>38</option>
          <option>39</option>
          <option>40</option>
          <option>41</option>
          <option>42</option>
          <option>43</option>
          <option>44</option>
          <option>45</option>
          <option>46</option>
          <option>47</option>
          <option>48</option>
          <option>49</option>
          <option>50</option>
          <option>51</option>
          <option>52</option>
          <option>53</option>
          <option>54</option>
          <option>55</option>
          <option>56</option>
          <option>57</option>
          <option>58</option>
          <option>59</option>
          <option>60</option>
          <option>61</option>
          <option>62</option>
          <option>63</option>
          <option>64</option>
          <option>65</option>
          <option>66</option>
          <option>67</option>
          <option>68</option>
          <option>69</option>
      		</select></td>
      		<td width="30" height="30" align="center"><?php echo $error['uni'];?></td>
      		<td height="30"><?php echo $error['uni1'];?></td>
      	</tr>
      	<tr>
      		<td width="77" height="30">Galatool</td>
          <td><input name="gala" type="radio" value="1" <?php if ($_POST['gala'] == 1) echo "checked"; ?> /><?php echo 'Ja'; ?>
              <input name="gala" type="radio" value="0" <?php if ($_POST['gala'] == 0) echo "checked"; ?> /><?php echo 'Nein'; ?> </td>
      		<td width="30" height="30" align="center"><?php 
                                                    if ($_POST['gala'] == 1) echo '<img src="/images/enable.gif">'; ?></td>
      		<td height="30">&nbsp;</td>
      	</tr>
      	<tr>
      		<td width="77" height="30">Allytool</td>
      		<td><input name="ally" type="radio" value="1" <?php if ($_POST['ally'] == 1) echo "checked"; ?> /><?php echo 'Ja'; ?>
              <input name="ally" type="radio" value="0" <?php if ($_POST['ally'] == 0) echo "checked"; ?> /><?php echo 'Nein'; ?> </td>
      		<td width="30" height="30" align="center"><?php if ($_POST['ally'] == 1) echo '<img src="/images/enable.gif">'; ?></td>
      		<td height="30">&nbsp;</td>
      	</tr>
      </table>
      <input type="hidden" name="ueberpruefung" value="1">
    <input class="button" type="submit" name="Tutorial" value="Absenden">
  </form>
</table>

<?php
}
?>

Ich bräuchte aber bei zwei Funktionen einen "Denkanstoß" bzw eure Hilfe
  1. Wie kann ich die Überprüfung von $_POST['name'] so umbauen, dass nur noch Buchstaben (kleine und große) erlaubt sind und eine maximale länge von 8 Zeichen?
  2. Nach dem der Name eingegeben ist, soll die DB abgefragt werden ob dieser schon gespeichert ist.

Vielen Dank schon mal im Voraus.
 
Hallo,
das kannst du so lösen, wie auch deine eMail-Überprüfung aussieht,
und zwar mit sog. "regulären Ausdrücken".
Anstatt ereg() nutze ich preg_match(), was im Prinzip das Gleiche erledigt.
PHP:
if(preg_match('/^[a-zA-Z]{3,8}$/',$_POST['name'])){
  // gültige Eingabe
}
Also a-z, A-Z, min. 3 max. 8 Zeichen
http://de.php.net/manual/de/function.preg-match.php
http://de.php.net/manual/de/ref.pcre.php
Eventuell auch noch interessant:
http://de.php.net/manual/de/ref.ctype.php

MfG

edit:
Zu deinem zweiten Punkt:
Du kannst eine SELECT-Abfrage durchführen und wenn die kein Ergebnis liefert, ist der Name auch noch nicht vorhanden oder in der DB das "name"-Feld unique setzen, also dass nicht 2mal das Gleiche vorkommen darf und dann mit mysql_affected_rows() nach dem INSERT prüfen, ob eine neuer Eintrag hinzugefügt wurde.
 
Zuletzt bearbeitet:
Danke für die schnelle Hilfe.

Die Funktion ist genau die, die ich gesucht habe.

Ich habe auch die Spalte 'name' auf unique gesetzt und meinen Code wie folgt geändert:

PHP:
if(isset($_POST['ueberpruefung'])) 
    { 
    $allesok = 1; 
    
    // Überprüfung Name "Nicht Leer"
    if(preg_match('/^[a-zA-Z0-9]{3,8}$/',$_POST['name'])){
        // Meldung OK
        $error['name'] = '<img src="/images/enable.gif">';}
        
      if  ($sql = "SELECT name FROM tool_order WHERE UCASE(tool_order.name) = UCASE('".$_POST['name']."')== 0)"){
        $error['name'] = '<img src="/images/disable.gif">';        
        }else {
        //Meldung Fehler
        $allesok = 0; 
        $error['name'] = '<img src="/images/disable.gif">';
        $error['name1'] = '<font size="1">maximal 8 Zeichen ohne Umlaute oder Sonderzeichen<br>nur aus Groß/Kleinbuchstaben und Zahlen</font>';}

Die Überprüfung von "Name" funktioniert super, nur die Fehlermeldung
Duplicate entry '12345678' for key 2
bekomme ich nicht abgefangen und in meine "normale" Fehlermeldung eingebaut.
 
Wie kann ich denn die Abfrage für "Doppelte Einträge" fehlerfrei, bzw besser gestallten?

Ich schaffe es einfach nicht die Fehlermeldung abzufangen.:confused:
 
Ich würde es so machen:

PHP:
$name = $_POST['name'];
$sql = "SELECT `name` FROM `tool_order` WHERE UCASE(`name`) = '$name'";
$erg = mysql_query($sql) or die("Geht nicht");
if (mysql_num_rows(erg))     // es steht mindestens ein Datensatz in der DB
{
 // error
}
else //ok

versuch mal so ;-)
 
Zuletzt bearbeitet:
Zurück