Wie am besten lösen?

patrick1155

Mitglied
Hi,

Also habe das Forum über Google gefunden als ich auf der suche nach hilfe war, jetzt habe ich ein GROßES problem derzeit und stecke in PHP fest ....

Habe jetzt soweit ein login mit viel Auf und Ab geschafft *gg* und bin eigendlich auch schon sehr weit gekommen. Nur häng ich jetzt gerade bei einem Problem dem Benutzer bearbeiten

Ich habe jetzt eine Datenbank gemacht und folgende daten in einer Tabelle zufinden sind

Id, User, Vor- , Nachname , Email, Klasse ect ect ect

Jetzt habe ich eine neue datei erstellt bearbeiten.php
in dieser datei wird die ID , Username ausgegebn und der Bearbeitungs Button

Code:
	<?php
  $alluser = "SELECT id, user FROM users";
  $ergebnis = mysql_query($alluser);
while($row = mysql_fetch_object($ergebnis))
{
		echo '<tr>';
		echo '<td width="30" bgcolor="#e7e7e7" align="right">'.$row->id.'</td>';
		echo '<td width="250" bgcolor="#ffffff">'.$row->user.'</td>';
		echo '<td width="250" bgcolor="#e7e7e7"><input type="submit" name="submit" value="Bearbeiten" class="button"></td>';
}
  ?>

wird so angezeigt
Id Benutzer Bearbeiten
1 lala Button


Funktioniert soweit eigendlich einwandfrei nurjetzt häng ich...
Wie kann ich den Button so schreiben dass, wenn ich auf den Button klicke, auf die nächste seite komme, wo ich die Daten vom jeweiligen User bearbeiten kann...

habe die ganze zeit schon Probiert komme aber nicht wirklich auf eine gute lösung ...

lg
patrick
 
Es wird (soweit ich mich erinnere) nur alles übertragen was vor dem Button ist.

Also könntest du ein verstecktes Array mitsenden:
HTML:
<input type="hidden" name="userID[]" value="_die_ID_" />

Und das Skript an welches das Formular gesandt wird, schaut was der letzte Eintrag im Array ist. So weiß es welchen du editieren möchtest.

Es gibt bestimmt auch eine Möglichkeit über das "name"-Attribut des Button selbst.
 
Entweder du machst es ohne Button, sondern mit einem ganz normalen link (benutzer_bearbeiten.php?id=USERID) oder du müsstest für jeden Benutzer ein eigenes Formular erstellen, welches mit dem Button abgesendet werden kann. In jedem Formular steck dann auch ein hidden-Feld, wie schon von meinem Vorposter geschrieben (Ich frag mich nur: Warum als Array?).
Du könntest auch nur ein Formlar mit vielen submit-Button erstellen. Im name-Attribute des Button könnte man dann die ID unterbringen.

Ich wäre für die simple Link-Methode. In der neuen Datei kannst du dann mit $_GET['id'] auf die BenutzerID zugreifen.
 
Entweder du machst es ohne Button, sondern mit einem ganz normalen link (benutzer_bearbeiten.php?id=USERID) oder du müsstest für jeden Benutzer ein eigenes Formular erstellen, welches mit dem Button abgesendet werden kann. In jedem Formular steck dann auch ein hidden-Feld, wie schon von meinem Vorposter geschrieben (Ich frag mich nur: Warum als Array?).
Du könntest auch nur ein Formlar mit vielen submit-Button erstellen. Im name-Attribute des Button könnte man dann die ID unterbringen.

Ich wäre für die simple Link-Methode. In der neuen Datei kannst du dann mit $_GET['id'] auf die BenutzerID zugreifen.

ja gut wenn ich es per text-link mache müsste ich auch für jeden benutzer einen eigenen text bzw formular erstellen oder ? macht ja eigendlich keinen unterschied ob text oder button oder versteh ich das was falsch...
 
Bitte etwas mehr auf die Rechtschreibung achten ;)
---------------------

Mit Textlink meinte ich einfach folgendes:
HTML:
<a href="benutzer_bearbeiten.php?id=1">lala bearbeiten</a>
Du kannst dann im Skript durch $_GET['id'] auf die ID des Benutzers zugreifen und damit die Daten auslesen und ändern.

Bei einem Formular pro Benutzer sähe es z.B. so aus
HTML:
<form method="post" action="benutzer_bearbeiten.php">
    <input type="hidden" name="id" value="1" />
    <input type="submit" name="bearbeiten" value="lala bearbeiten" />
</form>
Du kannst dann im Skript durch $_POST['id'] auf die ID des Benutzers zugreifen und damit die Daten auslesen und ändern. Wie man aber sieht, ist es einiges mehr an HTML-Code.

Bei nur einem Formular mit vielen Button könnte es so aussehen:
HTML:
<form method="post" action="benutzer_bearbeiten.php">
  TABELLEN-ANFANG
  <tr>
    <td>1</td>
    <td>lala</td>
    <td><input type="submit" name="id_1" value="lala bearbeiten" /></td>
  </tr>
  <tr>
    <td>2</td>
    <td>foobar</td>
    <td><input type="submit" name="id_2" value="foobar bearbeiten" /></td>
  </tr>
  TABELLEN-ENDE
</form>
Du müsstest hierbei dann bei allen durch $_POST gegebenen Infos schauen, welches denn nun dein Button sein könnte und wie die ID lautet. Ist also unnötig umständlich.
 
Zuletzt bearbeitet:
Bitte etwas mehr auf die Rechtschreibung achten ;)

Ja, sry weißt hab grad Ferien :P
---------------------

Mit Textlink meinte ich einfach folgendes:
HTML:
<a href="benutzer_bearbeiten.php?id=1">lala bearbeiten</a>
Du kannst dann im Skript durch $_GET['id'] auf die ID des Benutzers zugreifen und damit die Daten auslesen und ändern.


Ja, das war schon klar, nur ich muss trotzdem dann bei jedem User den Code reinschreiben bzw die ID Händisch eingeben und das ist ziemlich Blöd, weil wenn ich einen User Lösche muss ich dass wieder umständlich ändern... Kann ich das Per PHP irgendwie so machen dass er die ID selbst erkennt und beim Link hinzufügt`?
aber ich glaube nicht das es so funktionieren wird bei mir da ich meine Seiten alle über Site.php?page=user aufrufe und da funktioniert site.php.php?page=bearbeiten?id=1 nicht....

Danke schon jetzt für die tolle hilfe von euch

lg
patrick
 
Zuletzt bearbeitet:
Wo ist denn das Problem, das in deiner Schleife machen zu lassen?
PHP:
	<?php
  $alluser = "SELECT id, user FROM users";
  $ergebnis = mysql_query($alluser);
while($row = mysql_fetch_object($ergebnis))
{
		echo '<tr>';
		echo '<td width="30" bgcolor="#e7e7e7" align="right">'.$row->id.'</td>';
		echo '<td width="250" bgcolor="#ffffff">'.$row->user.'</td>';
		echo '<td width="250" bgcolor="#e7e7e7"><a href="site.php?page=benutzer_bearbeiten&id='.$row->id.'">Bearbeiten</a></td>';
}
  ?>
Edit: Gerade deine Antwort nochmal gelesen. So wie es nun angepasst ist, sollte es auch funktionieren. Je nachdem, wie deine Auflüsung des page-parameter funktioniert, musst du dann den Codeschnippsel von unten an die passende Stelle packen und eventuell denaction- Pfad für das Formulat anpassen, dass ich in dem Codeschnippsel erwähne.

Dann brauchst du noch eine Datei, in der du die Daten bearbeiten kannst. Ich habe die Datei in dem Beispiel "benutzer_bearbeiten.php" genannt.
PHP:
<?php
// Alles machen, was nötig ist. z.B. Datenbankverbindung

$userid = false;

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(isset($_POST['id']) && ctype_digit($_POST['id']))
    {
        $userid = $_POST['id'];

        // Hier alle Felder validieren. Z.B. prüfen, ob eines leer ist bzw. ob ungültige Werte darin enthalten sind
        // Anschließend Daten in die Datenbank eintragen. BenutzerID steht in $userid
    

        if(KEINE_FEHLER)
        {
            // Weiterleitung auf die Benutzerliste, wenn keine Fehler aufgetaucht sind, ansonsten nochmal das Formular anzeigen.
            header('Location: bearbeiten.php');
            exit;
        }
    }
    //  den else-Teil können wir uns sparen. Wenn eine ungültige ID übergeben wurde, wird $userid nicht verändert. Er springt also automatisch in den unteren else-Zweig "Ungültige Anfrage"
}
elseif(isset($_GET['id']) && ctype_digit($_GET['id']))
{
    $userid = $_GET['id'];
}

if($userid !== false)
{
    $sql = "SELECT hier_die_felder FROM `users` WHERE `id` = ".$userid;
    $result = mysql_query($sql);
    if(mysql_num_rows($result) == 1)
    {
        $userdata = mysql_fetch_object($result);
        // Formular aufbauen und Felder mit den Daten füllen
        // als action-Pfad wieder den Dateinamen wählen (z.B. site.php?page=benutzer_bearbeiten)
        // ein (hidden-)Feld mit der BenutzerID erstellen das id heißt
        // falls es beim abschicken (POST-TEIL) Fehler gab, kannst du eventuell die Daten aus dem POST nehmen, anstatt die Daten aus der Datenbank. Das ist dir überlassen ;)
    }
    else
    {
        // Fehlermeldung: Benutzer nicht gefunden!
    }
}
else
{
    // Fehlermeldung: Ungültige Anfrage
}
?>
Ist nur ein kleiner Codeschippsel, der hier und da noch Pseudo-Code enthält. Den müsstest du noch vervollständigen. Ich denke mal, dass sollte als kleine Anregung genügen.
 
Zuletzt bearbeitet:
Sodale ^^ habe jetzt alles meinen Bedürfnissen entsprechent geändert
Code:
<?php
session_start();
if(!session_is_registered('user') || $_SESSION['user'] == "") {
	header("location:index.php");
	die;
}
require("connect.inc.php");
?>
HIER IST MEIN FORMULAR!!
<?php
$userid = false;

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(isset($_POST['id']) && ctype_digit($_POST['id']))
    {
        $userid = $_POST['id'];
		
	//user
    }elseif(!isset($_POST['username']) || $_POST['username'] == ""){
    echo '<p align="center">
    Benutzer bitte eingeben!
    <br /><br /><a href="neu.php">Zurück</a></p>';
	
	//vorname
    }elseif(!isset($_POST['vorname']) || $_POST['vorname'] == ""){
    echo '<p align="center">
    Vorname bitte eingeben!
    <br /><br /><a href="neu.php">Zurück</a></p>';
	
	//nachname
    }elseif(!isset($_POST['nachname']) || $_POST['nachname'] == ""){
    echo '<p align="center">
    Nachname bitte eingeben!
    <br /><br /><a href="neu.php">Zurück</a></p>';
	
	//email
    }elseif(!isset($_POST['mail']) || $_POST['mail'] == ""){
    echo '<p align="center">
    E-Mail bitte eingeben!
    <br /><br /><a href="neu.php">Zurück</a></p>';
	
	//punktestand
    }elseif(!isset($_POST['punkte']) || $_POST['punkte'] == ""){
    echo '<p align="center">
    Punktestand bitte eingeben!
    <br /><br /><a href="neu.php">Zurück</a></p>';
	
	//klasse
    }elseif(!isset($_POST['klasse']) || $_POST['klasse'] == "0"){
    echo '<p align="center">
    Klasse bitte wählen!
    <br /><br /><a href="neu.php">Zurück</a></p>';
	
	//Admin
    }elseif(!isset($_POST['admin']) || $_POST['admin'] == "0"){
    echo '<p align="center">
    Rechte bitte wählen!
    <br /><br /><a href="neu.php">Zurück</a></p>';
	
	//pass
    }elseif(!isset($_POST['password']) || $_POST['password'] == "") {
    echo '<p align="center">
    Passwort bitte eingeben!
	<br /><br /><a href="neu.php">Zurück</a></p>';
    }elseif($_POST['password'] != $_POST['password2']) {
    echo '<form action="neu.php" method="post">';
    echo '<p align="center">Die Passwörter stimmen nicht überein!<br /><br />';
    echo '<input type="hidden" name="username" value="'.$_POST['username'].'">';
    echo '<input type="submit" name="zurueck" value="Zurück"></p>';
    echo '</form>';
    }else{
    $query = @mysql_query("SELECT user FROM users WHERE user = '".$_POST['username']."'");
    $result = @mysql_fetch_array($query);
    if($_POST['username'] == $result['user']) {
    echo '<p align="center">dieser Benutzername ist leider schon vergeben!<br /><br /><a href="neu.php">Zurück</a></p>';
    die;
    }else{
		
	////EINFÜGEN !!
    $username = $_POST['username'];
    $pass = md5($_POST['password']);
	$vorname = $_POST['vorname'];
	$nachname = $_POST['nachname'];
	$mail = $_POST['mail'];
	$punkte = $_POST['punkte'];
	$klasse = $_POST['klasse'];
	$admin = $_POST['admin'];
  

 

     $aendern = "UPDATE users SET(user,pass,vorname,nachname,mail,punkte,klasse,admin) VALUES('$username', '$pass', '$vorname', '$nachname', '$mail', '$punkte', '$klasse', '$admin') WHERE id = '$userid'";
     $update = mysql_query($aendern);	
	
        // Hier alle Felder validieren. Z.B. prüfen, ob eines leer ist bzw. ob ungültige Werte darin enthalten sind
        // Anschließend Daten in die Datenbank eintragen. BenutzerID steht in $userid
    

        if(KEINE_FEHLER)
        {
            // Weiterleitung auf die Benutzerliste, wenn keine Fehler aufgetaucht sind, ansonsten nochmal das Formular anzeigen.
            header('Location: bearbeiten.php');
            exit;
        }
    }
    //  den else-Teil können wir uns sparen. Wenn eine ungültige ID übergeben wurde, wird $userid nicht verändert. Er springt also automatisch in den unteren else-Zweig "Ungültige Anfrage"
}
178elseif(isset($_GET['id']) && ctype_digit($_GET['id']))
{
    $userid = $_GET['id'];
}

if($userid !== false)
{
    $sql = "SELECT user,email,vorname,nachname,klasse,punkte,begr, FROM `users` WHERE `id` = ".$userid;
    $result = mysql_query($sql);
    if(mysql_num_rows($result) == 1)
    {
        $userdata = mysql_fetch_object($result);
		
        // Formular aufbauen und Felder mit den Daten füllen
        // als action-Pfad wieder den Dateinamen wählen (z.B. site.php?page=benutzer_bearbeiten)
        // ein (hidden-)Feld mit der BenutzerID erstellen das id heißt
        // falls es beim abschicken (POST-TEIL) Fehler gab, kannst du eventuell die Daten aus dem POST nehmen, anstatt die Daten aus der Datenbank. Das ist dir überlassen ;)
		
    }
    else
    {
        // Fehlermeldung: Benutzer nicht gefunden!
    }
}
else
{
    // Fehlermeldung: Ungültige Anfrage
}
?> 
</html>

Nur jetzt schreibt er mir einen Sytax fehler in der zeile 178 nur dort ist kein Syntax fehler zufinden also für mich zumindest...

Danke für deine super hilfe ! bzw für den super Code

lg
 
Wenn du die Anzahl der Klammern überprüfst, wirst du feststellen, dass für den else-Zweig, in dem du feststellst, ob der Benutzer schon vergeben ist, die schließende Klammer fehlt.

Ansonsten noch eine Frage: Ist das, was du gerade machst, für das Bearbeiten eines Benutzers oder das Neuanlegen? Du hast vorhin was von bearbeiten gesagt, aber den Zurücl-Links nach zu urteilen handelt es sich um was anderes.

Ansonsten war der Codeschnippsel so gedacht:
In der If-Bedingung, wo REQUEST_METHOD == POST geprüft wird, soll der Code hin, der beim versenden des Formulares angewendet werden soll. Der dazugehörige else-Zweig (isset($_GET['id']) [...]) tritt für den Fall ein, dass es sich NICHT um das abgeschickte Formular handelt, sondern um den Aufruf über den bearbeiten-Link mir der id=USER_ID in der URL.

die nächste If-Bedingung, die $userid !== false prüft soll das Formular mit den Daten des zu bearbeitenden Benutzers anzeigen.

Dein elseif, wo du $_POST['username'] prüfst, müsste übrigends ein reines if sein und sich innerhalb des if mit $userid = $_POST['id'] befinden. Auch hast du noch die Pseudo-Code-Zeile mit dem "KEINE_FEHLER" nicht angepasst.

Falls du eine andere Vorgehensweise hast, musst du dort noch ein bisschen mehr anpassen. Es sind nämlich sonst ein paar Fehler im Programmablauf. Am Besten du baust das dann in eine eigene Codedatei, die direkt von dem Formular angesprochen wird. Dann bist du nicht an meinen Programmablauf gebunden ;) Vielleicht waren die gegebenen Kommentare doch nicht ausreichend, oder du bist noch nicht fertig mit anpassen, was auch sein kann :-P
 
Zuletzt bearbeitet:
Zurück