PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Checkbox in BD-Tabelle schreiben (http://www.selfphp.de/forum/showthread.php?t=24619)

syntax 20.03.2012 10:27:28

AW: Checkbox in BD-Tabelle schreiben
 
Ja stimmt,

hab jetzt nochmal drüber geschlafen und meine code überarbeitet.

PHP-Code:

if (isset($_REQUEST['checkbtn'])) {
         foreach (
$_REQUEST['checkbtn'] as $nonvalue => $value) {
          
mysql_query ("UPDATE fahrzeug SET status='$value' WHERE id='".$_GET['id']."'") OR die(mysql_error());
          }
        }; 

das else {
// print "0"
$buchungnonchecked;
}


von Oben lasse ich weg da ich die Spalte Status so formatiert habe das sie Standardmäßig immer NULL ist wenn kein Eintrag gemacht wurde.

PHP-Code:

<?php
    
while ($datensatz mysql_fetch_array$abfrageergebnis ))
    {
    echo 
'<table border="1">';
    echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
    echo 
'<tr>';
    echo 
'<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="1"></td>';
    echo 
'<td style="width:155px">' $datensatz['id'] . '</td>';
    echo 
'<td style="width:80px">' $datensatz['fahrzeug'] . '</td>';
    echo 
'</tr>';
    echo 
'</table>';
    }
    
?>

HTML-Code:

<table>
    <tr>
    <td><input type="submit" name="submit" value="Update"></td>
    </tr>
    </table>

Er bringt mir jetzt wenn ich den Haken im Checkbutton setze und auf meinen Submit-Button klicke

Undefined index: id was ich aber nicht verstehe denn die ID meines Datensatzes wird angezeigt und mit GET hole ich mir diesen doch aus meinem Datensatz um in mit WHERE zu vergelichen!?

urvater 20.03.2012 11:55:38

AW: Checkbox in BD-Tabelle schreiben
 
Zum Einen schreibst du trotz Hinweis immer noch $_SERVER['PHP_SELF'].

Zum Anderen können wir nicht erkennen, wie $abfrageergebnis aussieht bzw. ob per $_GET überhaupt eine "id" mit übergeben wird.

vt1816 20.03.2012 11:57:20

AW: Checkbox in BD-Tabelle schreiben
 
Macht es Dir viel Mühe den Code komplett zu posten, die Unterteilung in PHP und HTML usw. ist nicht zielführend.

syntax 20.03.2012 12:12:05

AW: Checkbox in DB-Tabelle schreiben
 
Hier der ganz Code:
PHP-Code:

<?php
include("../php/connect.php");
?>

HTML-Code:

<!DOCTYPE html>

<html lang="de">

 <head>
        <title></title>
 </head>
<body>
    <div id="user_info">
      Benutzer: <?php echo $_SESSION["vorname"]; ?> <?php echo $_SESSION["nachname"]; ?>
    </div>
    <div class="site_txt">
    <strong>Arbeitszeiten</strong><br>
    <br>

PHP-Code:

    <?PHP
    $userid 
$_SESSION["user_id"];

    
// Anfrage zusammenstellen um die Datensaetze auszulesen
    
$sql "SELECT id, status, auto FROM fahrzeug";

        
// Anfrage an die DB schicken und die Rueckmeldung in eine Variable ablegen
    
$abfrageergebnis mysql_query$sql ) or trigger_error(mysql_error(),E_USER_ERROR);

    
// Checkboxabfrage für Buchungsfeld

     
if (isset($_REQUEST['checkbtn'])) {
         foreach (
$_REQUEST['checkbtn'] as $nonvalue => $value) {
          
mysql_query ("UPDATE fahrzeug SET status='$value' WHERE id='".$_GET['id']."'") OR die(mysql_error());
          }
        };


    
// Ermitteln wie viele Datensaetzen gefunden wurden
    
$anzahl mysql_num_rows$abfrageergebnis );

    echo 
"<p>Es wurden <strong>" .$anzahl"</strong> Einträge gefunden!</p>";

    
?>

HTML-Code:

        <table border="1">
    <tr><td style="width:70px"><b>Status</b></td><td style="width:15px"><b>ID</b></td><td style="width:65px"><b>Auto</b></td></tr>
    </table>

PHP-Code:

    <?php
        
// Ab hier werden die Datensaetze zeilenweise ausgeben
    
while ($datensatz mysql_fetch_array$abfrageergebnis ))
    {
    
// Tabelle erstellen fuer die Ausgabe
    
echo '<table border="1">';
    echo 
'<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
    echo 
'<tr>';
    echo 
'<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="1"></td>';
    echo 
'<td style="width:15px">' $datensatz['id'] . '</td>';
    echo 
'<td style="width:155px">' $datensatz['auto'] . '</td>';
    echo 
'</tr>';
    echo 
'</table>';
    }
    
?>

HTML-Code:

    <table>
    <tr>
    <td><input type="submit" name="submit" value="Update"></td>
    </tr>
    </table>
  <br>
  </div>
  <div class="site_base"></div>
</div>
</body>
</html>


urvater 20.03.2012 13:23:27

AW: Checkbox in BD-Tabelle schreiben
 
Ich würd mir an deiner Stelle vorerst einmal Gedanken um dein erzeugtes Formular machen.
Zum Einen wird es nicht beendet und zum Anderen erzeugst du mehrere Formularheader, wenn dein select mehrere Ergebnisse liefert.

Dein geposteter Code bringt den Fehler mit undefined index id, weil es die Variable $_GET['id'] einfach nicht gibt.
In Verbindung mit deinem SQL-Statement noch unschöner.

Nun steht immernoch im Raum, wie bekommst du den Zusammenhang zwischen deinem Update und dem gewünschten Fahrzeug.

Als mögliche Lösung biete ich dir einmal folgendes an
PHP-Code:

......
echo 
'<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="'.$datensatz['id'].'"></td>';
echo 
'<td style="width:15px">' $datensatz['id'] . '</td>';
echo 
'<td style="width:155px">' $datensatz['fahrzeug'] . '</td>';
....... 


vt1816 20.03.2012 13:56:23

AW: Checkbox in DB-Tabelle schreiben
 
Zitat:

Zitat von syntax (Beitrag 143121)
Hier der ganz Code:

Zitat:

Zitat von vt1816 (Beitrag 143120)
Macht es Dir viel Mühe den Code komplett zu posten, die Unterteilung in PHP und HTML usw. ist nicht zielführend.

Was war hieran nicht verständlich???



Wo kommen $_SESSION["vorname"] und $_SESSION["nachname"] her - vermisse session_start().

Wo wird die Fehleranzeige eingeschaltet?

Wozu erstellst Du für jeden gefundenen Eintrag eine eigene Tabelle im HTML?

Von dem nicht geschlossenen Formular wollen wir mal gar nicht reden.

Kann es sein, dass es Dir nach wie vor an den Grundlagen fehlt? Die Dr. zu Gutenberg-Methode (Copy & Paste) bringt Dich hier nicht weiter!
Setze Dich hin und mach die schlau. Literatur und Nachschlagewerke, die Du kennst / mit denen Du arbeitest:
  1. PHP Handbuch
  2. PHP Tutorial
  3. PHP FAQ
  4. PHP Kompendium
  5. MySQL Tutorial

syntax 20.03.2012 14:27:32

AW: Checkbox in BD-Tabelle schreiben
 
Vielen Danke erstmal für das finden der Fehler.

Hab das mit dem Formular und der Tabelle beseitigt.

PHP-Code:

<table border="1">
<form action="'.$_SERVER['PHP_SELF'].'" method="post">
<?php
    
while ($datensatz mysql_fetch_array$abfrageergebnis ))
    {
    echo 
'<tr>';
    echo 
'<td style="width:75px"><input type="checkbox" name="checkbtn[]" value="1"></td>';
    echo 
'<td style="width:15px">' $datensatz['id'] . '</td>';
    echo 
'<td style="width:155px">' $datensatz['auto'] . '</td>';
    echo 
'</tr>';
    }
    
?>
    </table>
    </form>

Das session_start() steht in meiner checkuser.php die wie die connect.php included wird.
Das hab ich vergessen mit rein zu kopieren, sorry.

Den zusammenhang zw. Update und dem gewünschten Fahrzeug stelle ich doch mit hilfe der ID her die in meiner SQL-Abfrage und meiner Ausgabe in der Tabelle steht.

Der Value Wert in meiner Checkbox soll doch in meine Tabelle eingetragen werden und nicht die ID.

urvater 20.03.2012 19:08:17

AW: Checkbox in BD-Tabelle schreiben
 
Wenn du das Formular so absendest, wie es momentan ist, wird lediglich die Checkbox (sofern angehakt) und der Submit-Button übermittelt. Somit steht dir nur der Value aus der Checkbox (1) und der Value vom Submit-Button zur Verfügung.

Relativ einfach zu überprüfen.
PHP-Code:

if (isset($_REQUEST['checkbtn'])) {
         foreach (
$_REQUEST['checkbtn'] as $nonvalue => $value) {
          
mysql_query ("UPDATE fahrzeug SET status='$value' WHERE id='".$_GET['id']."'") OR die(mysql_error());
          }
echo 
'<pre>';
print_r($_POST); #alternativ var_dump($_POST);
echo '</pre>'
        


Somit besteht nach dem Absenden des Formulars kein Zusammenhang mehr zwischen dem Fahrzeug, welches dem Update zugrunde liegen soll und der Checkbox.

Da du immernoch $_SERVER['PHP_SELF'] nutzt, solltest du mal dringend dich über diese Variable informieren. Es ist immer noch böse.

$_GET['id'], welches du ungeprüft (mysql injektion) in dein SQL Statemant nutzen willst existiert ebenfalls nicht. Somit ist diese Anweisung umsonst. Ausser, dass du einen Error erhälst.

Was dir aber komplett noch fehlt ist die Möglichkeit den Status des Fahrzeuges wieder auf 0 nzw. mittlerweile ja NULL zu setzen.

syntax 20.03.2012 22:50:02

AW: Checkbox in BD-Tabelle schreiben
 
Also ich steig langsam dahinter was gemeint ist.

Das mit dem $_SERVER['PHP_SELF'] hab ich ersetzt durch $_SERVER['SCRIPT_NAME']

Danke für den Tipp, wieder was gelernt.

Habs auch jetzt so hinbekommen das es mit einem einzelnen Datensatz funktioniert.
Ich kann das mit der ID prüfen nicht ganz nachvollziehen.

Meinst du das in etwa so:

PHP-Code:

 if(!isset($_GET['id']) OR !is_numeric($_GET['id'])) 


urvater 21.03.2012 09:32:28

AW: Checkbox in BD-Tabelle schreiben
 
HTML-Code:

<form action="'.$_SERVER['SCRIPT_NAME'].'" method="post">
Dein Formular verweist auf sich selbst. Im Browser erscheint also sowas wie

www.meine.de/hier.php

Wenn du dich jetzt mit der vordefinierten Variable $_GET beschäftigt hättest, dann wüstest du, dass nach dem Absenden des Formulares niemals irgend ein Get-Wert vorhanden sein wird.

Dein Formular sendest du per POST. Ist auch ok, würde ich auch so machen.
Eine Möglichkeit, wie du deine ID übermitteln könntest, hatte ich die auch schon als Tip weiter oben geschrieben. Allerdings hast du diesen Teil ignoriert.

Kopie/Paste Lösungen wirst du hier im Forum eher selten bekommen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:54:49 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.