MySQL-Daten einfügen klappt nicht!

dr-stein

Mitglied
Hallo Leute,

ich möchte gerne auf meiner Homepage einen Datensatz einfügen, und benutze folgenden Code:

PHP:
<?php 
session_start(); // Session starten 

include("../mysql_connect.php"); //MySQL-Verbindung einbinden 

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

$sql = 'INSERT INTO `usr_web378_2`.`ok_page` (`ID`, `Text`) VALUES (\''.$_POST['id'];.'\', \''.$_POST['text'];.'\');';  
$update = mysql_query($sql); 



if($sql == true) 
   { 
   echo "Seite erfolgreich ge&auml;ndert!<br><a href=\"render.php?set=".$_POST['id']."\">Zur&uuml;ck</a>"; 
   } 
else 
   { 
   echo "Fehler! Bitte Administrator informieren!"; 
   } 
?>
Die Seite die das ganze Auswertet und nun das Formular:

PHP:
echo "<div id=\"homepage\">"; // Start Textbereich 
          echo "<h1>Administration</h1>"; 
          echo "<form action=\"admin.add-content.home992563737738795.php\" method=\"post\">"; 
          echo "<textarea class=\"ckeditor\" cols=\"80\" name=\"text\" rows=\"10\">"; 
          echo "Bitte geben Sie hier den Text ein und in das Feld unten die gew&uuml;nschte ID! Bitte beachten Sie, dass es keine &uuml;berschneidungen der ID´s geben sollte. Die ID´s sind immer in der Navigation im Menupunkt 'Seite &auml;ndern' an der Anzahl an Seiten festzustellen. Bitte f&uuml;hren Sie diese Reihenfolge immer so weiter!"; 
          echo "</textarea>"; 
          ?><input type="text" name="id"><?php 
          } 
echo "</div>"; // Ende Homepage
Nun sind meine Fragen, erstens funktioniert das nicht, und zweitens möchte ich gerne, dass er automatisch die höchste ID eingibt. Wie mache ich dass und wiso funktioniert das nicht

Lieben Gruß
_____________
 
Zu der Frage, wie du automatisch die höchste ID bekommst: du musst in deiner Tabellendefinition für diese Spalte auto_increment einstellen, dann geht das. Und dann brauchst du auch kein INPUT-Feld mehr für die ID.
 
Warum es nicht funktioniert, kann ich dir noch nicht sagen. Am besten, du baust hinter den mysql_query-Befehl eine Fehlerbehandlung nach dieser Art:

PHP:
$update = mysql_query($sql) or die("mysql_query() fehlgeschlagen: " . mysql_error());

und zweitens möchte ich gerne, dass er automatisch die höchste ID eingibt.

Dann solltest du mal schauen, ob die Spalte "ID" in der Tabelle "ok_page" in der Datenbank "usr_web378_2" nicht eventuell schon ein Primärschlüssel ist und als Spalten-Option "Auto-increment" eingeschaltet ist. Das kannst du mit phpMyAdmin nachschauen.

Wenn dem so ist, brauchst du keine Angaben zur ID in deinem Query machen, der MySQL-Server weiß dann automatisch, das er eine neue (die höchste) ID vergeben muss.

Wenn dem nicht so ist, können wir uns immer noch was anderes überlegen. Aber bring erst mal diese Informationen in Erfahrung.
 
Hi, da bekomme ich immernoch den Text wie er ja im Code steht, "Fehler, bitte Admin informieren" oder so... Aber er fügt jetzt Daten ein, nimmt nun auch eine eigene ID(Aber nicht die darauffolgende sondern irgendeine)... und nimmt aber nicht den eingegebenen Text!
 
Hi,

hier also mein neuer code:

PHP:
<?php
session_start(); // Session starten

include("../mysql_connect.php"); //MySQL-Verbindung einbinden

$id=mysql_real_escape_string($_POST['id']);
$text=mysql_real_escape_string($_POST['text']);

$sql = 'INSERT INTO `usr_web378_2`.`ok_page`(`ID`, `Text`) VALUES (\''.$_POST['id'].'\', \''.$_POST['text'].'\');'; 
$update = mysql_query($sql) or die("mysql_query() fehlgeschlagen: " . mysql_error());



if($sql == true)
   {
   echo "Seite erfolgreich ge&auml;ndert!<br><a href=\"render.php?set=".$_POST['id']."\">Zur&uuml;ck</a>";
   }
else
   {
   echo "Fehler! Bitte Administrator informieren!";
   }
?>

fügt aber weiter keinen Text ein

LG; Eike


##EDIT1##

Ich hornochse,

@saftmeister: Ich kann dir das aber hoffentlich gleich sagen, denn ich habe bemerkt, dass wir die falsche Variable genommen haben...

Melde mich gleich nochmal!

##EDIT2##

Hat doch nicht so funktioniert!

Schuldigung... Keinen Plan mehr!
 
Ok, also langsam, zunächst einmal, schau, wie ich oben schon erwähnt habe, ob ID ein Primary Key und Auto-Increment ist.

Im angehängten Bild wird beispielhaft gezeigt, auf was du Acht geben musst. Ist ID ein Primary Key, so wird der Spaltenname unterstrichen. Wenn auto-increment eingestellt ist, wird das auch angezeigt.

Das findest du, wie schon erwähnt, im phpMyAdmin, in der Struktur-Ansicht für die Tabelle.

Wenn das geklärt ist, gehts weiter.
 

Anhänge

  • auto_increment_primary_key_show.jpg
    auto_increment_primary_key_show.jpg
    21,9 KB · Aufrufe: 13
Gut, dann bauen wir deinen SQL-Query nun um, weil es nicht notwendig ist, eine ID explizit zu vergeben. Wie schon erwähnt, wird der MySQL-Server selbst eine vergeben. Dafür ist das Feature "auto increment" nämlich da. So, nun zum Query:

Du hast korrekterweise den Inhalt der Textarea zunächst einmal mit mysql_real_escape_string() maskiert, so das keine gefährlichen Zeichen darin vorkommen
PHP:
$text=mysql_real_escape_string($_POST['text']);

Allerdings verwendest du im Query selbst dann doch wieder direkt das Element aus $_POST. Das und ein paar andere unschöne Dinge werden wir nun verbessern:
PHP:
$sql = "INSERT INTO `usr_web378_2`.`ok_page` (`Text`) VALUES ('$text')";

Teste dies doch mal, und berichte das Ergebnis. Bei einem Fehler hätte ich auch gern die Ausgabe, die bei "mysql_query() fehlgeschlagen" steht.
 
Gleiches Ergebnis, hier nochmal der Code:

PHP:
<?php
session_start(); // Session starten

include("../mysql_connect.php"); //MySQL-Verbindung einbinden

$id=mysql_real_escape_string($_POST['id']);
$text=mysql_real_escape_string($_POST['text']);

$sql = "INSERT INTO `usr_web378_2`.`ok_page` (`Text`) VALUES ('$text')";  
$sql = mysql_query($sql) or die("mysql_query() fehlgeschlagen: " . mysql_error());



if($sql == true)
   {
   echo "Seite erfolgreich ge&auml;ndert!<br><a href=\"render.php?set=".$_POST['id']."\">Zur&uuml;ck</a>";
   }
else
   {
   echo "Fehler! Bitte Administrator informieren!";
   }
?>

Es wird weiterhin "Fehler! Bitte Administrator informieren!" angezeigt und es wird die Id (eben war es 13) in die Tabelle eingefügt, aber kein Text!
 
Zurück