#1

vuki

Grünschnabel  (13 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 https://www.batzhupfer.de

Zur Erfassung von Arbeitszeiten

Hallo zusammen

 

da ich trotz intensiver Forumssuche nach einer Lösung auf keinen grünen Zweig gekommen bin, wende ich mich hier an euch und hoffe, dass mir vielleicht jemand einen guten Tipp geben kann. Folgendes Problem bzw. Herausforderung:

 

Mit Siquando Pro Web 6 pflege ich eine Seite unseres RC Sportvereins die auch einen passwortgeschützten Mitgliederbereich hat in dem nur vereinsinterne Themen hinterlegt sind. Da es bei uns immer wieder zu Arbeitseinsätzen zur Pflege unseres Geländes kommt, suche ich nach einer Möglichkeit die dabei investierten Stunden der Mitglieder online im Mitgliederbereich unserer Seite zu erfassen. Allerdings finde ich keine praktikable Möglichkeit um z. B. eine simple editierbare Tabelle mit „Datum, Name, Arbeitszeit, Tätigkeit“ zu erstellen in die jedes Mitglied eigenständig seine Zeiten einpflegen kann.

 

Ich hoffe, dass ich mich soweit verständlich ausgedrückt habe und ihr versteht auf was ich hinaus will. Hat vielleicht einer von euch einen Tipp für mich? Bin für jede Hilfe dankbar!

 

VG, Vuki

#2

jens.morgenstern

Grünschnabel  (18 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 

#3

Roland 1

Routinier  (287 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 https://runderum.de

 Funtioniert mit "Pro" nicht nur mit der "Web" Version.

Da könnte man einen editierbaren Text einstellen. 


Mit freundlichem Gruß,

Roland

w2d 4,6,7,8,8s, Siquando Web 8, Siquando Shop 9, 10, Siquando Pro Web, Siquando Shop 11, Siquando Pro Web 6, Siquando Pro Shop 6,
#4

Roland 1

Routinier  (287 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 https://runderum.de

Steht "Hier" schon genauer ausgeführt.


Mit freundlichem Gruß,

Roland

w2d 4,6,7,8,8s, Siquando Web 8, Siquando Shop 9, 10, Siquando Pro Web, Siquando Shop 11, Siquando Pro Web 6, Siquando Pro Shop 6,
#5

MuggelClan

Forum-Sponsor  (1180 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden

Wenn du etwas SQL-Kenntnisse hast und/oder du dich auch mit phpMyAdmin zur Erstellung von Tabellen auskennst, dann wäre meiner Meinung die Lösung das mit drei benötigte PlugIn über 2-3 Seiten zu lösen:

- HTML-Clip (Da es noch kein geeignetes Formular-PlugIn gibt)
- PHP-Clip
- SQL-Abfrage

Benötigt wird hierzu natürlich eine SQL-Datenbank. Man kann zwar für diese Lösung auch die SQL-Datenbank verwenden, die auch bereits ProWeb selbst verwendet, aber unter anderem aus Sicherheitsgründen empfehle ich wenn möglich hierzu eine eigene SQL-Datenbank zu verwenden.

Bitte nicht einfach darauf loslegen sondern erst alle notwendigen Schritte komplett durchlesen!

Als erstes muss die Tabelle in einer bereits vorhandenen SQL_Datenbank erstellt werden. Das kann entweder direkt über phpMyAdmin erfolgen oder aber auf der ersten Seite (ich nenne diese Seite Eingabe-Seite) erfolgen. Wenn also das über die Eingabeseite erfolgen soll, dann kann z.B. folgender Code im PlugIn "PHP-Clip" verwendet werden:

CODE:

 $host_name = '<Geben Sie hier HOSTNAME ein.>';
 $database = '<Geben Sie hier DATENBANKNAME ein.>';
 $user_name = '<Geben Sie hier BENUTZERNAME ein.>';
 $password = '<Geben Sie hier Ihr Passwort ein.>';
 $table= "<Geben Sie hier den Tabellenname ein.>";

 $link = new mysqli($host_name, $user_name, $password, $database);

 if ($link->connect_error) {
 die('<p>Verbindung zum MySQL Server fehlgeschlagen: '. $link->connect_error .'</p>');
 } else {
 echo '<p>Verbindung zum MySQL Server erfolgreich aufgebaut.</p>';
 }

$sql = "CREATE TABLE IF NOT EXISTS $table (
Name varchar(50),
Arbeit text,
Zeit varchar(50)
)";

if ($link->query($sql) === TRUE) {
 echo "Tabelle ist erstellt oder vorhanden";
} else {
 echo "Error bei Tabellenerstellung: " . $link->error;
}

mysqli_close($link);

Diese Code überprüft, ob die Tabelle vorhanden ist und falls nicht, wird diese mit den angegebenen Spalten im Code erstellt.
z.B. Name, Arbeit, Zeit. Damit man später gezielt auch die Zeilen löschen kann, macht es Sinn als erste Spalte eine ID zu verwenden, die automatisch forlaufend mit Zahl pro Eintrag erstellt wird:

CODE:

 $host_name = '<Geben Sie hier HOSTNAME ein.>';
 $database = '<Geben Sie hier DATENBANKNAME ein.>';
 $user_name = '<Geben Sie hier BENUTZERNAME ein.>';
 $password = '<Geben Sie hier Ihr Passwort ein.>';
 $table= "<Geben Sie hier Ihr Tabellenname ein.>";

 $link = new mysqli($host_name, $user_name, $password, $database);

 if ($link->connect_error) {
 die('<p>Verbindung zum MySQL Server fehlgeschlagen: '. $link->connect_error .'</p>');
 } else {
 echo '<p>Verbindung zum MySQL Server erfolgreich aufgebaut.</p>';
 }

$sql = "CREATE TABLE IF NOT EXISTS $table (
ID INT AUTO_INCREMENT PRIMARY KEY,
Name varchar(50),
Arbeit text,
Zeit varchar(50)
)";

if ($link->query($sql) === TRUE) {
 echo "Tabelle ist erstellt oder vorhanden";
} else {
 echo "Error bei Tabellenerstellung: " . $link->error;
}

mysqli_close($link);

Als zweites benötigt man ein Eingabe-Formular auf der Eingabe-Seite. Da das PlugIn "Formular" hierzu nicht geeignet ist, muss ein eigenes Formular im PlugIn "HTML-Clip" mit folgenden Beispielcode erstellen werden:

CODE:

<form method="POST" action="https://www.deinedomain.de/ordner/ausgabe.php" enctype="application/x-www-form-urlencoded">

<div>
<label for="muggelform-2">Name:</label>
<input type="text" id="muggelform-2" name="nname" value="Muggel">
</div>
<div>
<label for="muggelform-3">Arbeit:</label>
<input type="text" id="muggelform-3" name="narbeit" value="Gartenarbeit">
</div>
<div>
<label for="muggelform-4">Zeit:</label>
<input type="text" id="muggelform-4" name="nzeit" value="2 Stunden">
</div>

<div>
 <input type="submit" value="Absenden">
 <input type="reset">
</div>

</form>

Wichtig ist, dass bei POST der URL-Link der zweiten Seite (ich nenne die Seite Ausgabe-Seite) aufruft. Den URL-Link kann man bei den Seiten-Eigenschften kopieren und hier einfügen. Das Formular entsprechend anpassen.

Auf der Eingabeseite kann auch ein PlugIn "SQL-Abfrage" mit folgenden Code hinzugefügt werde, damit man künftig auch schon vorhandene Einträge sehen kann (oder man ertellt eineneigene dritte Seite hierfür).

CODE:

SELECT `Name`, `Arbeit`, `Zeit`
FROM `<Geben Sie hier den Tabellenname ein.>`

Die Eingabe-Seite ist dann fertig, kommen wir zur Ausgabe-Seite, die auch zuständig ist, das die POST-Daten der Eingabe-Seite in die SQL-Datenbank überträgt bzw. einträgt. Hier wird das PlugIn "PHP-Clip" mit folgenden Beispielcode benötigt:

CODE:

 $host_name = '<Geben Sie hier HOSTNAME ein.>';
 $database = '<Geben Sie hier DATENBANKNAME ein.>';
 $user_name = '<Geben Sie hier BENUTZERNAME ein.>';
 $password = '<Geben Sie hier Ihr Passwort ein.>';
 $table= "<Geben Sie hier den Tabellenname ein.>";

 $link = new mysqli($host_name, $user_name, $password, $database);

 if ($link->connect_error) {
 die('<p>Verbindung zum MySQL Server fehlgeschlagen: '. $link->connect_error .'</p>');
 } else {
 echo '<p>Verbindung zum MySQL Server erfolgreich aufgebaut.</p>';
 }

$nname = $_POST["nname"];
$narbeit = $_POST["narbeit"];
$nzeit = $_POST["nzeit"];

$number = 0; 
/* Einfügen der Daten */ 
if (!mysqli_query($link, "INSERT INTO " . $table . " VALUES('$nname','$narbeit','$nzeit')")) 
 die(printf("<H3>Datensatz konnte nicht eingetragen werden: [%d] %s</H3>", mysqli_connect_errno(), mysqli_connect_error())); 
$number += mysqli_affected_rows($link); 

/* Total number of records inserted */ 
printf("Es wurde " . $number . " Datensatz eingetragen.<BR />");

mysqli_close($link);

Damit man den Eintrag sieht, kann man auch hier ein PlugIn "SQL-Abfrage" mit folgenden Code hinzugefügt werden.

SELECT `Name`, `Arbeit`, `Zeit`
FROM `<Geben Sie hier den Tabellenname ein.>`


Zusätzlich kann man auch darunter noch Buttons setzen, z.B. Zurück zur Eingabe-Seite oder zur dritten Seite wenn eine separate Seite für das PlugIn "SQL-Abfrage" erstellt wurde.

Wenn die Tabelle erstellt ist, kann dann auch wenn gewünscht das PHP-PlugIn-Absatz auf der Eingabeseite ausgeblendet oder gelöscht werden.
Wie man eine Tabelle in der SQL-Datenbank erstellt, gibt es im Internet sehr viele Hilfeseiten und Beispiele. Auch wie man das Ganze erweitern kann.

Das ganze ist natürlich noch ausbaufähig. Auch die Hostverbindung zur SQL-Datenbank könnte man noch aus Sicherheitsgründen mit "include" durchführe, hierzu muss aber manuell eine separate PHP-Seite erstellt werden und per FTP-Programm hochgelden weden.

Ich empfehle auch vorher die Hilfe und die Anleitung von Siquando bzgl. SQL-Abfrage aufmerksam zu lesen.

Viel Spaß beim Weiterbasteln


Mit freundlichen Grüßen

Thomas

Web To Date seit 2004, Siquando Web 12, Pro Web 9, Web Client 


Dieser Beitrag wurde bereits 1 mal bearbeitet, zuletzt von »MuggelClan« (30.03.2025, 23:11)
#6

MuggelClan

Forum-Sponsor  (1180 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden

Da ich im Beitrag 1 überlesen habe, das mit ProWeb 6 gearbeitet wird, hier eine Beispiel-Abfrage mit PlugIn "PHP-Clip" statt mit PlugIn "SQL-Abfrage":

 $host_name = 'HOSTNAME';
 $database = 'DATENBANKNAME';
 $user_name = 'BENUTZERNAME';
 $password = 'PASSWORT';
 $table= "TABELLENNAME";

 $link = new mysqli($host_name, $user_name, $password, $database);

 if ($link->connect_error) {
  die('<p>Verbindung zum MySQL Server fehlgeschlagen: '. $link->connect_error .'</p>');
 } else {
  echo '<p>Verbindung zum MySQL Server erfolgreich aufgebaut.</p>';
 }

$result=mysqli_query($link, "SELECT * FROM " . $table . " ORDER BY name"); 
$row_cnt = mysqli_num_rows($result); 
printf("Es sind " . $row_cnt . " Daten gefunden worden.<BR />"); 

/* Output of the table in an HTML table */ 
echo "<table><tr>"; 

while ($field = mysqli_fetch_field($result)) { 
 echo "<th>$field->name</th>"; 
} 
$field_cnt = mysqli_field_count($link); 
echo "</tr>"; 
while($row = mysqli_fetch_row($result)) { 
 echo "<tr>"; 
 for($i = 0; $i < $field_cnt; $i++) { 
  echo "<td>$row[$i]</td>"; 
 } 
 echo "</tr>\n"; 
} 
echo "</table>"; 

/* Close results */ 
mysqli_free_result($result);
mysqli_close($link);


Als Zurück-Button können man in einem PlugIn "HTML-Clip" folgen Code auf der Ausgabe-Seite ergänzen:

<center>
<FORM>
<INPUT TYPE="button" VALUE=" zurück " onClick="history.go(-1)">
<INPUT TYPE="button" VALUE="vorwärts" onCLick="history.go(1)">
</FORM>
</CENTER> 





Mit freundlichen Grüßen

Thomas

Web To Date seit 2004, Siquando Web 12, Pro Web 9, Web Client 

#7

vuki

Grünschnabel  (13 Punkte)  ·   männlich  ·   Deutschland  ·   Nachricht senden
 https://www.batzhupfer.de

Hallo zusammen.

Vielen Dank für eure Antworten! Da ich ehrlich gesagt nur sehr überschaubare SQL Kenntnisse habe, werde ich es im ersten Schritt wohl erst einmal über den Tipp mittels Google Sheets (wie im Video beschrieben) versuchen. Sollte es sich für uns als nicht praktikabel erweisen, werde ich tiefer in die SQL Welt eintauchen und mich mit der Materie näher beschäftigen. Dazu ein ganz besonderer Dank an Thomas für die ausführliche Beschreibung!! 🙏

VG, Vuki

1230 Aufrufe | 7 Beiträge