epole73
Goto Top

PHP, MySQL und Datenhandling Probleme

hallo, ich bin im php und mysql bereich absoluter anfänger und habe die aufgabe eine faq datenbank aufzubauen (kein fertigscript) und komme nicht weiter. die funktionen sind denkbar einfach. aber ich habe erst den ersten teil begonnen.

- daten (frage, antwort usw.) per form und php an mysql db übergeben
- daten aus db auslesen und anzeigen
- daten verändern können

die mysql db ist eingerichtet und die zugangsdaten stimmen auch. nun habe ich mich im netz ein wenig umgeschaut und ein script geschrieben. die connection zur db funktioniert, das script scheinbar auch, doch es werden keine daten in der db sichtbar. kann mir jemand helfen? hier der code. vieleicht sieht ja jemand meinen fehler?!

ach ja...ich bekomme beim absenden folgende fehlermeldung:
Notice: Undefined index: Frage in C:\xxx\xxx\xxx\eintrag.php on line 14
Notice: Undefined index: Antwort in C:\xxx\xxx\xxx\eintrag.php on line 15
Notice: Undefined index: Keywords in C:\xxx\xxx\xxx\eintrag.php on line 16
Notice: Undefined index: Bilder in C:\xxx\xxx\xxx\eintrag.php on line 17

index.php
<form action="eintrag.php" method=post>
Frage <br>
<textarea id="Frage" rows=7 cols=50></textarea>
<br>
<br>
Antwort<br>
<textarea id="Antwort" rows=7 cols=50></textarea>
<br>
<br>
Keywords<br>
<input type="Text" size="65" id="Keywords">
<br>
<br>
Bilder<br>
<input type="Text" size="65" id="Bilder">

<input type="submit" value="Send"> <input type="reset" value="Reset">
</form>

eintrag.php
<?php
include 'inc/config.php';
error_reporting(E_ALL);

mysql_connect("$host","$user","$password") or die ("Keine Verbindung");
mysql_select_db("$dbname") or die ("Die Datenbank ist nicht da");

$Frage = $_POST["Frage"];
$Antwort = $_POST["Antwort"];
$Keywords = $_POST["Keywords"];
$Bilder = $_POST["Bilder"];

$eintragen = "INSERT INTO $dbtable VALUES ('$Frage', '$Antwort', '$Keywords', '$Bilder')";

$eintragen = mysql_query($eintragen);
?>

config.php
<?php
$host = "localhost";
$user = "xxx";
$password = "xxx";
$dbname = "xxx";
$dbtable = "faq";
?>

Content-Key: 95967

Url: https://administrator.de/contentid/95967

Printed on: May 10, 2024 at 05:05 o'clock

Member: bytecounter
bytecounter Sep 03, 2008 at 09:02:20 (UTC)
Goto Top
Hallo,

was steht denn in den Zeilen 14-17 von Eintrag.php. Wenn ich mir den Code hier anschaue, existieren diese Zeilen nur zum Teil.

Aber ich vermute den Fehler in HTML: Das Array $_POST dürfte leer sein, da Deine Formularfelder keine Bezeichnungen haben.

vg
Bytecounter
Member: epole73
epole73 Sep 03, 2008 at 10:09:51 (UTC)
Goto Top
dem ist leider nicht so, alles schön benannt.

<form action="eintrag.php" method=post>
Frage <br>
<textarea name="Frage" rows=7 cols=50 title="Frage"></textarea>
<br>
<br>
Antwort<br>
<textarea name="Antwort" rows=7 cols=50 title="Antwort"></textarea>
<br>
<br>
Keywords<br>
<input type="Text" size="65" name="Keywords" title="Keywords">
<br>
<br>
Bilder<br>
<input type="Text" size="65" name="Bilder" title="Bilder">

<input type="submit" value="Send"> <input type="reset" value="Reset">
</form>
Member: epole73
epole73 Sep 03, 2008 at 10:11:36 (UTC)
Goto Top
den fehler konnte ich beheben, nun werden die daten auch scheinbar übergeben, allerdings bleibt die datenbank immernoch leer.
Member: bytecounter
bytecounter Sep 03, 2008 at 10:37:41 (UTC)
Goto Top
In Deinem ersten Posting hatten die Formularfelder nur eine ID, keinen Namen.

Erhälst Du eine Fehlermeldung?

Was gibt denn folgender Code aus:
<?php
include 'inc/config.php';  
error_reporting(E_ALL);

mysql_connect("$host","$user","$password") or die ("Keine Verbindung");  
mysql_select_db("$dbname") or die ("Die Datenbank ist nicht da");  

$Frage = $_POST["Frage"];  
$Antwort = $_POST["Antwort"];  
$Keywords = $_POST["Keywords"];  
$Bilder = $_POST["Bilder"];  

$eintragen = "INSERT INTO $dbtable VALUES ('$Frage', '$Antwort', '$Keywords', '$Bilder')";  

// SQL Query nur anzeigen
echo $eintragen;
//$eintragen = mysql_query($eintragen);
?> 

Er zeigt Dir die Query, die an die DB geschickt werden soll an, gibt sie aber nicht an die DB weiter.
Member: Arano
Arano Sep 03, 2008 at 10:39:20 (UTC)
Goto Top
Moin,

wie ist denn deine Datenbanktabelle strukturiert ?
Sind: "Frage", "Antwort", "Keywords", "Bilder" alle deine Spalten ?

Ich habe mir mal erlaubt deinen Quelltext etwas zu erweitern:
<?php
include 'inc/config.php';  
error_reporting(E_ALL);

mysql_connect($host,$user,$password) or die ('Keine Verbindung');  
mysql_select_db($dbname) or die ('Die Datenbank ist nicht da');  

// Array zum Speichern der Felder die nicht korrekt ausgefuellt wurden.
$errorFields = array();

// Eingaben vor ueberpruefung, wurden die Felder ausgefuellt und bestehen sie nicht aus leerzeichen
// isset() = wurde das Feld uebertragen (ausgefuellt)
// trim() entfernt alle leerzeichen am Anfang und Ende der Zeichenkette
// bedingung ? wahr : falsch     <- eine kurzform von if(){}else{}
$Frage    = isset($_POST['Frage'])    && trim($_POST['Frage'])!=""    ? $_POST['Frage']    : NULL;  
$Antwort  = isset($_POST['Antwort'])  && trim($_POST['Antwort'])!=""  ? $_POST['Antwort']  : NULL;  
$Keywords = isset($_POST['Keywords']) && trim($_POST['Keywords'])!="" ? $_POST['Keywords'] : NULL;  
$Bilder   = isset($_POST['Bilder'])   && trim($_POST['Bilder'])!=""   ? $_POST['Bilder']   : NULL;  

// Detailiertere pruefung der Eingaben
// Wenn unzureichend wird der Name (o.Titel) des Feldes in das Array $errorFields gespeichert
if(is_null($Frage)    || strlen($Frage)<3    || strlen($Frage)>100)    $errorFields = 'Frage';  
if(is_null($Antwort)  || strlen($Antwort)<3  || strlen($Antwort)>100)  $errorFields = 'Antwort';  
if(is_null($Keywords) || strlen($Keywords)<3 || strlen($Keywords)>100) $errorFields = 'Keywords';  
if(is_null($Bilder)   || strlen($Bilder)<3   || strlen($Bilder)>100)   $errorFields = 'Bilder';  

// Gab es einen Fehler bei den Eingaben ?
if(empty($errorFields)){
      // Es gabe keine Fehler bei den Eingabedaten - Mach weiter...
      // Queery zusammensetzen
      $query  = "INSERT INTO `$dbtable`  
                             (`Frage`,`Antwort`,`Keys`,`Bilder`)
                      VALUES ('$Frage', '$Antwort', '$Keywords', '$Bilder')";  
      // Query an Datenbank schicken. Das @ unterdruekt die Fehlermeldungen die wir ja eine Zeile spaeter selber pruefen.
      $result = @mysql_query($query);
      // Antwort ueberpruefen
      if($result===TRUE){
            echo 'Alles erfolgreich eingetragen !<br>';  
      } else {
            echo 'Es gab einen Fehler beim eintragen in die Datenbank: #'.mysql_errno().'<br>'.mysql_error().'<br>';  
      }
} else{
      // Fehler bei den Eingabedaten - Stoppe !
      echo 'Die Felder "'.implode('", "',$errorFields).'" wurden nicht korrekt ausgef&uuml;llt !<br>  
            <a href="./index.php" title="zum Eingabeformular">zur&uuml;ck zum Eingabeformular</a><br>';  
}
?>
Gruß Arano
Member: epole73
epole73 Sep 03, 2008 at 11:29:29 (UTC)
Goto Top
folgendes gibt er nun aus, trägt aber nix in die db ein:

INSERT INTO faq VALUES ('test', 'test', 'test', 'test')
Member: epole73
epole73 Sep 03, 2008 at 11:41:38 (UTC)
Goto Top
hier meine db:

CREATE TABLE `faq` (
`ID` int(11) NOT NULL,
`Frage` text collate latin1_general_ci NOT NULL,
`Antwort` text collate latin1_general_ci NOT NULL,
`Keywords` varchar(100) collate latin1_general_ci NOT NULL,
`Bilder` varchar(100) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

werde mich jetzt mal durch deinen netten eintrag arbeiten ;)
Member: bytecounter
bytecounter Sep 03, 2008 at 12:05:08 (UTC)
Goto Top
Also was mir so auffällt:
ID sollte autoincrement sein.

Ich halte es auch für besser, immer die Feldnamen mit zu übergeben, wie es in den Beispiel von Arano ist.
Member: epole73
epole73 Sep 03, 2008 at 12:06:37 (UTC)
Goto Top
nach eingabe des scriptes bekomme ich nun folgenden fehler:

Es gab einen Fehler beim eintragen in die Datenbank: #1054
Unknown column 'Keys' in 'field list'
Member: epole73
epole73 Sep 03, 2008 at 12:22:39 (UTC)
Goto Top
HEJ...auf einmal läuft es...na dann muss ich jetzt mal nachvollziehen was Arano da gebaut hat...und dann werde ich mich bestimmt wieder melden wenn es darum geht die daten aus der db auszugeben und verändern zu können. aber vieleicht schaffe ich es ja auch mal selbst. ganz lieben dank!
Member: epole73
epole73 Sep 03, 2008 at 12:39:50 (UTC)
Goto Top
ok, es funktioniert! top klasse und danke für die tipps.