PHP und MySQL Probleme - brauche einen kleinen Denkanstoß

So mal in den Raum geworfen, nachdem ich den Thread überflogen habe:

Das Problem mit der Datenbank und "Wie speicher ich was ab, und in welche Tabellen", den Vorgang, wie man das rausbekommt, der heißt 'Normalisierung'.
Das, was gesucht ist (im Normalfall), ist die 'Dritte Normalform'.

Ich denke, Wikipedia weiß da einiges zu, und bei dem Tutorial von reeg gibts auch ein Kapitel dazu :)

HttpRequests für die 'nicht neuladen-Geschichte wurden ja schon genannt :)


Neue HTML-Elemente hinzufügen macht man am besten mit JavaScript über das DOM, bzw. das node-Objekt:
http://de.selfhtml.org/javascript/objekte/node.htm

:)

(@dms: Ich hab auch mit nem Schachspiel angefangen, und hatte auch die 32 felder in der Datenbank :hehehe: )
 
Das Problem mit der Datenbank und "Wie speicher ich was ab, und in welche Tabellen", den Vorgang, wie man das rausbekommt, der heißt 'Normalisierung'.
Das, was gesucht ist (im Normalfall), ist die 'Dritte Normalform'.

Gute Idee. Sicher nicht verkehrt, das mal in den Raum zu werfen.
 
ey scheiße, ich glaub ich bin zu blöd für den ganzen kram :(
ich hab's jetzt erstmal so gelassen, dass man die anzahl der felder am anfang eingeben muss, weil ich es anders nciht hinbekommen habe und die felder sind dann mit id="option1", id="option2" usw benannt. jetzt steh ich vor dem problem, dass ich nciht weiß, wie ich diese einzelnen felder anspreche und für jedes einen eintrag in der datenbank mache.

$sql = "INSERT INTO plus1_optionen (id, option) VALUES ('', '$_POST[option]')";

bringt ja nicht viel, weil ja dann die zahl dahinter fehlt... :kopfkratz:
 
Erstmal solltest du die Optionen geschickterweise in HTML mit name="option[x]" benennen. Dann hast du sie später in HTML als Array.

Dann schreibt man nie Daten aus dem POST-Array direkt in einen Datenbankquery. Stichwort SQL Injection.

Und was ist jetzt die Tabelle plus1_optionen?
 
Das soll Tabelle 2 sein...
Ja, die sind ja alle mit name="option[xyz]" benannt. Aber dann weiß ich eben nciht, wie ich sie in die Datenbank packe...
 
Was klappt denn an

Code:
$sql = "INSERT INTO plus1_optionen (option) VALUES ( '" . mysql_escape_string( $_POST[option] ) . "')";

nicht?
 
So hätte man nur ein Array mit einem einzigen Element "x". Ohne das x werden alle Elemente in ein Array gepackt.

name="option[]"

Einfach mal ausprobieren und dann ein print_r($_POST['option']) machen. Dann siehst Du wie die Daten angekommen sind.

Oh, genau das meinte ich eigentlich auch.

Ich hatte das x stellvertretend für eine fortlaufende Variable gesetzt. Die ist aber gar nicht nötig und "[]" reicht in der Tat aus.
 
hmm, also ich habe jetzt folgendes:
1. die schleife, die mir die textfelder ausgibt:

PHP:
<?php
$anzahl = $_POST["anzahl"];
for ($i=1;$i-1<$anzahl;$i++) {
				echo $i ?>: <input type="text" id="option" name="option"> <br /> <?php
			} ?>

und 2. im nächsten schritt das hier:
PHP:
<?php if ($_GET[step] == 3) {
		@mysql_connect("bla", "bla", "bla") or die ("Verbindung zu MySQL gescheitert!");
		@mysql_select_db("bla") or die ("Datenbankzugriff gescheitert!");
		$sql = "INSERT INTO plus1_optionen (option) VALUES ('$_POST[option]')";
  		if (mysql_query($sql)) { ?>
			<h2>Fertig</h2>
  			<?php
		} else {
  			echo "Fehlgeschlagen!";
  		}
  		mysql_close();
	
} ?>

ich bekomm immer nur "Fehlgeschlagen!"...

PHP:
print_r($_POST['option']);
gibt mir nur den letzten wert aus. wenn ich 1, 2 und 3 eintippe, wird 3 ausgegeben
edit: quatsch. ich bekomme "Array ( [0] => 1a [1] => 1b )"
 
Dann ist doch alles gut… oder wolltest du das auch sagen?

Oder habe ich dein Problem übersehen?
 
mein problem ist, dass ich den inhalt des arrays nicht in die datenbank bekomme
 
Dann mach doch mal folgendes

PHP:
<?php if ($_GET[step] == 3) {
        @mysql_connect("bla", "bla", "bla") or die ("Verbindung zu MySQL gescheitert!");
        @mysql_select_db("bla") or die ("Datenbankzugriff gescheitert!");
        $sql = "INSERT INTO plus1_optionen (option) VALUES ('$_POST[option]')";
          if (mysql_query($sql)) { ?>
            <h2>Fertig</h2>
              <?php
        } else {
              echo "Fehlgeschlagen! (" . mysql_error() . ")";
          }
          mysql_close();
    
} ?>

und sag, was ausgegeben wurde.

Abgesehen davon, dass immer noch die POST-Daten direkt in die Datenbank eingefügt werden. (SQL Injection, mysql_escape_string)
 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'option) VALUES ('Array')' at line 1
 
Ich erkenne gerade, ehrlich gesagt, nicht, wo der Fehler genau liegt. Vielleicht stört ihn das Wort "option".

Aber daneben fehlen einige andere Sachen.
Du durchläufst nicht jede Zeile.
Und du überprüfst nicht, ob es eventuell schon ein Produkt mit dem gleichen Namen gibt.

Mein Vorschlag:
(Da fehlt natürlich die Datenbankverbindung)

PHP:
<?php

$optionIDs = array();

foreach( $_POST['option'] as $id => $value )
{
	$query = "
	SELECT *
	FROM plus1_optionen
	WHERE option = '" . mysql_escape_string( $value ) . "'
	LIMIT 1";
	
	$handler = mysql_query( $query );
	
	if( $result = mysql_fetch_array( $handler ) )
	{
		$optionIDs[] = $result['id'];
	}
	else
	{
		$query = "
		INSERT INTO plus1_optionen
		SET option = '" . mysql_escape_string( $value ) . "'";
		
		mysql_query( $query );
		
		$optionIDs[] = mysql_insert_id();
	}
	
}


foreach( $optionIDs as $id )
{
	
	?>Ich bin die Zeile für die Option mit der ID <?php echo $id; ?> in der Datenbank<br/><?php
	
}

?>
 
Ich glaub den Code hab ich jetzt verstanden, nur schreibt er mir blöderweise nichts in die Datenbank und gibt in der Schleife immer "...mit der ID 0 in der Datenbank" aus :(
 
PHP:
$query = "
        INSERT INTO plus1_optionen
        SET option = '" . mysql_escape_string( $value ) . "'";
        
        if( false == mysql_query( $query ) ) echo mysql_error();

Fehlersuche ist nicht soo schwer… ;)
 
Zurück
Oben Unten