Formular für Update von Daten

Blickwinkelkanone

Grünschnabel
Hallo zusammen,

ich habe ein kleines Problem, bei dem ich im Moment nicht weiter weiß.
Eine Tabelle wird ausgelesen und angezeigt.
Jetzt steht hinter jeder Zeile ein Button, der das feld "bezahlt" ändern soll, wenn man es anklickt (nur von dem Datensatz, inder der Button gewählt wude). Im Moment werden alle Datensätze geändert, wenn ich einen x-Beliebigen button drücke.
Wie kann ich das lösen? Für jeden Tipp bin ich dankbar!

PHP:
     <?PHP
    // Ab hier werden die Datensaetze zeilenweise ausgeben (auch fetchen genannt)
    $i = 1;
    while ($datensatz = mysql_fetch_array( $abfrageergebnis )){
    ?>
    <tr>
    <tr>
        <td class="row_<?PHP echo $i % 2; ?>"><? if ($datensatz['bezahlt'] ==  "1")
        {
         echo "<img src='/bestellung/images/gruener_haken.gif' alt='Bezahlt'></td>";
     }
     else  {
         echo "<img src='/bestellung/images/rotes_kreuz.gif' alt='Nicht bezahlt'></td>";
     }
            ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['ID'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['vorname'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['nachname'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['groesse'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? if ($datensatz['initialien'] ==  "1")
        {
            echo "Ja</td>";
     }
     else  {
         echo "Nein</td>";
     }
            ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['strasse'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['plz'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['ort'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['EMail'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['Erstellt'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? if ($datensatz['bezahlt'] == "1")
        {
            echo "<form action='uebersicht_adm.php' method='post' name='formular' id='formular'><input name='eintragen' id='eintragen'
 value='Storno' type='submit'>
</form></td>";
if (isset( $_POST['eintragen'] )){
    $DatabasePointer = mysql_connect($db_host, $db_user, $db_pass);
    @mysql_query("UPDATE bestellung SET bezahlt = '0' WHERE ID = '".$datensatz['ID']."'", $DatabasePointer);
    }
}
else
{
echo "<form action='uebersicht_adm.php' method='post' name='formular' id='formular'><input name='eintragen' id='eintragen'
 value='bezahlen' type='submit'>
</form></td>";
if (isset( $_POST['eintragen'] )){
    $DatabasePointer = mysql_connect($db_host, $db_user, $db_pass);
    @mysql_query("UPDATE bestellung SET bezahlt = '1' WHERE ID = '".$datensatz['ID']."'", $DatabasePointer);
    }
}
?>
    </tr>
    <?PHP
    $i++;
    }
    ?>
 
Zuletzt bearbeitet:
Zum Problem käme mir jetzt als erstes in den Sinn, das du für alle Werte ein hidden feld machst. Das bennenst du dann einfach name_old und dann fragst du ab wenn name != name_old etc. (oder habe ich das Problem falsch verstanden?)

und wäre es nicht sinnvoller die class im tr Tag anzugeben statt x mal im td Tag?
 
Hi,

danke fpr deine Antwort. Ich kann dir im Moment leider nicht ganz folgen, was du genau mit dem hidden field machen willst.

Vielleicht habe ich mich auch nur unklar ausgedrückt.
Ich lasse mir eine Tabelle ausgeben. In jeder Zeile steht ein Button.

ID1 Name Vorname... BUTTON
ID2 Name Vorname... BUTTON

Drücke ich nun einen x-beiebigen Button, werden für ALLE Datensätze das Feld geändert.
Ich möchte ja nur das Feld des Datensatzes ändern, für den ich den Button drücke.

JA, da hast du recht, was das mit dem Tag angeht. Werde es abändern.
 
ja genau, und den Inhalt der Tabelle kann man ändern richtig? oder was wird mit dem Button geändert?

edit: kann man sich das evtl irgendwo schon online ansehen? (für meinen Geschmack ist der Code recht unübersichtlich -> vor allem durch das mischmasch aus PHP und HTML mal mit echo mal wird einfach HTML genutzt, mal <?PHP mal <?)
 
Zuletzt bearbeitet:
Genau, mit dem Button soll das Feld "bezahlt" entweder von 0 auf 1, oder anders herum geändert werden.
Nein, den Code gibt es nur auf meinem Rechner.

Das Probelm mit der Durchmischung wollte ich im nächsten Schritt angehen.
 
kannst du mir vielleicht mal die aktuelle HTML Ausgabe kopieren (nur den Abschnitt wo die Buttons mit den Daten sind)
 
Ich habe mal den Code angepasst, damit es nicht so unübersichtlichist. Ich hoffe, das bringt etwas klarheit

PHP:
<?PHP
    // Ab hier werden die Datensaetze zeilenweise ausgeben
    $i = 1;
    while ($datensatz = mysql_fetch_array( $abfrageergebnis )){
    ?>
    <tr>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['ID'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? echo htmlspecialchars( $datensatz['bezahlt'] ). "</td>"; ?>
        <td class="row_<?PHP echo $i % 2; ?>"><? if ($datensatz['bezahlt'] == "1")
        {

// Hier wird in jeder Zeile ein Button eingefügt. Ist der Wert "bezahl" 1, soll der Button den Wert auf 0 ändern (nur für den gewählten Datensatz
            echo "<form action='uebersicht_adm.php' method='post' name='formular' id='formular'><input name='eintragen' id='eintragen'
 value='Storno' type='submit'>
</form></td>";
if (isset( $_POST['eintragen'] )){
    $DatabasePointer = mysql_connect($db_host, $db_user, $db_pass);
    @mysql_query("UPDATE bestellung SET bezahlt = '0' WHERE ID = '".$datensatz['ID']."'", $DatabasePointer);
    }
}
// Hier wird in jeder Zeile ein Button eingefügt. Ist der Wert "bezahl" 0, soll der Button den Wert auf 1 ändern (nur für den gewählten Datensatz
else
{
echo "<form action='uebersicht_adm.php' method='post' name='formular' id='formular'><input name='eintragen' id='eintragen'
 value='bezahlen' type='submit'>
</form></td>";
if (isset( $_POST['eintragen'] )){
    $DatabasePointer = mysql_connect($db_host, $db_user, $db_pass);
    @mysql_query("UPDATE bestellung SET bezahlt = '1' WHERE ID = '".$datensatz['ID']."'", $DatabasePointer);
    }
}
?>
    </tr>
    <?PHP
    $i++;
    }
    ?>
 
<input name='eintragen' id='eintragen'
value='Storno' type='submit'>
</form></td>";

bei id muss ja dann auch nicht eintragen sondern die id stehen oder seh ich das falsch?
 
So, ich habe mich mal dran gesetzt und alles neu gemacht und versucht, HTML und PHP einheitlich zu verarbeiten.
Siehe da, es funktioniert jetzt. Der Übersichtshalber habe ich paar Sachen weggelassen.
Ich möchte mich recht herzlich für deine Zeit und Hilfe bedanken. Ganz groß!

Für Verbesserungen oder Tipps stehe ich bereit.

PHP:
<?

include 'config.php';

// Verbindung oeffnen und Datenbank ausweahlen
$conID = mysql_connect( $db_host, $db_user, $db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" );
if ($conID)
{
	mysql_select_db( $db_name, $conID );
}
// Löschen
if(isset($_POST['delete']))
{
mysql_query("UPDATE `bestellung` SET `bezahlt` = '0' WHERE ID='".$_POST['ID']."'") OR die(mysql_error());
echo "<strong>Shop erfolgreich geändert</strong>";
}

// Anfrage zusammenstellen um die Datensaetze auszulesen
$sql = "SELECT *  FROM `bestellung` WHERE `Aktiviert` = 'Ja'";
// Anfrage an die DB schicken und die Rueckmeldung in eine Variable ablegen
$abfrageergebnis = mysql_query( $sql, $conID );

// Ermitteln wie viele Datensaetzen gefunden wurden
$anzahl = mysql_num_rows( $abfrageergebnis );
echo "<p>Es wurden <strong>" .$anzahl. "</strong> Datensätze gefunden!</p>";

// Tabelle erstellen fuer die Ausgabe
echo '<table border="1">';
echo "<tr><th>Bezahlt</th><th>Nr</th><th>Nachname</th><th>Vorname</th><th>markieren</th></tr>";

// Ab hier werden die Datensaetze zeilenweise ausgeben
while ($datensatz = mysql_fetch_array( $abfrageergebnis ))
{
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
echo "<tr>";
echo "<td>" .htmlspecialchars( $datensatz['ID'] ). "</td>";
echo "<td>" .htmlspecialchars( $datensatz['strasse'] ). "</td>";
echo "<td>" .htmlspecialchars( $datensatz['ort'] ). "</td>";
echo "<td>" .htmlspecialchars( $datensatz['telefon'] ). "</td>";
echo '<td><input type="hidden" name="ID" value="'.$datensatz['ID'].'" /></td>',
'<td><input type="submit" name="delete" value="bezahlen" /></td>';
echo "</tr>";

}

echo "</table>";
echo "</form>";
?>
 
zur Übersichtlichkeit kann man noch immer gut mit Tabs arbeiten (siehe code). Ansonsten finde ich den Code so schon erheblich übersichtlicher.


PHP:
<?php // hier würde ich immer <?php schreiben, das geht immer wenns PHP gibt <? muss auch aktiviert sein

include 'config.php'; 

// Verbindung oeffnen und Datenbank ausweahlen 
$conID = mysql_connect( $db_host, $db_user, $db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" ); 
if ($conID) 
{ 
  mysql_select_db( $db_name, $conID ); 
}

// Löschen 
if(isset($_POST['delete'])) 
{ 
  mysql_query("UPDATE `bestellung` SET `bezahlt` = '0' WHERE ID='".$_POST['ID']."'") OR die(mysql_error()); 
  echo "<strong>Shop erfolgreich geändert</strong>"; 
} 

// Anfrage zusammenstellen um die Datensaetze auszulesen 
$sql = "SELECT *  FROM `bestellung` WHERE `Aktiviert` = 'Ja'"; 
// Anfrage an die DB schicken und die Rueckmeldung in eine Variable ablegen 
$abfrageergebnis = mysql_query( $sql, $conID ); 

// Ermitteln wie viele Datensaetzen gefunden wurden 
$anzahl = mysql_num_rows( $abfrageergebnis ); 
echo "<p>Es wurden <strong>" .$anzahl. "</strong> Datensätze gefunden!</p>"; 

// Tabelle erstellen fuer die Ausgabe 
echo '<table border="1">'; 
echo "<tr><th>Bezahlt</th><th>Nr</th><th>Nachname</th><th>Vorname</th><th>markieren</th></tr>"; 

// Ab hier werden die Datensaetze zeilenweise ausgeben 
while ($datensatz = mysql_fetch_array( $abfrageergebnis )) 
{ 
  echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">'; 
  echo "<tr>"; 
  echo "<td>" .htmlspecialchars( $datensatz['ID'] ). "</td>"; 
  echo "<td>" .htmlspecialchars( $datensatz['strasse'] ). "</td>"; 
  echo "<td>" .htmlspecialchars( $datensatz['ort'] ). "</td>"; 
  echo "<td>" .htmlspecialchars( $datensatz['telefon'] ). "</td>"; 
  echo '<td><input type="hidden" name="ID" value="'.$datensatz['ID'].'" /></td>', 
       '<td><input type="submit" name="delete" value="bezahlen" /></td>'; 
  echo "</tr>"; 
} 

echo "</table>"; 
echo "</form>"; 
?>

edit: und bei ' und " evtl auch einheitlich arbeiten (ist mir gerade noch so aufgefallen)
 
Zurück