Formulardaten speicher sich nicht in der Datenbank!

P

PilotPirx

Auch ich hab hier das gleiche Problem wie Stefan. Das Formular funktioniert so eigentlich ganz gut. Der Wechsel auf die nächste Seite mit übergabe der ID funktioniert auch einwandfrei. Nur lässt sich nichts in der Datenbank speichern. Findet jemand den Fehler?

PHP Script erstes Formular (index.php).

PHP:
<?php require_once('Connections/seminar.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) 
  {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) 
{
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) 
{
  $insertSQL = sprintf("INSERT INTO veranstaltung (id, veranstaltungstext, beschreibung) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['id'], "int"),
                       GetSQLValueString($_POST['veranstaltungstext'], "text"),
                       GetSQLValueString($_POST['beschreibung'], "text"));

  mysql_select_db($database_seminare, $seminar);
  mysql_query($insertSQL, $seminar) or die(mysql_error());
  
  $insertGoTo = "ort.php?id=" . mysql_insert_id ( $seminar );
  
  if (isset($_SERVER['QUERY_STRING']))
  	{ 
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
	}

  header(sprintf("Location: %s", $insertGoTo));
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Seminar</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form method="post" name="seminarindex" action="ort.php">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Veranstaltungstext:</td>
      <td><input type="text" name="veranstaltungstext" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Beschreibung:</td>
      <td><input type="text" name="beschreibung" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input name="submit" type="submit" value="Datensatz einfügen"></td>
    </tr>
  </table>
  <input name="id" type="hidden" id="id" value="seminarindex">
  <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>"> 
</form>
<p>&nbsp;</p>
</body>
</html>


und das zweite Formular (ort.php)


PHP:
<?php require_once('Connections/seminar.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) 
  {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
$id .= $_POST['id'];

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) 
{
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) 
{
  $insertSQL = sprintf("INSERT INTO veranstaltungsort (veranstaltung_id, straße, plz, ort) VALUES (%s, %s, %s, %s)",
                       GetSQLValueString($_POST['veranstaltung_id'], "int"),
                       GetSQLValueString($_POST['straße'], "text"),
                       GetSQLValueString($_POST['plz'], "int"),
                       GetSQLValueString($_POST['ort'], "text"));

  mysql_select_db($database_seminare, $seminar);
  mysql_query($insertSQL, $seminar) or die(mysql_error());
  
  $insertGoTo = "ort.php";

  if (isset($_SERVER['QUERY_STRING']))
  	{ 
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
	}

  header(sprintf("Location: %s", $insertGoTo));
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Veranstaltungsort</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form method="post" name="seminarort" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Straße:</td>
      <td><input type="text" name="straße" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Plz:</td>
      <td><input name="plz" type="text" size="32" maxlength="5"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Ort:</td>
      <td><input type="text" name="ort" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><div align="center">
        <input type="submit" value="Datensatz einfügen">
      </div></td>
    </tr>
  </table>
  <input name="hidden_id" type="hidden" id="id" value="seminarort">
  <input type="hidden" name="veranstaltung_id" value="<?php echo $_GET['id']; ?>"> 
</form>
<p>&nbsp;</p>
</body>
</html>


ich wäre um Hilfe sehr dankbar.
 
Nimm die header weiterleitung raus, laß dir nen print ausgeben bevor der mysql_query aufgerufen wird...
Laß dir den query via <pre>...</pre> ausgeben.
Kontrolliere ob die verbindung aus der variable $seminarexistiert..
Kopiere den SQL-Query und versuche via phpmyadmin ihn auszuführen und dann bist du um einiges schlauer...
1. Wird es aufgerufen.
2. Existiert eine Verbindung
3. Ist der Query inordnung....
 
Erstmal danke für eine Antwort!

Also, ich hab mal einige Varianten ausprobiert. Die Ausgabe erfolgte an mehreren Stellen mit einem einfachen "echo;"
Daraufhin habe ich festgestellt das dass versteckte Feld schlicht einen anderen Namen hatte.
Desweiteren war die Variable in "mysql_select_db" falsch benannt.

Tja, Anfängerfehler!

Das Problem ist nun, dass ich eine Fehlermeldung bei der Umleitung zum zweiten Formular mit dem Wortlaut "Column 'veranstaltung_id' cannot be null" bekomme. Das ist auch klar wenn das erste "insert into" schon nicht funktioniert.

PHP:
<?php require_once('Connections/seminar.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) 
  {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) 
{
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) 
{
  $insertSQL = sprintf("INSERT INTO veranstaltung (id, veranstaltungstext, beschreibung) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['id'], "int"),
                       GetSQLValueString($_POST['veranstaltungstext'], "text"),
                       GetSQLValueString($_POST['beschreibung'], "text"));

  echo $insertSQL;

  //mysql_select_db($database_seminar, $seminar);
  //mysql_query($insertSQL, $seminar) or die(mysql_error());
  
  $insertGoTo = "ort.php?id=" . mysql_insert_id ( $seminar );
  echo $insertGoTo;
	
  if (isset($_SERVER['QUERY_STRING']))
  	{ 
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
	}

  header(sprintf("Location: %s", $insertGoTo));
}
?>

Es scheint also so zu sein als wenn das Script schlicht und einfach das "if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) " ignoriert.
Jedenfalls wird das "echo $insertSQL;" erst garnicht ausgegeben.

Seltsame Sache das?
 
Lass dir doch $_POST["MM_insert"] vor dem If-Block mal ausgeben, ob und was da drin steht.

PHP:
echo $_POST["MM_insert"];
if( isset( $_POST["MM_insert"] ) && $_POST["MM_insert"] == "form1" )
 
Danke für den Tip. Hab den Fehler gefunden.
Das ist echt peinlich.

Habe "<form method="post" name="seminarort" action="ort.php"> geschrieben
statt
"<form method="post" name="seminarort" action="<?php echo $editFormAction; ?>">"

Die ganze Seite konnte so garnicht funktionieren.

Danke nochmal!
 
Zurück