checkboxen in ausgel. Tabelle einbinden

Alles, was PHP betrifft, kann hier besprochen werden.

checkboxen in ausgel. Tabelle einbinden

Postby Supernora » 25. January 2005 14:16

Hi,
ich hab da mal folgendes Problem. Ich möchte aus meiner Datenbank Tabelleninhalte ausgeben. Das klappt soweit.
Weiter möchte ich nun, dass vor jeder ausgegebenen Zeile eine checkbox erscheint. Das klappt auch noch.
Beim Anklicken der checkboxen soll nun auf der nächsten Seite die angeklickten Zeilen in der Datenbank gelöscht (bzw. im nächsten Schritt bearbeitet) werden.
WIE GEHT DAS?
und wie kann ich auf der nächsten Seite mein Array check[] auslesen? Nutze auch Sessions. Hilft das dabei?


//Ausschnitt
.
.
.
while($datenbankname=mysql_fetch_row($ergebnis))
{
printf("<tr>");
printf("<td align=center><input type=\"checkbox\" name=\"check[]\" value=\"$datensatz[id]\"></td>");
foreach ($datenbankname as $element)
{
printf("<td align=center><code>&nbsp; %s &nbsp;</code></td>", $element);
}
printf("</tr>");
}
.
.
.

DANKESCHÖN!!!
Supernora
 
Posts: 4
Joined: 25. January 2005 13:58

Postby Jan H. Krüger » 25. January 2005 15:56

$check = $_POST["check"]; //Das Array holen.

//Laenge des Feldes ermitteln.
$laenge = sizeof($check);

//Das Feld durchlaufen von 0 bis zur Feldlaenge
for ($i = 0; $i < $laenge; $i++) {
echo $check[$i]; // Den Inhalt des Feldes an Position i ausgeben
}
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42

Postby S.Nora » 25. January 2005 20:49

n´abend,

also ich hab das mal ausprobiert (auf der nächsten Seite aufgerufen) aber bei mir wird nichts angezeigt.

Woran könnt es den liegen? Ne Idee?
S.Nora
 
Posts: 12
Joined: 28. October 2004 12:38

Postby Jan H. Krüger » 25. January 2005 22:11

Nicht wirklich da die Informationen doch recht spärlich sind.

Wird das Array richtig übernommen?
Wird das Array überhaupt mit Daten gefüllt ?
Schonmal probiert dir die Feldgröße ausgeben zu lassen um zu sehen ob im Feld überhaupt Daten sind ?
Gibt es irgendwelche Fehlermeldungen ?
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42

Postby Stefan » 26. January 2005 20:44

Na wenn Du nicht beschreibst, wo das Problem liegt, kann Dir keiner helfen.
Um das mal abzukürzen, versuch es damit

checkbox1.php
Code: Select all
<form action="checkbox2.php" method="POST">
<?PHP
for($i=1; $i<=10;$i++)
  echo "<input type='checkbox' name='check[]' value='".$i."'> ID ". $i. "\n<br>"
?>
<input type="submit" value="ab dafür">
</form>


checkbox2.php
Code: Select all
<?PHP
$check = array();
$check = $_POST["check"]; //Das Array holen.

echo "<p>Ausgewählte IDs:</p>";

//Das Feld durchlaufen von 0 bis zur Feldlaenge
for ($i = 0; $i < count($check); $i++) {
  echo $check[$i].'<br>'; // Den Inhalt des Feldes an Position i ausgeben
}
?>


Eigentlich genau so wie Jan es vorgeschlagen hat. Funktioniert einwandfrei

ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby S.Nora » 26. January 2005 23:35

Hallo,

Besten Dank. Hat geklappt.
Son shit. Muss ich mich vorher wohl bei verzettelt haben.

Versuch das jetzt mal passend bei mir ins Programm einzubauen.
Schaun wir mal.....
S.Nora
 
Posts: 12
Joined: 28. October 2004 12:38

Postby Supernora » 02. February 2005 13:19

hi,
nachdem (dank Eurer Hilfe) das mit dem Zuweisen einer id zur jeweiligen checkbox funktioniert, habe ich das nächste Problem.
Ich klicke eine checkbox an, als nächstes den Button "löschen" und es wird der entsp. Eintrag gelöscht. Gut!
Jetzt habe ich die Funktion erweitert und wollte, wenn ich die checkbox ausgewählt habe den Button "ändern" anklicken. Dieser sollte mich dann auf die entsprechende Seite bringen (mit den Einträgen von check[]). Klappt aber nicht!

Jetzt stellt sich mir die Frage, wie verschachtel ich die <form> Felder. Geht das überhaupt? Gibt es eine andere Lösung?

Vielen Dank
--alles ein bisschen viel Text :? --

Code: Select all
<?php session_start(); ?>

// diese Zeile habe ich hinzugefügt
<form action="nutzer_aendern.php" method="POST">

<form action="nutzer_loeschen.php" method="POST">

<?php

//Verbindung zur Datenbank
include("nutzer_connect.php");

//Ausgabe der Datenbankinhalte
printf("<h2>Telefonbuch von %s </h2>",$nutzername);

$ergebnis = mysql_query("select * from nutzernummern where nutzername='$nutzername' ORDER BY nutzerkurzwahl ASC");

if($ergebnis == NULL)
   {
   printf("select * from nutzernummern: %s %s", mysql_errno(),mysql_error());
   exit();
   }

printf("<table border=0 cellpadding=0>");
printf("<tr bgcolor=\"#d0d0d0\">");
printf("<td><b></b></td>");
printf("<td align=center><b>ID</b></td>");
printf("<td align=center><b>Name</b></td>");
printf("<td align=center><b>Passwort</b></td>");
printf("<td align=center><b>Nummer</b></td>");
printf("<td align=center><b>KW</b></td>");
printf("</tr>");


while($datenbank=mysql_fetch_assoc($ergebnis))
   {
   printf("<tr bgcolor=\"#FFFFFF\">");
   printf("<td align=center><input type=\"checkbox\" name=\"check[]\" value=\"$datenbank[id]\"></td>");

   foreach ($datenbank as $element)
   {
   printf("<td align=center><code>&nbsp; %s &nbsp;</code></td>", $element);
   }
   printf("</tr>");
   }
   

printf("</table>");


//Buttondefinition
printf("<br>");
printf("<table border=0 cellpadding=0 cellspacing=0>");
printf("<tr>");
printf("<td>");
printf("<input type=\"submit\" value=\"löschen\"></form></td>");
printf("<td>");
printf("<input type=\"submit\" value=\"ändern\"></form></td>");
printf("<td><form action=\"nutzer_hinzufuegen.php\" method=\"post\">");
printf("<input type=\"submit\" name=\"\" value=\"hinzufügen\"></form></td>");
printf("<td><form action=\"nutzer_abbruch.php\" method=\"post\">");
printf("<input type=\"submit\"  value=\"abmelden\"></form></td>");
printf("</tr>");
printf("</table>");

?>
Supernora
 
Posts: 4
Joined: 25. January 2005 13:58

Postby Stefan » 02. February 2005 14:18

Nein, verschachtelte Formulare kommen nicht in Frage.
Du unterscheidest den Schalter, der gedrückt wurde.
Code: Select all
<?PHP
if(isset($_POST['schalter']['bearbeiten']))
{

  $check = array();
  $check = $_POST["check"]; //Das Array holen.

  echo "<p>Ausgewählte IDs zu bearbeiten:</p>";

  //Das Feld durchlaufen von 0 bis zur Feldlaenge
  for ($i = 0; $i < count($check); $i++)
    echo $check[$i].',&nbsp;'; // Den Inhalt des Feldes an Position i ausgeben
}

if(isset($_POST['schalter']['loeschen']))
{

  $check = array();
  $check = $_POST["check"]; //Das Array holen.

  echo "<p>Ausgewählte IDs zum löschen:</p>";

  //Das Feld durchlaufen von 0 bis zur Feldlaenge
  for ($i = 0; $i < count($check); $i++)
    echo $check[$i].',&nbsp;'; // Den Inhalt des Feldes an Position i ausgeben
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
  <title>Titel</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<p>&nbsp;</p>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
<?PHP
for($i=1; $i<=10;$i++)
  echo "<input type='checkbox' name='check[]' value='".$i."'> ID ". $i. "\n<br>"
?>
<input type="submit" name="schalter[bearbeiten]" value="bearbeiten">
<br>
<input type="submit" name="schalter[loeschen]" value="löschen">
</form>
</body>
</html>


Die Variable "$check" kannst Du auch vor der Fallunterscheidung mit den "$_POST[]" Werten füllen.
Aber Vorsicht, wenn z.B "$_POST[]" leer ist, darf es nicht weitergehen. Das soll verdeutlichen, daß die Kontrollstruktur und Überprüfung der Daten natürlich nicht fern bleiben dürfen.

Viel Erfolg
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby S.Nora » 03. February 2005 22:40

hi,

danke für die mega schnelle Antwort. Bin dabei das jetzt einzubauen, und stoße (mal wieder) auf nen Problem.
Das Erste:
Das mit dem checkbox und Löschen klappt. Das mit dem Bearbeiten auch, jedoch nur wenn ich auf der aktuellen Seite bleibe. Wie kann ich denn nachdem der Button "bearbeiten" ausgewählt wurde, direkt auf die bearbeiten-Seite, natürlich mit den übergebenen werten?

Das Zweite:
Hier im unten angegebenen Quelltext möchte ich die Tabelle vollständig auslesen, jedoch ohne das Feld "id".
Das Feld "id" brauche ich aber, um den checkboxen den "id" Wert zuzuweisen.
Gibt es eine andere Möglichkeit, gezielte Werte auszulesen? Ich galub die foreach Schleife ist da nicht ganz richtig. Aber wie?


Vielen, vielen Dank!



$ergebnis = mysql_query("select id, nutzername, nutzerpin, nutzernummer, nutzerkurzwahl from nutzernummern where nutzername='$nutzername' ORDER BY nutzerkurzwahl ASC");

if($ergebnis == NULL)
{
printf("select * from nutzernummern: %s %s", mysql_errno(),mysql_error());
exit();
}


printf("<table border=0 cellpadding=0>");

printf("<tr bgcolor=\"#d0d0d0\">");
printf("<td><b>Feld</b></td>");
printf("<td align=center><b>Name</b></td>");
printf("<td align=center><b>Passwort</b></td>");
printf("<td align=center><b>Nummer</b></td>");
printf("<td align=center><b>KW</b></td>");
printf("</tr>");



while($datenbank=mysql_fetch_assoc($ergebnis))
{
printf("<tr bgcolor=\"#FFFFFF\">");
printf("<td align=center><input type=\"checkbox\" name=\"check[]\" value=\"$datenbank[id]\"></td>");



foreach ($datenbank as $element)
{
printf("<td align=center><code>&nbsp; %s &nbsp;</code></td>", $element);
}
printf("</tr>");
}
S.Nora
 
Posts: 12
Joined: 28. October 2004 12:38

Postby Stefan » 07. February 2005 14:24

Noch aktuell?
Ich bin bei weitem kein PHPguru und kann Dir deshalb nur beschreiben wie ich solche Fälle handhabe.
Die Formulardaten werden wie in dem Beispiel an die eigene Datei gesendet. im Kopf findet nun die Validierung statt. Sind die Daten Ok, dann speichere sie in der Sitzungsdatei(Session) und weiter gehts zum Formular um die Dateien zu bearbeiten.
Oder binde ein anderes Formular ein.

Code: Select all
if(isset($_POST['schalter']['bearbeiten']))
{
  $checkbox = array();
  $checkbox = $_POST["check"]; //Das Array holen.
 
  // Kontrollvariable setzen
     $gültig = true;

  // Validierung. Hier am besten mit einer Schleife
     
     if($checkbox[0] != 'wie gewünscht')
        $gültig = false;
 
   // Wenn Ok, speichere und ab zum Bearbeitenformular
     
     if(gültig == true)
     {
        $_SESSION['meine_gueltigen_IDs'] = $checkbox;
         header("location:http://".$_SERVER['SERVER_NAME']."/bearbeiten_formular.php" );
        exit();
      }
}
Dort liest Du dann den Container/das Array wieder ein.

Zu zweitens:
Ist Dein Problem, daß Du "Array" als Augabe bekommst?
Mach mal ein "<pre>print_r($datenbank)</pre>, dann verstehst Du weshalb das so ist.
Code: Select all
foreach ($datenbank as $element)
printf("<code>&nbsp; %s &nbsp;</code>", $element['name']);
Du mußt schon das "Fach" in $element angeben, woraus gelesen werden soll. Hier "name".

hoffe es hilf Dir und falls Du mittlerweile schon eine eigene/andere Lösung gefunden hast, darfst Du es auch gerne posten.

caio, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby S.Nora » 08. February 2005 14:46

ja, is noch aktuell :o)

hab heute versucht das so in meine Seiten einzubauen. Ich schaffs aber nicht...
Bei dem Problem, dass Array mit auf die nächste Seite zu übergeben, steht in $check aber nichts drin.


ich reiche mal den Quellcode mit ein:

Code: Select all
<?php session_start(); ?>

<?PHP

if(isset($_POST['button']['bearbeiten']))
{
  $check = array();
  $check = $_POST["check"]; //Das Array holen.
 
  //Kontrollvariable setzen
  $gültig = true;
 
  //die Überprüfung kommt auf der nächsten Seite
     
     if($gültig == true)
     {
        $_SESSION['check'] = "$check";
   
// die Zeile hab ich auch geändert, da das andere nicht (bei mir?) funktionierte
header("location:http://localhost/xampp/nutzer_aendern.php" );
        exit();
      }
}


dann jetzt der Quellcode von der Seite die aufgerufen wird:

Code: Select all
<!--Aufruf der Session-->
<?php session_start(); ?>

<?php

//Verbindung zur Datenbank
include("nutzer_connect.php");

$check = array();
$check = $_POST["check"]; //Das Array holen.

//Das Feld durchlaufen von 0 bis zur Feldlaenge
for ($i = 0; $i < count($check); $i++)

// Den Inhalt des Feldes an Position i ausgeben
echo $check[$i].',&nbsp;';


function eingabe_wiederholen($fehlermeldung)
{
printf("%s<br>", $fehlermeldung);
printf("<form action=\"nutzer_daten_1.php\" method=\"post\">");
printf("</form>");
}


if ($check==NULL)
{
eingabe_wiederholen("<br><br><br>select a box!");
printf("<form action=\"nutzer_daten_1.php\" method=\"post\"><input type=\"submit\" value=\"back\">");
printf("<br>");
printf("<br>");
exit ();
}


//Das Feld durchlaufen von 0 bis zur Feldlaenge
for ($i = 0; $i < count($check); $i++)
{
// Den Inhalt des Feldes an Position i ausgeben 
Printf("entry $check[$i] was deleted<br><br>");
}

?>



hm...
möchte "einfach" nur das es funktioniert. Wo hab ich denn den (die) Fehler?
S.Nora
 
Posts: 12
Joined: 28. October 2004 12:38

Postby Stefan » 08. February 2005 20:05

Helau!

Ich hab mir das druchgelesen, es fällt mir auch was ein, doch hab ich bereits 2Promille und meine Kumples warten allle auf mich(3m Luftlinie).
Ich werde Dir lieber morgen antworten. Ok, als erstes fällt mir auf, das Du natürlich auf der Folgeseite das Array $_SESSION['check'] auslesen mußt und nicht $_POST, das gibt es nicht mehr auf der Seite..... oh gott, wir lesen uns morgen.....ciao!
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby Stefan » 09. February 2005 21:13

Mahlzeit,

steht in $check aber nichts drin.
Wäre Schlimm wenn was drin stehen würde. "$_POST[]" gibt es hier nicht. Eigentlich eine Notiz wert, verwende mal auf jeder Seite, oder in der Seite die in alle Dateien inkludiert wird folgende Zeile:
Code: Select all
<?php error_reporting(E_ALL); ?>
Bei dem Problem, dass Array mit auf die nächste Seite zu übergeben,
In dem blauen Beitrag gestern, steht schon die Lösung. Du speicherst die Daten nach dem absenden in der Sitzungsdatei(Session).
Code: Select all
$_SESSION['check'] = "$check";
Darin sind sie nun, begrenzt, Seitenübergreifend vorhanden, da physikalisch auf der Platte eingebrannt. Abrufen kannst Du die Daten von welcher Seite auch immer mit
Code: Select all
<?php
session_start();

print_r($_SESSION['check']);

?>
Du kannst "$_SESSION['check']" wie ein beliebiges anderes Array verwenden.

Arrays und Arrayvariablen
http://php-faq.de/ch/ch-arrays.html

Soweit dazu, das war leicht.

Dein weiters Vorgehen macht mir allerdings mehr sorgen.

Variablen und Formulare
http://php-faq.de/ch/ch-webvariablen.html

Wie erkenne ich fehlerhafte/fehlende Eingaben?
http://php-faq.de/q/q-formular-verarbeitung.html

Die Validierung der Eingabe, hier die Auswahl eines Eintrages, sollte noch auf der Seite stattfinden, auf der die Auswahl zu finden ist.
Code: Select all
if(isset($_POST['button']['bearbeiten']))
{
  $check = array();
  $check = $_POST["check"]; //Das Array holen.
 
  //Kontrollvariable setzen
  $gültig = true;
 
    if(empty($check))
    {
        $gültig = false;
        $meldung = "bitte wählen Sie einen Eintrag aus";

    }     
     if($gültig == true)
     {
        $_SESSION['check'] = "$check";
   
header("location:http://localhost/xampp/nutzer_aendern.php" );
        exit();
      }
}

Auf der Auswahlseite kannst Du nun mit
Code: Select all
<?php
if (isset($meldung))
 echo $meldung;
?>
Die Meldung rauslassen. Das hat den Vorteil, das man auf der Seite bleibt, und nicht erst weiter und dann wieder zurück muß.


Falls noch interessant, hier ein Beispiel wie es aussehen muß um mehrere Einträge gleichzeitig zu ändern.
Code: Select all
<?php error_reporting(E_ALL); ?>
<html>
<head>
   <meta http-equiv="Content-Language" content="de" />
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <title>Titel</title>
</head>

<body>
<pre>
   <?php
      if(isset($_POST['schalter']['aendern']))
         print_r($_POST['user']);
   ?>
</pre>

<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<p>
<label for="scheibe">Scheibe:   </label><input type="text" name="user[0][scheibe]" id="scheibe" />
<br>
<label for="band"   >Band:      </label><input type="text" name="user[0][band]"       id="band" />
</p>

<p>
<label for="scheibe">Scheibe:   </label><input type="text" name="user[1][scheibe]" id="scheibe" />
<br>
<label for="band"   >Band:      </label><input type="text" name="user[1][band]"       id="band" />
</p>


<p>
<label for="scheibe">Scheibe:   </label><input type="text" name="user[2][scheibe]" id="scheibe" />
<br>
<label for="band"   >Band:      </label><input type="text" name="user[2][band]"       id="band" />
</p>

<input type="submit" name="schalter[aendern]" value="Einträge ändern">

</form>

</body>
</html>


hoffe es hilft
ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby S.Nora » 10. February 2005 14:32

hi,

evtl. merkt man, dass php & co nicht gerade mein Steckenpferd ist :?
deswegen schon mal besten dank, Stefan, für deine Geduld!!!!!!!

jenenfalls klappt es bei mir noch nicht mit der Übergabe des Parameters $check. Wenn ich diesen Parameter auf der folgenden Seite auslesen will, wird immer nur Array angezeigt. Auch mit count($check),current($check) oder mit "...Du mußt schon das "Fach" in $element angeben, woraus gelesen werden soll. Hier "name..." bin ich nicht weiter gekommen.

bin ein wenig verzweifelt.
S.Nora
 
Posts: 12
Joined: 28. October 2004 12:38

Postby Stefan » 10. February 2005 19:39

Hey, ich bin ein ads befallener, bei mir gibt es sowas wie Geduld nicht, jedes Posting ist so gut wie neu für mich :-)
Deshalb wird nicht aufgehört. Never surrender!

Komm schon, die Daten die Du Dir so sehnlich herbei wünschst, liegen wie ein weites, nach Ernte flehendes Feld vor Dir.

Wir leben in Zeiten von "register_globals off" vergiss
Code: Select all
count($check)


versuchs mal mit
Code: Select all
echo "<pre>";
print_r($_SESSION[$check])
echo "</pre>";


Immerhin, wenn Du Dich erinnern kannst, hast Du es doch selbst da reingepackt.
Code: Select all
if($gültig == true)
{
  $_SESSION['check'] = "$check";                                       //  <-  HIER
  header("location:http://localhost/xampp/nutzer_aendern.php" );
  exit();
}



Bitte, schmöckere in

http://php-faq.de/
http://www.php.net/
http://www.php.net/manual/de/
bietet zudem herrliche shortcuts
(http://php.net/[Funktionsname] leitet Dich in der Dokumentation gleich an die richtige Stelle.)
http://dev.mysql.com/doc/mysql/de/index.html
http://groups.google.de/groups?hl=de&lr ... g.php.misc
http://groups.google.de/groups?hl=de&lr ... atenbanken
http://groups.google.de/groups?hl=de&lr ... protokolle

Natürlich sollte auch das Kleid passend sein("Fehlermeldung<br><br>" ist bestenfalls Bullshit, aber kein HTML)

http://www.w3.org/
http://validator.w3.org/
http://jigsaw.w3.org/css-validator/validator-text.html
http://groups.google.de/groups?hl=de&lr ... oring.misc
http://de.selfhtml.org/navigation/html.htm

Schmöckere und lerne, zwar kann ich Deinen Anspruch("ich will einfach nur das es geht") verstehen, doch bekomme ich fürchterliche Kopfschmerzen, wenn daran denke, auf wie vielen Server ganau solche "scripte", mit genau diesem Anspruch verbaut sind.
Behalte es für Dich, als Übungsprojekt.

viel Erfolg
ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz


Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests