Benutzer aus einem PHP Script in DB anlegen

hubfred

Grünschnabel
Hallo zusammen,

großartige Seite erstmal, bin neu hier und einige Tutorials haben mir schon gut weitergeholfen.Leider habe ich noch ein paar Probs, die ich damit bisher nicht lösen konnte.
Es wäre nett, wenn Ihr mir bei folgenden Sachen behilflich sein könntet:

1.) Ich möchte aus einem PHP Script heraus mit dem GRANT Befehl einen User neu anlegen, damit er danach selbst connects auf die DB machen kann. Hintergrund: Als Admin in meinem Frontend (Dokumentenverwaltung btw) soll man Benutzer in einem Formular anlegen und nach dem Submit wird dann dieser User in einer Tabelle "User" angelegt. Das geht auch. Nun soll dieser neue User fortan selbst SQL Queries ausführen dürfen (Dokumente anzeigen z.B.). Dafür muss er aber auch einen User auf dem Host haben, wo das ganze drauf läuft.
Also dachte ich mir, dass ebenfalls im Script zu machen, damit der Admin nicht immer den phpmyadmin benutzen muss. Hier dazu mein Code (Ausschnitt):

$sql ="GRANT SELECT , INSERT , UPDATE , CREATE , FILE , INDEX , ALTER , CREATE TEMPORARY TABLES , REPLICATION SLAVE ON * . * TO '".$benutzer["Loginname"]."'@'localhost' //loginname ist aus dem "Anlegen"Formular
IDENTIFIED BY '';";
mysql_query ($sql);

Das läuft aber nicht. Als Infos noch: Im Script selbst wird mit einem root user connected. also sollte er GRANTen dürfen ;). Passwort habe ich erstmal gelassen.

2.) Da es bei diesem Frontend für die Dokumentenverwaltung (kurz: DW) mehrere User und Admins gibt, möchte ich einem frisch eingeloggten User über Events berichten, die ihn betreffen.
Erläuterung: Sagen wir mal User x legt ein Dokument an und nennt user y als co-author. Wenn sich also dann user y irgendwann einloggt, möchte ich ihn davon unterrichten. Ich habe das bisher Session orientiert aufgebaut, habe aber keine Ahnung, wie ich das alles so verknüpfen soll. Hatte überlegt ein flag (oder ein Feld in der UserTabelle) zu setzen, sobald jemand einen anderen user referenziert. Vermute aber mal, dass ich dann mit Triggern arbeiten muss. Würde aber erstmal Eure Tipps abwarten.

Hoffe, meine Anliegen sind halbwegs klar.

Vielen Dank schonmal im voraus,
Euer Kai aka hubfred
 
Für 1.) Was sagt mysql_error() nach dem mysql_query() ?

2.) Dafür würde ich mir ne Tabelle machen, in der du den User sowie die für Ihn bestimmte nachricht speicherst, vielleicht auch noch ein Flag für gelesen.
Dann liest du beim Einloggen alle seine Ungelesenen Datensätze aus. So hat er später uach noch ein Messagehistory....
 
Danke schonmal für die fixe antwort.

Zu 1.) Es geht auf einmal, keine Ahnung, habe nur das System neu gestartet. Habe Deinen Tipp umgesetzt, aber es kam keine Fehlermeldung. Wie auch ! ;)

zu 2.) Ja, so dachte ich mir das. Ich soll diesen Sachverhalt aber nach Möglichkeit mit Sessions lösen (lt. Auftraggeber). Kein Plan, wie mir Sessions dabei helfen sollen.

Könnt Ihr Euch denken, wie das gemeint sein könnte. Kann im Moment keine Rücksprache halten .

Kai
 
Geht ja gar nicht per session. Dazu müsste der User der eine Notification "versendet" die SessionID des empfängers kennen und dann in dessen Session speichern, sofern überhaupt aktiv und ...

Vielleicht meint er eher, dass das System sessionbaisert laufen soll?
Sprich jeder User bekommt eine Session? Aber ich denke so hast du es ja soweiso gelöst...
 
Hallo nochmal,

isch hätt' da gern nochma ein Problem ;). Wollte erst einen neuen Thread aufmachen, aber da es zum selben Projekt gehört, packe ich es nochmal hierein.

Folgendes:
In dem Benutzerformular kann man nun Benutzer anlegen. Ich möchte aber auch Angaben zu existierenden Benutzern ändern können. Das ändern an sich ist nicht das Prob (Update oder Insert). Ich würde aber gerne über eine HTML Listbox alle bereits ex. User anzeigen lassen und nach Betätigen eines Eintrages aus der Listbox die anderen relevanten Felder mit den Inhalten aus der DB zu diesem User füllen.

Hatte da auch schon eine Idee, aber es scheitert daran, dass die "Ausgabeschleife" (s.u.) Ihre Werte nicht weitergeben mag, sodass ich sie unmittelbar danach in die Listbox eintragen könnte.

Hierzu der relevante Code Auschnitt:
...
...
....
<form action="select.htm">
<p>
<?
....
$query="Select * from Tabelle_Namen";
$result=@mysql_query($query, $connection);
while($row = mysql_fetch_assoc($result))
{

echo $row['Name']; //Hier gibt er die Benutzer aus der DB aus
};

?>

<select name="Sel" size="5">";
<option> Hier hätte ich jetzt ein php-echo gemacht </option>
<option> usw. </option>

</select>
</p>
</form>

So, die Ausgabe in der Schleife geht, aber ich bekomme sie nicht so hin, dass die Ausgabewerte nacheinander als Wahloption in die Listbox kommen.

Geht das überhaupt?

Vielen Dank,
Kai
 
Entweder du machst nach der AUswahl aus der Selectbox ein Submit des Forms und liest die Daten aus und zeigst sie an.
Clientbasiert könntest du auch ein JS-Array generieren, bei ändern der Selectbox füllst du dann die Formularfelder mit den entsprechenden Daten.
Macht den Code für den Client aber grösser, da alle Daten zu allen Usern eben mit im Content stehen.
 
Das Problem ist, dass ich ja zum Füllen der Listbox schon ein SQL Query brauche. Sonst wäre das alles statisch.
Und da vertragen sich HTML und PHP nicht so recht, jedenfalls nimmt das <Select ...> die Ergebnisse aus der $row nicht an. Besteht denn die Möglichkeit, die Ergebnisse irgendwie zwischen zu speichern? Also in eine Art Array

sinngemäß:
$c=0;
while($row = mysql_fetch_assoc($result)){
$array[$c]=$row['Name'];$c++;
};

aber so, dass das array auch ausserhalb der Schleife nutzbar ist.Das sinngemäße Code Beispiel ist natürlich humbug. Es soll nur zeigen, wie ich das meine.

Kai
 
Das $c kannst du dir Sparen. bei leeren [] kümmert sich php um die Indizierung selbst...

Und wieso kommt nix raus? Da hilft der Beispielhafte Code auch nix.
Du musst dann schon den Zeigen bei dem es nicht geht.
 
Ben Ben hat gesagt.:
Das $c kannst du dir Sparen. bei leeren [] kümmert sich php um die Indizierung selbst...
Das soll heißen, du sollst dies:
PHP:
        $c=0; 
        while($row = mysql_fetch_assoc($result)){
        $array[$c]=$row['Name'];$c++;
         };
in
PHP:
        while($row = mysql_fetch_assoc($result))
            $array[]=$row['Name'];
ändern.
 
ist denn das array nach der schleife immer noch voll?
bzw. kann ich das dann innerhalb der <Option> Dinger ausgeben, also
<Option> <? echo array[0] ?> </Option>
<Option> <? echo array[1] ?> </Option>

usw.?

@Ben Wie schon erwähnt, er gibt ja die Namen alle aus, die auf der DB sind, nur eben nicht innerhalb der Listbox Tags. Daher suchte ich ja nach einem Weg, die Ausgabewerte auch nach der Schleife noch zu erhalten.

Edit: Alles klar es geht jetzt, Eure kombinierte Lösung mit den Arrays hat geklappt
 
Zuletzt bearbeitet:
Zurück