1Danke
ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
230
230
EMPFEHLEN
-
Mein Problem: Ich fülle eine Usertabelle aus einem Formular, bediene mich der vergebenen user_id und schreibe einen Teil der Daten in eine Extra Tabelle. Nun möchte ich aber nicht jedes Mal einen Datensatz (in meinem Fall 8) eingetragen bekommen, sondern nur, wenn der User tatsächlich Angaben im Formular gemacht hat. Zur Zeit werden leere Datensätze auch angelegt, weil ja immer die Variable user_id übergeben wird.
Bitte einfach erklären, bin Newcomer. DankePHP-Code:$ref_sql = "INSERT INTO `tblReferenzen` (`user_id`
, `RefJahr`
, `RefVeranstaltung`
, `RefTaetigkeit`
, `RefKunde`)
VALUES
('" . $user_id ."', '" . $ref1[0] . "', '" . $ref2[0] . "', '" . $ref3[0] . "', '" . $ref4[0] . "'),
('" . $user_id ."', '" . $ref1[1] . "', '" . $ref2[1] . "', '" . $ref3[1] . "', '" . $ref4[1] . "'),
('" . $user_id ."', '" . $ref1[2] . "', '" . $ref2[2] . "', '" . $ref3[2] . "', '" . $ref4[2] . "'),
('" . $user_id ."', '" . $ref1[3] . "', '" . $ref2[3] . "', '" . $ref3[3] . "', '" . $ref4[3] . "'),
('" . $user_id ."', '" . $ref1[4] . "', '" . $ref2[4] . "', '" . $ref3[4] . "', '" . $ref4[4] . "'),
('" . $user_id ."', '" . $ref1[5] . "', '" . $ref2[5] . "', '" . $ref3[5] . "', '" . $ref4[5] . "'),
('" . $user_id ."', '" . $ref1[6] . "', '" . $ref2[6] . "', '" . $ref3[6] . "', '" . $ref4[6] . "'),
('" . $user_id ."', '" . $ref1[7] . "', '" . $ref2[7] . "', '" . $ref3[7] . "', '" . $ref4[7] . "')";
mysql_query($ref_sql,$link) or die("Dateneinspielung der Referenzen fehlgeschlagen:" . mysql_error());
-
Ich versuche mal mein Problem besser zu beschreiben. Es gibt ein Eingabeformular u.a. mit den Feldern RefJahr1, RefVeranstaltung1, RefKunde1, RefJahr2, RefVeranstaltung2, RefKunde2; RefJahr3, RefVeranstaltung3, RefKunde3. Alle diese Felder sind keine Pflichtfelder. Die meisten Felder bzw daten des Formulars werden in eine Tabelle1 geschrieben. Die oben genannten Felder sollen aber erst sortiert und dann in eine Tabelle2 geschrieben werden. Bisher ist das ganze so angelegt:
dann die Sortierung:PHP-Code:$user_sql = "INSERT INTO `Tabelle1` (`date`, `Vorname`, `Nachname`) VALUES ('" . $_SESSION['date'] . "', '" . $_SESSION['Vorname'] . "', '" . $_SESSION['Nachname'] . "')";
mysql_query($user_sql,$link) or die("Dateneinspielung fehlgeschlagen:" . mysql_error());
$user_id = mysql_insert_id($link);
und dann das senden an Tabelle2:PHP-Code:$ref1 = array($_SESSION['RefJahr1'], $_SESSION['RefJahr2'], $_SESSION['RefJahr3']);
$ref2 = array($_SESSION['RefVeranstaltung1'], $_SESSION['RefVeranstaltung2'], $_SESSION['RefVeranstaltung3']);
$ref3 = array($_SESSION['RefKunde1'], $_SESSION['RefKunde2'], $_SESSION['RefKunde3']);
array_multisort($ref1, SORT_DESC, $ref2, $ref3);
Das Problem: Ich möchte dass nur Datensätze in die Tabelle2 geschrieben werden, wenn wirklich Datensätze vorhanden sind. Wenn der Nutzer also nur Daten in "RefJahr1, RefVeranstaltung1, RefKunde1" einträgt, soll auch nur ein Datensatz in Tabelle2 erscheinen. Ich hab das ganze bestimmt völlig falsch angelegt?PHP-Code:$ref_sql = "INSERT INTO `Tabelle2` (`user_id`, `RefJahr`, `RefVeranstaltung`, `RefKunde`) VALUES
('" . $user_id ."', '" . $ref1[0] . "', '" . $ref2[0] . "', '" . $ref3[0] . "'),
('" . $user_id ."', '" . $ref1[1] . "', '" . $ref2[1] . "', '" . $ref3[1] . "'),
('" . $user_id ."', '" . $ref1[2] . "', '" . $ref2[2] . "', '" . $ref3[2] . "'),
('" . $user_id ."', '" . $ref1[3] . "', '" . $ref2[3] . "', '" . $ref3[3] . "')";
mysql_query($ref_sql,$link) or die("Dateneinspielung der Referenzen fehlgeschlagen:" . mysql_error());
?>
-
Ich versteh dein Problem nicht, was ist so schwer daran die Variablen zu überprüfen bevor du sie speicherst?
ZB: (grob formuliert)
PHP-Code:$values=array();
foreach($refs as $ref) {
if (!empty($ref[0]) || !empty($ref[1]) || !empty($ref[2])) {
$values[]='('.$user_id.',"'.$ref[0].'","'.$ref[1] .'","'.$ref[2].'")';
}
}
if (count($values)) {
$ref_sql = 'INSERT INTO `Tabelle2`
(`user_id`, `RefJahr`, `RefVeranstaltung`, `RefKunde`)
VALUES
'.implode($values, ',').';';
}
Geändert von Napofis (25.08.11 um 00:02 Uhr) Grund: $ vergessen
-
Ich hab mal die kleinen Fehler rausgenommen.
Aber eine Stelle versteh ich nicht, die auch zum Fehler führt.PHP-Code:foreach($refs as ref) ---> foreach($refs as $ref)
// und
$values[]='('.$user_id.',"'.$ref[0].'","'.$ref[1] .'","'.$ref[2].'")'; ---> $values[]="('".$user_id."','".$ref[0]."','".$ref[1] ."','".$ref[2]."')"
Was ist $refs? Muss ich meine ref1 ref2 ref3 ref4 irgendwie zusammenfassen?PHP-Code:$values=array();
foreach($refs as $ref)
-
Habe folgendes probiert, ist das richtig?
Aber ich habe alles einmal getestet und bekomme folgenden Fehler: Dateneinspielung der "Referenzen fehlgeschlagen:Column count doesn't match value count at row 1"PHP-Code:$refs = array_merge($ref1, $ref2, $ref3, $ref4);
-
Ja hab das $ vergessen, bei $user_id bin ich davon aus gegangen das es ein Interger ist. Die Quotes waren schon richtig aber egal.
Das $refs habe ich als Zweidimensionales Array behandelt.
Statt $ref1[0], $ref2[0], ... hab ich $ref[0][0], $ref[0][1], usw.
-
Das Prinzip von zweidimensionalen arrays ist mir eigentlich klar. Kann ich denn meine Daten so in $refs packen?
Meine Fehlermeldung lautet:PHP-Code:$refs = array(array($ref1),
array($ref2),
array($ref3),
array($ref4));
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 ''.implode(Array, ',').'' at line 2
-
Ich habs jetzt:
Ich habe nochmal meine Arrays umgestellt und pro Array einen "Datensatz" zusammengestellt und nicht wie vorher alle "Jahre", alle "Veranstaltungen" und alle "Kunden" in jeweils einem Array. Besten Dank für die super Hilfe. Jetzt muss ich nur noch das sortieren ändern. Ich wollte ja die Datensätze nach "RefJahr" sortieren. Das ging bei mir so:PHP-Code:$refs = array(array($_SESSION['RefJahr1'], $_SESSION['RefVeranstaltung1'], $_SESSION['RefKunde1']),
array($_SESSION['RefJahr2'], $_SESSION['RefVeranstaltung2'], $_SESSION['RefKunde2']),
array($_SESSION['RefJahr3'], $_SESSION['RefVeranstaltung3'], $_SESSION['RefKunde3']));
$values=array();
foreach($refs as $ref) {
if (!empty($ref[0]) || !empty($ref[1]) || !empty($ref[2])) {
$values[]='('.$user_id.', "'.$ref[0].'", "'.$ref[1].'", "'.$ref[2].'")';
}
}
if (count($values)) {
//neuer Code ende
$ref_sql = 'INSERT INTO `tblReferenzen`
(`user_id`, `RefJahr`, `RefVeranstaltung`, `RefKunde`) VALUES '.implode($values, ',').';';
mysql_query($ref_sql,$link) or die("Dateneinspielung der Referenzen fehlgeschlagen:" . mysql_error());
}
Da ich aber jetzt die Arrays anders zusammenstelle, muss es jetzt wohl anders gemacht werden. Hat jemand einen Hinweis oder einen Link? DankePHP-Code:array_multisort($ref1, SORT_DESC, $ref2, $ref3, $ref4);
-
Wäre das der richtige Ansatz um die Datensätze bei mir nach "RefJahr" zu sortieren?
Wenn ja, wie dann weiter?PHP-Code:$sortArray = array();
foreach($data as $key => $array) {
$sortArray[$key] = $array[0];
}
-
Ich finde viele Beispiele zum ordnen von Mehrdimensionalen Arrays, aber immer handelt es sich um Assoziative Arrays. Mein Array ist doch aber:
Habe es mal diesen Code unter das Array geschrieben, aber Sortierung geht nicht.PHP-Code:$refs = array(array($_SESSION['RefJahr1'], $_SESSION['RefVeranstaltung1'], $_SESSION['RefKunde1']),
array($_SESSION['RefJahr2'], $_SESSION['RefVeranstaltung2'], $_SESSION['RefKunde2']),
array($_SESSION['RefJahr3'], $_SESSION['RefVeranstaltung3'], $_SESSION['RefKunde3']));
Ich weiß nicht, wie man die Spalte RefJahre, nach der sortiert werden soll richtig anspricht.PHP-Code:function _compare($a, $b) {
// $a und $b werden mit strcmp vergleicht. falls die werte gleich sind, wird nach typ sortiert.
// es wird entweder 1
return ($a == $b ? strcmp($a['$refs[][1]'], $b['$refs[][1]']) : strcmp($a['$refs[][0]'], $b['$refs[][0]']));
}
usort($refs, "_compare");
so jedenfalls nichtPHP-Code:'$refs[][1]'
-
Eigentlich Quatsch. In der tabelle2 kann ja alles unsortiert landen. Es wird erst beim einlesen von der Tabelle bzw. der Darstellung interessant. Danke an alle.
Ähnliche Themen
-
Datensatz löschen, wenn in einer anderen Tabelle nicht vorhanden
Von port29 im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 15.08.10, 03:16 -
INSERT aber nur wenn Datensatz noch nicht vorhanden ist.
Von mafin im Forum Relationale DatenbanksystemeAntworten: 6Letzter Beitrag: 17.12.08, 10:41 -
Daten abfragen und wenn vorhanden Dateinamen ändern.
Von Ikkunaprincessa im Forum PHPAntworten: 3Letzter Beitrag: 10.12.08, 11:54 -
MSSQL: update - und wenn nicht vorhanden, dann insert
Von JavaUncle im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 19.01.08, 12:27 -
abbrechen wenn keine Daten vorhanden
Von Sintec im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 03.05.07, 12:07





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren