tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Napofis
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
230
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    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.
    PHP-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()); 
    Bitte einfach erklären, bin Newcomer. Danke
     

  2. #2
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    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:
    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); 
    dann die Sortierung:
    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($ref1SORT_DESC$ref2$ref3); 
    und dann das senden an Tabelle2:
    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());       
    ?> 
    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?
     

  3. #3
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    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
     

  4. #4
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Ich hab mal die kleinen Fehler rausgenommen.
    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]."')" 
    Aber eine Stelle versteh ich nicht, die auch zum Fehler führt.

    PHP-Code:
    $values=array();
    foreach(
    $refs as $ref
    Was ist $refs? Muss ich meine ref1 ref2 ref3 ref4 irgendwie zusammenfassen?
     

  5. #5
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Habe folgendes probiert, ist das richtig?
    PHP-Code:
    $refs array_merge($ref1$ref2$ref3$ref4); 
    Aber ich habe alles einmal getestet und bekomme folgenden Fehler: Dateneinspielung der "Referenzen fehlgeschlagen:Column count doesn't match value count at row 1"
     

  6. #6
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    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.
    phpameise bedankt sich. 

  7. #7
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Das Prinzip von zweidimensionalen arrays ist mir eigentlich klar. Kann ich denn meine Daten so in $refs packen?
    PHP-Code:
    $refs = array(array($ref1),
                    array(
    $ref2), 
                    array(
    $ref3), 
                    array(
    $ref4)); 
    Meine Fehlermeldung lautet:
    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
     

  8. #8
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Ich habs jetzt:
    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());       

    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:
    array_multisort($ref1SORT_DESC$ref2$ref3$ref4); 
    Da ich aber jetzt die Arrays anders zusammenstelle, muss es jetzt wohl anders gemacht werden. Hat jemand einen Hinweis oder einen Link? Danke
     

  9. #9
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Wäre das der richtige Ansatz um die Datensätze bei mir nach "RefJahr" zu sortieren?
    PHP-Code:
    $sortArray = array();
        foreach(
    $data as $key => $array) {
            
    $sortArray[$key] = $array[0];
        } 
    Wenn ja, wie dann weiter?
     

  10. #10
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    Ich finde viele Beispiele zum ordnen von Mehrdimensionalen Arrays, aber immer handelt es sich um Assoziative Arrays. Mein Array ist doch aber:
    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'])); 
    Habe es mal diesen Code unter das Array geschrieben, aber Sortierung geht nicht.
    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"); 
    Ich weiß nicht, wie man die Spalte RefJahre, nach der sortiert werden soll richtig anspricht.
    PHP-Code:
     '$refs[][1]' 
    so jedenfalls nicht
     

  11. #11
    phpameise phpameise ist offline Mitglied Silber
    Registriert seit
    Aug 2011
    Beiträge
    65
    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

  1. Datensatz löschen, wenn in einer anderen Tabelle nicht vorhanden
    Von port29 im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 15.08.10, 03:16
  2. INSERT aber nur wenn Datensatz noch nicht vorhanden ist.
    Von mafin im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 17.12.08, 10:41
  3. Antworten: 3
    Letzter Beitrag: 10.12.08, 11:54
  4. MSSQL: update - und wenn nicht vorhanden, dann insert
    Von JavaUncle im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 19.01.08, 12:27
  5. abbrechen wenn keine Daten vorhanden
    Von Sintec im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 03.05.07, 12:07

Stichworte