Notice: Undefined index

Padawan

Erfahrenes Mitglied
Hallo Leute,

hab folgenden Code in JavaScript und PHP geschrieben:

Javascript:
/************************
  * Stellt einen Formular zur verfügung, über die dann Datenbankeinträge erstellt werden können.
  */
  $(document).on("click", "#categories-block .bottom .create-new", function () {
  console.log("Neu Erstellen");
  $.post("./operations/create.php", {
  id: $(this).data("data-id"),
  dataform: $(this).data("data-id"),
  operation: $(this).data("value")
  })
 
  //Setzt das Bearbeitungsfeld mit einem Sezifischen datum
  .done(function (data) {
  $("#edit-area").empty().append(data);
  });
  });
 
  /**********************
  * Serie: Stellt einen Formular zur verfügung, über die dann Datenbankeinträge
  *  erstellt werden können.
  *
  */
  $(document).on("click", "#series-block .bottom .create-new", function () {
 
  $.post("./operations/create.php", {
  dataform: $(this).data("data-id"),
  operation: $(this).data("value"),
  oberdatenform: $("#categories-block .default-button .active").data("data-id")
  })
 
  //Setzt das Bearbeitungsfeld mit einem Sezifischen datum
  .done(function (data) {
  $("#edit-area").empty().append(data);
  });
  });
  /**********************
  * types: Stellt einen Formular zur verfügung, über die dann Datenbankeinträge
  *  erstellt werden können.
  *
  */
  $(document).on("click", "#types-block .bottom .create-new", function () {
 
  $.post("./operations/create.php", {
  dataform: $(this).data("data-id"),
  operation: $(this).data("value"),
  oberdatenform: $("#series-block .default-button").hasClass("active").data("data-id")
  })
 
  //Setzt das Bearbeitungsfeld mit einem Sezifischen datum
  .done(function (data) {
  $("#edit-area").empty().append(data);
  });
  });


PHP:
<?php
/******************************************************************************
* Löscht einen Eintrag aus der Datenbank.
*
* @author: Dogan Alkan
* @version: v1.0
* @since: v1.0
* @date: 06.03.2015
******************************************************************************/

require_once('..\database.php');

global $id;
$id = $_POST['id'];


show_content();

function show_content(){
  global $id;
 
  switch($_POST['dataform']){
  case "0": return executeSQLQuery("categorie", $id); break;
  case "1": return executeSQLQuery("serie", $id); break;
  case "2": return executeSQLQuery("typ", $id); break;
  default: echo "<h1>Invalid: Keine Datenform-tabelle Ausgewält</h1>"; exit();
  }
}
/******************************************************************************
*
******************************************************************************/
function executeSQLQuery($dataTable, $id){
  global $connectionToDB;

  $sqlQuerry = "UPDATE ".$dataTable."
  SET lastname='Doe'
  WHERE id=".$id;

  if ($connectionToDB->query($sqlQuerry) === TRUE) {
  echo "Record updated successfully";
  } else {
  //Wenn nicht gelöscht werden kann, findet eine Fehlerausgabeusgabe statt
  //und das Skript wird beendet.
  echo "Error: updating record: " . $conn->error;
  exit();
  }
//Gibt die ID des Datensatzes zurück, wenn das löschen erfolgreich war
echo<<<EOF
""$id""
EOF
  ;

  $connectionToDB->close();
}

/******************************************************************************
* Löscht einen Datensatz mit der gegebenen id aus der Tabellen categorie und
* davon abhängiger Datensätzen anderer Tabellenen.
*
* @return: Zusammengesetzer String für Datenbankanfrage.
******************************************************************************/
function deleteCategorie($id){
  $querry="";
 
  $querry = "DELETE FROM categorie, serie, typ
  USING categorie
  INNER JOIN serie
  INNER JOIN typ
  WHERE categorie.id = serie.f_id
  AND serie.id = typ.f_id
  AND categorie.id = ".id.";";
  return $querry;
}

/******************************************************************************
* Löscht einen Datensatz mit der gegebenen id aus der Tabellen categorie und
* davon abhängiger Datensätzen anderer Tabellenen.
*
* @return: Zusammengesetzer String für Datenbankanfrage.
******************************************************************************/
function deleteSerie($id){
  $querry="";
 
  $querry = "DELETE FROM serie, typ
  USING serie INNER JOIN typ
  WHERE serie.id = typ.f_id
  AND serie.id = ".id.";";
 
  return $querry;
}

/******************************************************************************
* Löscht einen Datensatz mit der gegebenen id aus der Tabellen categorie und
* davon abhängiger Datensätzen anderer Tabellenen.
*
* @return: Zusammengesetzer String für zu löschender Datensatzes.
******************************************************************************/
function deleteTyp($id){
  $querry="";
 
  $querry = "DELETE
  FROM typ
  WHERE id = '".id."';";
  return $querry;
}
?>

die dazugehörige HTML-Seite sieht folgendermaßen aus:

Code:
<!DOCTYPE html>
<html>
<head>
<?php
  //session_start();
  //if(!isset($_SESSION['userid'])) {
  //  die('Bitte zuerst <a href="login.php">einloggen</a>');
  //}
?>
  <title>Site Content</title>
  <meta charset="UTF-8">
  <meta name="description" content="" />
  <meta name="keywords" content="" />
  <link rel="stylesheet" href="content-style.css">
  <link rel="stylesheet" href="formoid1/formoid-metro-cyan.css" type="text/css" />
  <script src="../js/jquery-2.2.1.min.js"></script>
  <script type="text/javascript" src="formoid1/formoid-metro-cyan.js"></script>
  <script type="text/javascript" src="../js/custom.js"></script>

</head>
<body>
  <div id="content">
  <div id=select-media></div>
  <div id="categories-block">
  <div class="header">categories</div>
  <ul id=list-container>
 
  </ul>
  <div class="bottom">
  <button data-id="0" class="create-new" style="background-color:green;margin-top:20px;" value="-1">Neu Anlegen</button>
  </div>
  </div>
 
  <div id="series-block">
  <div class="header">series</div>
  <ul id=list-container>
  </ul>
  <div class="bottom">
  <button data-id="1" class="create-new" style="background-color:green;margin-top:20px;" value="-1">Neu Anlegen</button>
  </div>
  </div>
 
  <div id="types-block">
  <div class="header">types</div>
  <ul id=list-container>
  </ul>
  <div class="bottom">
  <button data-id="2" class="create-new" style="background-color:green;margin-top:20px;" value="-1">Neu Anlegen</button>
  </div>
  </div>
  <div id="edit-area">
  </div>
 
  <div id="spinner" class="spinner" style="display:none;">
  <img id="img-spinner" src="../images/spinner.gif" height="100px" width="100px" alt="Loading" />
  </div>
  </div>
</body>
</html>

Das Problem ist, dass ich beim drücken der Neu Erstellen Buttons fogende Probleme auf dem browser erscheinen:

Code:
Notice: Undefined index: dataform inD:\xampp\htdocs\cymballand\admin\operations\create.phpon line22

Notice: Undefined index: operation inD:\xampp\htdocs\cymballand\admin\operations\create.phpon line23

Notice: Undefined index: oberdatenform inD:\xampp\htdocs\cymballand\admin\operations\create.phpon line25

ich hoffe Ihr könnt mir weiterhelfen.

Lg Padawan


nachtrag: Bitte entschuldigt mir die Überschrift. Hab versäumt diesen abzuändern.
 
Die Seite ist zwar iemlich Lehrreich, hilft aber bedingt weiter.
Bei wir stehen "nur" die Notizen, obwohl ich eigl. auch Werte mit übergebe.

lg parawan
 
Da du innerhalb der Funktion bist, wie kannst du dort den $_POST auslesen?


Wieso machst du die Funktion nicht wie folgt:

Code:
function show_content($id,$dataform){}
 
Hallo,

den $_POST kann man überall auslesen. Das ist ein sogenanntes Superglobal (http://php.net/manual/de/language.variables.superglobals.php) und damit auch in Funktionen definiert.
Wäre $_POST nicht definiert, hätten wir auch eine andere "Notice"

Trotzdem ist der Ansatz von @xloouch deutlich übersichtlicher und auch sehr zu empfehlen, löst an dieser Stelle aber nicht dein Problem.

Du solltest mal mit einem Dev-Tool im Browser durchschauen, ob wirklich bei allen Anfragen an die create.php ein HTTP Post gemacht wird.

VG
Nino
 
Zurück