PHP und SQL: Aktualisieren mit "Update"

Fohlenpower

Mitglied
Hallo,
ich habe mein Gästebuch mit MySQL Datenbank laufen.
Die Einträge der Besucher werden in einer Tabelle gespeichert und bei Freigabe erscheint eine "0". Die ich manuell ändern in eine "1" da er alle Einträge mit 1 nur anzeigt.
Nun möchte ich mir ein Adminmenü schreiben wo ich alle Einträge über Formular ändern könnte bzw. aus der 0 eine 1 machen könnte. Und durch die Update Funktion die Einträge in der Datenbank bzw. Tabelle geändert werden. Nur leider erscheinen die Einträge zwar auf der Seite doch nach dem ändern und dem klick auf den Update-Button aktualisiert er nichts.
Woran könnte mein Fehler liegen ?

PHP:
<?php

include("config.php");

if ($roger=="Update!")
{
for($h=1; $h<$iv; $h++)
{
$queryt=mysql_query("UPDATE gaestebuch SET freigabe='$pfreigabe[$h]', name='$pname[$h]', icq='$picq[$h]', email='$pemail[$h]', webseite='$pwebseite[$h]', datum='$pdatum[$h]', eintrag='$peintrag[$h]'  where id='$pid[$h]'", $link);
} }
print "<html><head><title>Gästebuch freischalten</title></head><body>\n";
print "<hr color=\"green\">\n";
print "<form action=\"$PHP_SELF?PHPSESSID=$PHPSESSID\" method=\"post\">\n";
$queryx=mysql_query("SELECT * FROM gaestebuch", $link);
print "<table width=\"85%\" cellpadding=\"3\" cellspacing=\"1\" border=\"0\" bgcolor=\"silver\">\n";
print "<tr><td width=\5%\" bgcolor=\"white\">Freigabe</td><td width=\"26%\" bgcolor=\"white\">Name</td><td width=\"30%\" bgcolor=\"white\">ICQ</td>\n";
print "<td width=\"20%\" bgcolor=\"white\">Email</td><td width=\"20%\" bgcolor=\"white\">Webseite</td><td width=\"20%\" bgcolor=\"white\">Datum</td><td width=\"20%\" bgcolor=\"white\">Eintrag</td></tr>\n";
$i="1";
while($fetch = mysql_fetch_array ($queryx)){
print "<tr><td width=\"5%\" bgcolor=\"white\"><input type=\"text\" name=\"pfreigabe[$i]\" size=\"5\" value=\"$fetch[freigabe]\"></td><td width=\"26%\" bgcolor=\"white\"><input type=\"text\" name=\"pname[$i]\" size=\"26\" value=\"$fetch[name]\"></td>\n";
print "<td width=\"30%\" bgcolor=\"white\"><input type=\"text\" name=\"picq[$i]\" value=\"$fetch[icq]\" size=\"30\"></td><td width=\"20%\" bgcolor=\"white\"><input type=\"text\" name=\"pemail[$i]\" value=\"$fetch[email]\" size=\"20\"></td><td width=\"20%\" bgcolor=\"white\"><input type=\"text\" name=\"pwebseite[$i]\" value=\"$fetch[webseite]\" size=\"20\"></td><td width=\"30%\" bgcolor=\"white\"><input type=\"text\" name=\"pdatum[$i]\" value=\"$fetch[datum]\" size=\"30\"></td><td width=\"30%\" bgcolor=\"white\"><input type=\"text\" name=\"peintrag[$i]\" value=\"$fetch[eintrag]\" size=\"30\"></td></tr>\n";
print "<input type=\"hidden\" name=\"pid[$i]\" value=\"$fetch[id]\">\n";
$i++;
}
print "</table><center><input type=\"hidden\" name=\"iv\" value=\"$i\"><input type=\"submit\" value=\"Update!\" name=\"roger\"></center></form>\n";
print "<br><br><center><a href=\"index.php?PHPSESSID=$PHPSESSID\">zurück</a></center>\n";
print "</body></html>\n";
?>
Hoffe ihr könnt mir da weiterhelfen.
 
Zuletzt bearbeitet:
Sorry hab leider keine Lösung für dich! Aber einen Tip:

Nimm bitte für PHP-Code den PHP-Tag, für HTML-Code den HTML-Tag, und für jeglichen anderen Code der anfällt den (von dir bereits verwendeten) CODE-Tag.

Es ist für alle, die dir helfen wollen, nämlich um einiges leichter Fehler zu finden wenn Syntaxhighlighting vorhanden ist! ;)
 
habe ich geändert oben an meinem code.
hab ihr vielleicht auch für meinen code im beispiel oben eine Möglichkeit oder einen Fehler gefunden den ich ändern müsste ?
 
So kann man eigentlich keinen erkennen! Schreib mal anstelle von dem:
PHP:
$queryt=mysql_query("UPDATE gaestebuch SET freigabe='$pfreigabe[$h]', name='$pname[$h]', icq='$picq[$h]', email='$pemail[$h]', webseite='$pwebseite[$h]', datum='$pdatum[$h]', eintrag='$peintrag[$h]'  where id='$pid[$h]'", $link);
das hier:
PHP:
$queryt=mysql_query("UPDATE gaestebuch SET freigabe='$pfreigabe[$h]', name='$pname[$h]', icq='$picq[$h]', email='$pemail[$h]', webseite='$pwebseite[$h]', datum='$pdatum[$h]', eintrag='$peintrag[$h]'  where id='$pid[$h]'", $link) or die(mysql_errno().": ".mysql_error());
 
da hat sich am fehler nicht viel geändert.
jetzt mal im allgemeinen :

name der tabelle in der datenbank: gaestebuch
spalten: id, freigabe, name, icq, email, webseite, datum, eintrag

die besucher können per formular sich ins gästebuch eintragen. einträge werden gespeichert (mit einer "0" in der Spalte Freigabe).
Nun möchte ich eine Admin Seite erstellen in der man beispielsweise durch ein Formular
die Tabelle aktualisieren kann. D.h. so das ich die "0" mit einer "1" ersetzen kann damit er freigeschaltet ist. Und schtbar für alle. Nun meine Frage wie ich so eine Seite erstellen kann ? Kann mir da jemand helfen? Muss nicht unbedingt am obrigen Code gearbeitet werden. Kann auch ein anderer sein.
 
Sorry, dass die Antwort erst jetzt kommt, aber war gestern nicht online ;) ! Dafür hab ich ein kleines Script, nur für dich gebastelt:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Eintrag freischalten</title>
</head>
<body>

<?php
    
    $db = mysql_connect("localhost", "root", "") or die ("connection terminated");
	  mysql_select_db("test_db", $db);
    
    if(isset($_POST['freischalten']) && isset($_POST['setfree'])){
    
        foreach($_POST['setfree'] as $setfree_v){
            
            mysql_query("UPDATE gaestebuch SET freigabe='1' WHERE id='".$setfree_v."'") or die(mysql_errno().": ".mysql_error());
            echo "Der Beitrag mit der ID <b>$setfree_v</b> wurde freigschaltet.<br />";
            
        }
    
    }

    echo "<br /><form method='post' action='$PHP_SELF?PHPSESSID=$PHPSESSID'>";

    $sql=mysql_query("SELECT * FROM gaestebuch WHERE freigabe='0'") or die(mysql_errno().": ".mysql_error());
    
    
    while($result=mysql_fetch_array($sql)){
    
        echo "  <table>
                    <tr>
                        <td>
                            <b>Autor:</b>
                        </td>
                        <td>
                            ".$result['name']."
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <b>ICQ:</b>
                        </td>
                        <td>
                            ".$result['icq']."
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <b>E-mail:</b>
                        </td>
                        <td>
                            ".$result['email']."
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <b>Website:</b>
                        </td>
                        <td>
                            ".$result['webseite']."
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <b>Erstellungdatum:</b>
                        </td>
                        <td>
                            ".$result['datum']."
                        </td>
                    </tr>
                    <tr>
                        <td colspan='2'>
                            <b>Eintrag:</b>
                            <p>
                                ".$result['eintrag']."
                            </p>
                        </td>
                    </tr>
                    <tr>
                        <td colspan='2'>
                           <br />
                           <input type='checkbox' name='setfree[]' value='".$result['id']."'> 
                           Freischalten?
                        </td>
                    </tr>
                </table><br /><br />";
    
    }
    
    echo "  <input type='submit' name='freischalten' value='Freischalten'><br />
            Um einen Beitrag freizuschalten, k&auml;stchen anhaken und auf \"freischalten\" klicken. (Mehrfachauswahl m&ouml;glich)
            </form>";
            
?>

</body>
</html>

Diese Seite macht folgendes:
Es werden nur jene Einträge angezeigt, welche noch nicht freigeschalten wurden.
Um nun einen Eintrag freizuschalten, wählt man diesen aus.

Dadurch, dass jedes Kästchen den namen setfree[ ] bekommen hat, wird bei der Abarbeitung ein Array gebildet, welche sämtliche ID's von den Beiträgen enthält, die man ausgewählt hat. (dadurch kann man auch mehrere Beiträge simultan auswählen ;) ).

Sobald nun der 'Freischalten'-Button gedrückt wurde und mindestens eine ID im Array vorhanden ist, wird in einer foreach-Schleife jede ID im Array in der DB auf 1 gesetzt.

Das Script ist getestet und funktioniert ohne Fehler. Bei Fragen melde dich einfach hier im Forum (in diesem Thread :-) ).

Jetzt musst du die Seite nurnoch gestalten. Eine Erweiterung die mir gerade eingefallen ist:
Bei der if-Abfrage in der überprüft wird ob $_POST['freischalten'] und $_POST['setfree'] gesetzt sind, kannst du noch eine elseif-Abfrage anhängen die überprüft ob NUR $_POST['freischalten'] vorhanden ist, und sollte dies dann der Fall sein, eine Ausgabe machen die besagt dass man bitte einen Eintrag auswählen soll. z.B. so:

PHP:
.
.
.
elseif(isset($_POST['freischalten']) && !isset($_POST['setfree'])){
    echo "Es wurde keine Auswahl getroffen. Bitte wählen sie einen Beitrag aus";
}
//edit: Die elseif-Schleife hab ich auch getestet und sie funktioniert auch.
 
Zuletzt bearbeitet:
Zurück