serialisiertes Array in Datenbank schreiben

Hi,

ist ja, das ich bei "Benutzer1[]" die Daten nicht mehr einfach mit $_POST auswerten kann

Aber [phpf]foreach[/phpf] kennst Du?

Du willst einen String haben, der so aussieht:
Code:
INSERT INTO tabelle (feldname) VALUES ('sdfsdf'),('werwer'),('jhkjhk')

Dann durchlauf doch einfach das Array und setz das so zusammen.
Mit [phpf]array_map[/phpf] und [phpf]implode[/phpf] geht's noch kürzer.

Du musst mehr lesen und ausprobieren...

LG
 
Dann zeigen wir dir mal was der Herr Lerdorf und Herr Codd sich tolles ausgedacht haben.
Oh, das ein Angebot!
Ich will niemanden zumuten, sich hier hinein zu denken. Ich versuch es mal auf das wesentliche zu reduzieren.

Es handelt sich hier um Termineinträge, die ich jetzt nachträglich mit Benutzerrechten versehen will. Nach dem Schema:
- Benutzer A legt Kategorie 1 an und will sie nur für sich
- Benutzer A legt Kategorie 2 an und macht sie für Benutzer B u. C oder für alle zugänglich usw.

Termine sind aufgegliedert nach Kategorien, diese wiederrum werden dem Ersteller zugeordnet und es sollen die jeweiligen Berechtigungen in der Tabelle seminare_users hinterlegt werden.
Ich weiß, dass das Datenbankmodell und vor allem die Beziehungen hier das A & O sind. Gar nicht so einfach das logisch auf zu bauen. Ich dachte mir alle gleichartigen Daten in jeweils eine Tabelle, also:
Benutzer: users
Rechte: seminare_users
Kategorien: seminare_daten
Termine: seminare_zeiten.

So Chef, das ne Menge Holz! Eigentlich wollte ich das alleine lösen.
Bin aber für Denkanstöße natürlich sehr Dankbar.

Das Formular:
PHP:
echo'
   <form method="post" name"kat_neu" action="">
   <p>Kategoriename: <input type="text" name="titel" value="'.$_POST['titel'].'"'; if(isset($_POST['erstellung']) && ($_POST['titel'] == "")) {echo 'class="errorField"';} echo '></p>
   <p>Untertitel: <input type="text" name="untertitel" value="'.$_POST['untertitel'].'" style="margin-left: 3.3em"></p>
   <p>Emailkontakt: <input type="text" name="mail" value="'.$_POST['mail'].'" style="margin-left: 1.2em"'; if(isset($_POST['erstellung'])) {if (ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$", $_POST[mail])) {} else {echo 'class="errorField"';}} echo'></p>
   <p><input type="submit" name="erstellung" value="Erstellen"> <input type="reset" name="reset" value="Zur&uuml;cksetzen"></p>
   <input type="hidden" name="Benutzer" value="'.$user.'">
   <p>Berechtigung f&uuml;r diese Kategorie:</p>';

    $abfragex="SELECT * FROM users WHERE UserID NOT LIKE $user"; $benutzer = mysql_query($abfragex);
    while($row = mysql_fetch_array($benutzer))
    {
    echo "<input type=\"checkbox\" name=\"Benutzer1[]\" value=\"".$row['UserID']."\"";
        if(! empty($_POST['Benutzer1']) && in_array($row['UserID'], $_POST['Benutzer1'])) {echo ' checked';}
    echo "> ".$row['UserName']."<br>\n";
    }
    echo '</form>';

PHP:
-- Tabellenstruktur für Tabelle `seminare_users`

CREATE TABLE IF NOT EXISTS `seminare_users` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `benutzer` int(3) DEFAULT NULL,
  `daten` int(5) DEFAULT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=62 ;

Benutzerverwaltung habe ich nach Anleitung erstellt und ist hier glaube ich erstmal irrelevant.
PHP:
-- Tabellenstruktur für Tabelle `users`

CREATE TABLE IF NOT EXISTS `users` (
  `UserID` int(11) NOT NULL AUTO_INCREMENT,
  `UserName` varchar(30) NOT NULL DEFAULT '',
  `UserPass` varchar(32) NOT NULL DEFAULT '',
  `UserSession` varchar(32) DEFAULT NULL,
  `UserMail` varchar(150) NOT NULL DEFAULT '',
  `Admin` int(2) NOT NULL,
  PRIMARY KEY (`UserID`),
  UNIQUE KEY `NickName` (`UserName`),
  UNIQUE KEY `UserMail` (`UserMail`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

Kategorietabelle:
PHP:
-- Tabellenstruktur für Tabelle `seminare_daten`

CREATE TABLE IF NOT EXISTS `seminare_daten` (
  `Benutzer_Gruppe` int(3) NOT NULL,
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `kategorie_id` int(5) NOT NULL DEFAULT '0',
  `titel` varchar(127) NOT NULL DEFAULT '',
  `untertitel` varchar(255) NOT NULL DEFAULT '',
  // hab hier unwichtige Felder weggelassen
  PRIMARY KEY (`id`),
  KEY `kategorie_id` (`kategorie_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=39 ;
 
Zuletzt bearbeitet:
Hi,

Eigentlich wollte ich das alleine lösen.

das kannst Du auch immer noch. ;)

Dann durchlauf doch einfach das Array und setz das so zusammen.
Mit [phpf]array_map[/phpf] und [phpf]implode[/phpf] geht's noch kürzer.

Durchlaufe das Array mit foreach und setze die Abfrage entsprechend zusammen. Wie Du Strings verknüpfst, weißt Du?

BTW, ich hoffe ja mal, dass das ein privates Lern- und kein Kundenprojekt ist. Du solltest Dich nämlich mal etwas mit Sicherheit beschäftigen.

LG
 
das kannst Du auch immer noch. ;)
Ich bitte darum :)

Durchlaufe das Array mit foreach und setze die Abfrage entsprechend zusammen. Wie Du Strings verknüpfst, weißt Du?
Ja, ja, schon, nur sind genau das die eigentlich immer wiederkehrenden Grundlagen die ich einfach in der Funktionsweise noch nicht begreife. Meistens suche ich mir irgendwo ein Beispiel dazu und nehme es dann Stück für Stück auseinander um zu sehen was da los ist. Und dann, nach dem AHA Effekt ist es im Kopf. Na ja, etwas Rücksicht mit einem 44 jährigen, der lernt langsamer :)

BTW, ich hoffe ja mal, dass das ein privates Lern- und kein Kundenprojekt ist. Du solltest Dich nämlich mal etwas mit Sicherheit beschäftigen.

Auf was sollte ich achten?

Keine Panik, ist für meine Band - Seite, aber meine Frau, die Bandmitglieder und ich wollen den auch für privates und geschäftliches mit nutzen..., verkaufen würde ich doch nur was ich kann, wie z. B.:
HTML:
<html><body>Ich weiss alles!</body></html>
:)
 
Zuletzt bearbeitet:
Hi,

dann mach es halt mal Stück für Stück. Mach doch mal eine foreach-Schleife über $_POST['Benutzer1'], in der Du den aktuellen Wert einfach an eine Variable anhängst:

PHP:
$string = '';
foreach($_POST['Benutzer1'] as $benutzer) {
   $string .= $benutzer . ' ';
}
echo $string;

Das erweiterst Du dann nach und nach, bis Dein gewünschter SQL-String dabei rauskommt.
Du kannst mit einem INSERT gleich mehrere Datensätze eintragen. Das müsste dann so aussehen:

Code:
INSERT INTO seminare_users (benutzer) VALUES ('Kalle'),('Heinz'),('Uschi')

LG
 
Verschenke kein Getreide sondern gib ihm Samen und zeige wie man anbaut!
Klasse, das ist Hilfe zur Selbsthilfe!

Ich hatte dies schon mal verwendet, aber nicht in Verbindung mit foreach().
Dann werd ich mal anbauen :)

Vielen Dank erst mal an alle Mitwirkenden.
Damit "erledige" ich dieses Thema vorerst, bis zum nächsten mal...
 
Und so hab ich es letztendlich gelöst:

PHP:
if ($_POST['Benutzer1'] != "")
{
  $benutzer = $_POST['Benutzer1'];
  foreach ($benutzer as $nummern)
    {
      mysql_query("INSERT INTO $berechtigung (id, benutzer, daten) VALUES('', '$nummern', '$daten');");
    }
}
 
Zurück