form mit js validieren und dann per php in db

Kropotkin

Mitglied
Hallo.
Hab da wieder ein Problem

folgendes form will ich validieren und dann an die Datenbank inserten
Die Funktion check_form(this) is JS und überprüft ob dies und das eingegeben ist.
Mein Anliegen ist nach Druck des Speichern-Buttons, wenn alles richtig ausgefüllt ist,die Daten mit php in der Datenbank zu speichern. Wenn etwas falsch ist, soll nicht gespeichert werden, sonder der Fokus auf das entsprechende Feld gesetzt werden. Aber der Teil funktioniert schon. Ausserdem wollte ich eigentlich die Seite nicht verlassen, deswegen action =""
Im Übrigen Euch allen ein prächtiges 2008

Kropotkin

PHP:
<form name="formular"  onsubmit="return check_form(this)"  action="">
  <table border="0" cellspacing="0" cellpadding="5" summary="formularcheck" width="528">
    <tr>
      <th colspan="2"> Stammdaten <span>(*=Pflichtfeld)</span> die Tabellenstyles m&uuml;ssen &uuml;berarbeitet werden ...</th>
    </tr>
    <tr>
      <td width="188"colspan="1" class="ll"> Heimathafen</td>
      <td width="407"><input type="text" size="16"class="uip"name="Heimathafen" value=" <?php echo $result[3] ?> " ></td>
      
    </tr>
    <tr>
      <td class="ll"colspan="1"> Name des Bootes *</td>
      <td width="407"><input type="text" name="Bootsname" size="16"class="uip"></td>
    </tr>
    <tr>
      <td class="ll"colspan="1"> Hersteller</td>
        <td width="407"><input type="text" name="Hersteller" size="16"class="uip"></td>
    </tr>
    <tr>
        <td class="ll"colspan="1"> Laenge</td>
      <td width="407"><input type="text" name="Laenge" size="4"></td>
    </tr>
    <tr>
      <td class="ll"colspan="1"> Breite</td>
      <td width="407"><input type="text" size="4" name="Breite"></td>
    </tr>
    <tr>
      <td class="ll"colspan="1"nowrap> Schiffsttyp(mind. 1 ankreuzen)* </td>
      <td><input type="checkbox"name="schiffstyp[]"value="ketch">
        Mono, 2 Mast<br>
        <input type="checkbox"name="schiffstyp[]"value="sloop">
        Mono, 1 Mast<br>
        <input type="checkbox"name="schiffstyp[]"value="kat">
        Katamaran<br>
        <input type="checkbox"name="schiffstyp[]"value="sonstiges">
        Sonstiges<br>      </td>
    </tr>
    <tr>
      <td class="ll"colspan="1"> sonstige Mitteilungen <span>(max.100 Zeichen)</span> </td>
      <td><textarea rows="4"cols="40" class="uip"name="message"></textarea></td>
    </tr>
    <tr>
      <td class="ac"colspan="1"><input type="submit" value="Speichern"></td>
      <td class="ac"colspan="1"><input name="Reset" type="reset" value="zurücksetzen"></td>
    </tr>
  </table>
</form>
.
 
Zuletzt bearbeitet:
Hallo,

erst ein paar Fragen:
Hast du schon eine Datenbankverbindung aufgebaut?
Hast du schon eine Tabelle in der Datenbank?
Welchen Datenbanktyp hast du?

Ein Beispiel für MySQL ist im Anhang (wäre zu lang, um es hier mitzuschreiben).

Ich hoffe, dass alles funktioniert :D
Das mit den Schiffstypen weiß ich nicht, ob das so stimmt, aber alles andere eigentlich schon.

MfG
Fabsch
 

Anhänge

Hey , danke für das script.
Hat gut geholfen. Vor allem versteh ich jetzt auch mehr :)
Das einzige, hast du auch shcon angedeutet , ist das Problem mit dem Auswerten der checkbox....

Grüsse
 
Hi,

hast du Probleme mit dem Auswerten der Schiffstypen in PHP oder JS?

In JS würde es z.B. folgendermaßen funktionieren:
HTML:
function check(){
	for(var i = 0; i < document.getElementsByName("schiffstyp[]").length; i++){
		if (document.getElementsByName("schiffstyp[]")[i].checked == true){
			return true;
		}		
	}
	return false;
}

In PHP solltest du dir folgende Funktionen ansehen:
http://www.php.net/is_array
http://www.php.net/implode


Gruß

.:lay-z-cow:.
 
OT: Schön anzusehen, dass hier noch niemand darauf hingewiesen hat, dass validieren von Client-Daten ($_GET, $_POST, $_COOKIE etc.) via JS zwar eine schöne Spielerei ist, aber keinen entgültigen Schutz gegen SSL-Injections darstellt.
Jede Eingabe muss (zusätzlich) mit PHP auf Richtigkeit überprüft werden und man sollte auch noch mysql_real_escape_string(); benutzen.
 
Erstmal Danke an Fabsch. Code funktioniert, bis auf die Checkboxen :)
Ja Lay-z-cow, das ist schon so mit JS umgesetzt und geht auch, siehe in meinem Beispiel oben die Arraydeklaration...

OT: Schön anzusehen, dass hier noch niemand darauf hingewiesen hat, dass validieren von Client-Daten ($_GET, $_POST, $_COOKIE etc.) via JS zwar eine schöne Spielerei ist, aber keinen entgültigen Schutz gegen SSL-Injections darstellt.
Jede Eingabe muss (zusätzlich) mit PHP auf Richtigkeit überprüft werden und man sollte auch noch mysql_real_escape_string(); benutzen.
Hallo.
Hmm das versuche jetzt mal umzusetzen:beim Nachlesen hab ich übrigens begriffen, was SQL-injection bedeutet. Ichh hatte vorher gedacht, dass es ein mathematischen Hintergrund hat (Surjektion, Bijektion, usw...)
Fabsch hat mir schon unter die Arme gegriffen.
ich nahm dessen Vorschlag an.
Nun hab ich 'weitergebastelt' . Ich verzweifle mom an 2 Dingen.
Wieso gelingt es nicht, nachdem Daten ERFOLGREICH in die DB eingetragen sind, DIESE Daten im Formular automatisch anzuzeigen ?
Wo muss ich Was hinschreiben, dass es nochmal reloaded mit den Daten, denn sonst isses einfach leer.
Und: wieso kann ich nicht DATEN ÄNDERN (Button 'Modifizieren', wenn sie denn dann angezeigt werden (durch F5 oder neuladen)?

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
<!--

//Standard-Fehlermeldung
strMsg='Fehler';

arrFields=new Array();
arrFields['Heimathafen']    = new Array(1,/^.{1,20}/,'bitte Heimathafen eintragen!');
arrFields['Bootsname']      = new Array(1,/^.{1,25}/,'Name des Bootes vergessen?');
arrFields['schiffstyp[]']   = new Array(0,'==1','Bitte mind. und max. 1 Schiffstyp wählen');
</script>
<script type="text/javascript" src="YT.js"></script>
<?php
//Datenbank ansprechen
$wasda = false;
$link = mysql_connect('localhost', 'root', '');
if (!$link)
{
   die('Verbindung nicht möglich : ' . mysql_error());
}
	// benutze Datenbank TEST
$db_selected = mysql_select_db('test', $link);
if (!$db_selected)
{
   die ('Kann DB nicht benutzen : ' . mysql_error());
}



//in diese Tabelle werden die Daten geschrieben:
$db_table = "tblStamm";


//wir suchen im Stamm, wenn ein DS da ist, dann darf kein neuer angelegt werden
$sSQL = "SELECT * FROM tblSTAMM LIMIT 1";
$ww = mysql_query($sSQL)
        or die(mysql_error());
        $result = mysql_fetch_array($ww);
$num_rows = mysql_num_rows($ww); 
echo "$num_rows Rows\n";
if ($num_rows > 0) {
$wasda = true;
echo "$num_rows Rows\n";
}
//dann hier, wenn das Formular abgeschickt wurde:
if ( $_POST["speichern"] )
{	echo "speichern";
	//benötigtes in Variablen schreiben
	$schiffstyp = "";
	//Schiffstypen raus, um zu vereinfachen, wennich mal weiss wie man checkboxwerte ANZEIGT, kommen sie wieder...
	
	//in die Datenbank schreiben
	mysql_query("INSERT INTO {$db_table} (Boot_Heimathafen, Boot_Name, Boot_Hersteller, Boot_Laenge, Boot_Breite)
				 VALUES('{$_POST['Heimathafen']}', '{$_POST['Bootsname']}', '{$_POST['Hersteller']}', '{$_POST['Laenge']}',
						'{$_POST['Breite']}')") OR PRINT("Fehler beim Eintragen: ".mysql_error()."<br>");
		
//ist es so besser ?
$query = sprintf("INSERT INTO {$db_table} (Boot_Heimathafen, Boot_Name, Boot_Hersteller, Boot_Laenge, Boot_Breite) VALUES ('%s', '%s', '%s','%s','%s')",
				mysql_real_escape_string({$_POST['Heimathafen']}, $link),
				mysql_real_escape_string({$_POST['Bootsname']}, $link),
				mysql_real_escape_string({$_POST['Hersteller']}, $link),
				mysql_real_escape_string({$_POST['Laenge']}, $link),
				mysql_real_escape_string({$_POST['Breite']}, $link);)

        mysql_query($query, $link);						
								
	//echo "'{$_POST['Heimathafen']}', '{$_POST['Bootsname']}', '{$_POST['Hersteller']}', '{$_POST['Laenge']}',
	//					'{$_POST['Breite']}', '{$schiffstyp}', '{$_POST['message']}'";
				 
}

if ($_POST["aendern"])
{echo "Aendern";}

//nachfolgendes Funktioniert nicht:        
mysql_query("UPDATE tblStamm (Boot_Heimathafen ='{$_POST['Heimathafen']}' WHERE PK_Stamm = '$_POST['ID']' ") OR PRINT("Fehler beim Eintragen: ".mysql_error()."<br>");
						
?>
</head>

<body>
<?php


?>
<form method="post" name="formular"  onsubmit="return check_form(this)"  action="">
  <table border="0" cellspacing="0" cellpadding="5" summary="formularcheck" width="528">
    <tr>
      <th colspan="2"> Stammdaten <span>(*=Pflichtfeld)</span> die Tabellenstyles m&uuml;ssen &uuml;berarbeitet werden ...</th>
    </tr>
    <tr>
      <td width="188"colspan="1" class="ll"> Heimathafen</td>
      <td width="407"><input type="text" size="16" class="uip" name="Heimathafen" value="<?php if ($wasda){echo $result[3];} ?>" ></td>
    </tr>
    <tr>
      <td class="ll"colspan="1"> Name des Bootes *</td>
      <td width="407"><input type="text" name="Bootsname" size="16" value="<?php if ($wasda){echo $result[2];} ?>"></td>
    </tr>
    <tr>
      <td class="ll"colspan="1"> Hersteller</td>
        <td width="407"><input type="text" name="Hersteller" size="16" value="<?php if ($wasda){echo $result[4];} ?>"></td>
    </tr>
    <tr>
        <td class="ll"colspan="1"> Laenge</td>
      <td width="407"><input type="text" name="Laenge" size="4"></td>
    </tr>
    <tr>
      <td class="ll"colspan="1"> Breite</td>
      <td width="407"><input type="text" size="4" name="Breite"></td>
    </tr>
    
    <tr>
      <td class="ll"colspan="1"> sonstige Mitteilungen <span>(max.100 Zeichen)</span> </td>
      <td><textarea rows="4" cols="40" class="uip" name="message"></textarea></td>
    </tr>
    <tr>
       <td><? if($wasda)    {    ?>
         <input type="submit"  name="aendern" value="Modifizieren" />
         <? }else {    ?>
<input type="submit" name="speichern" value="Einf&uuml;gen">
<? }    ?></td>
        <td class="ac"colspan="1"><input name="Reset" type="reset" value="zurücksetzen"><input name="ID" type="text" value="<?php if ($wasda){echo $result[0];} ?>"></td>
    </tr>
  </table>
</form>

</body>
</html>

Für eine Antwort, sehr dankbar,

Kropotkin
 
Zuletzt bearbeitet:
Hallo,

Code:
//nachfolgendes Funktioniert nicht:        
mysql_query("UPDATE tblStamm (Boot_Heimathafen ='{$_POST['Heimathafen']}' WHERE PK_Stamm = '$_POST['ID']' ") OR PRINT("Fehler beim Eintragen: ".mysql_error()."<br>");

Welche MySQL-Fehler kommt denn?
Aber: nach UPDATE tblStamm ist ein (
kann es sein, dass du diesen da aus Versehen hin gemacht hast?

Edit: Ein richtiger Code:
PHP:
mysql_query("UPDATE tblStamm SET Boot_Heimathafen ='{$_POST['Heimathafen']}' WHERE PK_Stamm = '{$_POST['ID']}'") OR PRINT("Fehler beim Eintragen: ".mysql_error()."<br>");

MfG
Fabsch
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück