php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.01.2012, 11:38  
Neuer Benutzer
 
Registriert seit: 10.01.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
hippo137 befindet sich auf einem aufstrebenden Ast
Standard Formularproblem mit Checkboxen

Hallo zusammen, da ich seit gestern an einem Problem knobele und damit nicht weiterkomme, hab ich mich hier angemeldet, in der Hoffnung, das mir hier jemand vielleicht das Brett vorm Kopf wegnimmt,

Kurz, worum es mir geht. Ich hat eine MYSQL-Datenbank mit Bildinformationen, aus der ich gerne in zwei Schritten bestimmte Datensätze herausfiltern möchte...

Schritt eins ist mittels eines HMTL-Formulars eine erste Vorauswahl zu treffen nach den Kriterien Aufnahmeort und Aufnahmezeitraum, das hab ich auch hinbekommen.

Das ist das Ergebnis von Schritt eins, ausgegeben wird die bildnr und jeweils davor eine checkbox gesetzt, womit ich die weitere Auswahl treffen und die dann per Formular weitergeben möchte.

<form action='tierbilder1.php' method ='post'>
<?php
$ergebnis=mysql_query($anfrage) or die ("Fehlermeldung=".mysql_error());
echo "<p>Gefundene Tiere: ";
echo mysql_num_rows($ergebnis)."</p>";

echo "</p>";
echo"<table border='1' width='90 %'>";
echo "<th>Auswählen</th><th>Tiernr.</th>";
for ($i=0;$i<mysql_num_fields($ergebnis);$i++) ;
while ($row=mysql_fetch_assoc($ergebnis))
{ echo "<tr align='center'>";
echo '<td><input type="checkbox" name="bildauswahl" value='.$row['bildnr'].'></input></td>';
echo '<td><input type="text" name="bildnr" value='.$row['bildnr'].'></input></td><tr>';}
echo '<tr><td><input type="submit" value="Abfrage"></input></td>';
echo '<td><input type="reset"
value="Zur&uuml;cksetzen"></input><td></tr>';
</table>
?>
</form>

Bis hierher funktioniert das so wie gedacht.

Das ist der Textauszug von tierbilder1.php.

<?php

$anfrage="SELECT DISTINCT b.bildnr FROM bilder b,
where b.bildnr = ('$_POST[bildauswahl]')
group by b.bildnr order by b.bildnr ";

$ergebnis=mysql_query($anfrage) or die ("Fehlermeldung=".mysql_error());

echo "<p>Gefundene Tiere: ";
echo mysql_num_rows($ergebnis)."</p>";

echo "</p>";
echo"<table border='1' width='90 %'>";
echo "<th>Auswählen</th><th>Tiernr.</th>";
for ($i=0;$i<mysql_num_fields($ergebnis);$i++) ;
while ($row=mysql_fetch_assoc($ergebnis))
{ echo "<tr align='center'>";
echo '<td>'.$row['bildnr'].'</td></tr>';}

echo "</tr>";
echo "</table>";

mysql_free_result($ergebnis); mysql_close();
?>

Leider erfolgt die Auswertung hier nicht wie erwünscht. Das Problem ist, das immer nur der Datensatz mit der höchsten Nummer als Ausgabe angezeigt wird, auch wenn ich vorher mehrere Checkboxen angeklickt hab, irgendwas scheint also mit dem Namen oder dem Value der Checkbox nicht zu stimmen. Der Name der Checkbox ist ja immer der gleiche, ich vermute, das es daran liegt, weiß aber nicht, wie ich den z. B. über eine Variable im oberen Script vergeben und im unteren Script abfragen kann, vielleicht würde dieses mein Problem lösen.

Ich würde mich freuen, wenn jemand eine Idee hätte, die das Problem löst...
hippo137 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.01.2012, 11:47  
Erfahrener Benutzer
 
Benutzerbild von Nullraff
 
Registriert seit: 27.10.2010
Beiträge: 183
PHP-Kenntnisse:
Fortgeschritten
Nullraff befindet sich auf einem aufstrebenden Ast
Standard

Bitte packe Quelltext in die dafür vorgesehenen FORM-TAGS.
Du musst die Übergabe der Checkbox als Array definineren, damit alle Felder berücksichtigt werden können.
PHP-Code:
echo '<td><input type="checkbox" name="bildauswahl[]" value='.$row['bildnr'].'></input></td>'
Schau dir dann mal dein $_POST-Array beim Start des Skriptes "tierbilder1.php" an.
__________________
Kaum macht man's richtig, schon geht's
Nullraff ist offline   Mit Zitat antworten
Alt 10.01.2012, 11:53  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

wichtig wäre noch, Checkboxen, die nicht angekreuzt sind, werden GAR NICHT übermittelt, von daher würde ich Nullraffs Array-Lösung dadurch ergänzen, dass du die Array-Key explizit vorgibst - dann lassen sich Lücken leichter erkennen

Wenn du keine Lücken haben willst, kannst du VOR jeder Checkbox ein hidden-Feld erstellen, dass das gleiche Name-Attribut hat, wie die Checkbox (jetzt MUSST du die Array-Schlüssel fest vorgeben). Aufgrund der Arbeitsweise von HTML.Formularen werden (in den Post-Daten) die Werte mit dem gleichen Namen immer überschrieben

Also zuerst das Hidden-Feld, ist dann die Checkbox nicht angekreuzt, bleibt das Hidden-Feld (bzw dessen Value-Eintrag) drin stehen. Ist die Checkbox angekreuzt, wird der Post-Eintrag mit dem Value der Checkbox überschrieben
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 10.01.2012, 15:13  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Dein Query geht aber mal ganz böse in die hose, denn:
Code:
SELECT DISTINCT b.bildnr FROM bilder b, 
where b.bildnr = ('$_POST[bildauswahl]') 
group by b.bildnr order by b.bildnr
Ist weit weg von dem wie es sein sollte.
Code:
SELECT bildnr FROM bilder
WHERE bildnr IN ( ".join(",", $selections)." )
GROUP BY bildnr ORDER BY bildnr
denn DISTINCT regelt nur das selects automatisch limitert werden die auf das ganze selection-set bezogen werden ( alle Felder des SELECTs ). Du gehst dann nochmal hin und gruppierst dann nach dem selben feld, das ist SK(otze)L *hust*

Überdenk dein Query, entweder du Gruppierst nach einem Feld, oder du DISTINCTest ein oder mehrere Felder die du SELECTen willst.

Meine Überarbeitung setzt voraus das du ein array $selections erzeugst aus den reinkommenen POST-Daten. Was in etwa so (einfach) geht:
PHP-Code:
if ( isset($_POST['bildauswahl']) ) {
   
$selections = array();
   if ( 
is_array($_POST['bildauswahl']) )
      foreach ( 
$_POST['bildauswahl'] as $bild $selections[] = (string)(int)$bild;

   
/* query after here */

Von SQL-Injection fang ich jetzt garnicht erst an
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 10.01.2012, 16:44  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von tr0y Beitrag anzeigen
Von SQL-Injection fang ich jetzt garnicht erst an
Jo, die C99 Tester wollen auch was zu tun haben.
  Mit Zitat antworten
Alt 11.01.2012, 02:37  
Neuer Benutzer
 
Registriert seit: 10.01.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
hippo137 befindet sich auf einem aufstrebenden Ast
Standard

Ups, da bin ich ja direkt unangenehm aufgefallen durch die Nichtverwendung der Code-Tags, , und das meine "Programmierkünste" für Experten zum Davonlaufen sind, ist mir klar, für mich ist das alles ein notwendiges Übel bzw. Mittel zum Zweck und ich bin froh, wenn ich das halbwegs zum Laufen bekomme, denn eigentlich möchte ich mich ja mit Flußpferden befassen und nicht mit Programmierung.

Vielen Dank für die Hilfe, einen Schritt bin ich damit schon mal weiter, aber leider noch nicht am Ziel

Nach Tierbilder.php werden jetzt die ausgewählten Daten übertragen, lag an den fehlenden eckigen Klammern im vorherigen Formular beim Checkbox-Name.

Jetzt komme ich aber bei der Abfrage nicht weiter
PHP-Code:
$anfrage "SELECT DISTINCT b.bildnr FROM bilder b
           where  b.bildnr = ('$_POST[bildauswahl]'); 
da müßte ich ja`in der where-Klausel die Werte des $_POST-Arrays angeben, aber so kommt gar nichts dabei heraus und was anderes fällt mir nicht ein bzw. hab einiges ausprobiert und im web gesucht, aber nichts klappte bzw gefunden...

Wäre froh, wenn Ihr mir noch mal helfen könntet...
hippo137 ist offline   Mit Zitat antworten
Alt 11.01.2012, 04:13  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Irgendwas an meinem Vor-Post nicht verstanden oder ganz ignoriert ... ?
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 11.01.2012, 11:48  
Neuer Benutzer
 
Registriert seit: 10.01.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
hippo137 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von tr0y Beitrag anzeigen
Irgendwas an meinem Vor-Post nicht verstanden oder ganz ignoriert ... ?
Natürlich nicht ignoriert, bin doch auf meine "Programmierkünste" eingegangen und für jede Hilfe dankbar...

Hab Deine Hilfestellung gestern auch ausprobiert, aber hab erst mal die geschweifte Klammer hinter dem Kommentar ignoriert, daher kam da nix bei rum,

Sicherheitshalber, damit wir nicht aneinander vorbei reden (ich weiß nicht, ob ich das sprachlich immer richtig darstelle), noch mal der Code

PHP-Code:
if ( isset($_POST['bildauswahl']) ) {
   
$selections = array();
   if ( 
is_array($_POST['bildauswahl']) )
      foreach ( 
$_POST['bildauswahl'] as $bild $selections[] = (string)(int)$bild;

$anfrage "SELECT bildnr FROM bilder
WHERE bildnr IN ( "
.join(","$selections)." )
GROUP BY bildnr ORDER BY bildnr "
;

$ergebnis=mysql_query($anfrage) or die ("Fehlermeldung=".mysql_error());
}; 
Problem ist jetzt, das im $selections-Array nicht die richtigen Werte angezeigt werden sondern immer null.

Das abgefragte Datenbankfeld ist allerdings auch nicht "int", sondern "varchar", weil sich die bildnr aus Buchstaben und Zahlen zusammensetzt. Hab ich oben in der foreach-Schleife einfach int durch varchar ersetzt, aber dann bekomme ich eine Fehlermeldung unexpected T_VARIABLE .

Wie bekomme ich das jetzt hin, das ins $selections-Array die richtigen Werte geschrieben werden?
hippo137 ist offline   Mit Zitat antworten
Alt 11.01.2012, 11:57  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

nee .. int durch varchar ersetzen bringt es nicht, denn PHP kennt zwar den Datentyp int, aber kein varchar - lass einfach sowohl (string) als auch (int) dort oben weg, foreach kommt von sich aus mit allem zurecht, der durchläuft einfach alle Elemente des Arrays - und in der gebauten Abfrage noch eine kleine Änderung

PHP-Code:
if ( isset($_POST['bildauswahl']) ) {
   
$selections = array();
   if ( 
is_array($_POST['bildauswahl']) )
      foreach ( 
$_POST['bildauswahl'] as $bild $selections[] = $bild;

$anfrage "SELECT bildnr FROM bilder
WHERE bildnr IN ( '"
.join("' , '"$selections)."' )
GROUP BY bildnr ORDER BY bildnr "
;

$ergebnis=mysql_query($anfrage) or die ("Fehlermeldung=".mysql_error());
}; 
- im Zweifel lass dir zwischen foreach und der $anfrage mal das Array $selections per var_dump ausgeben - und natürlich die erzeugte Abfrage
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

Geändert von eagle275 (11.01.2012 um 12:06 Uhr).
eagle275 ist offline   Mit Zitat antworten
Alt 11.01.2012, 21:52  
Neuer Benutzer
 
Registriert seit: 10.01.2012
Beiträge: 6
PHP-Kenntnisse:
Anfänger
hippo137 befindet sich auf einem aufstrebenden Ast
Standard

Perfekt, so funktioniert es,

Vielen Dank...
hippo137 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Formular Problem nicht zwingende Checkboxen dynamischer Sammel DB-Eintrag supervision PHP Einsteiger 4 28.07.2011 08:07
[Erledigt] Mehrere Checkboxen abhängig voneinander hstefan JavaScript, Ajax und mehr 5 23.03.2011 08:37
Checkboxen auswerten und weiterverarbeiten magicwin PHP Tipps 2010 16 05.08.2010 00:23
[Erledigt] checkboxen innerhalb einer while schleife Balmore PHP Tipps 2009 18 27.05.2009 10:11
Dynamische Checkboxen und MySQL-DB-Eintrag PiqueNique PHP-Fortgeschrittene 3 06.09.2008 11:36
[Erledigt] Max Anzahl Checkboxen Hu5eL JavaScript, Ajax und mehr 2 25.06.2008 15:37
Checkboxen und PHP errox PHP Tipps 2008 3 09.12.2007 21:23
Zustand der Checkboxen auslesen Pimbolie1979 PHP Tipps 2007 4 10.07.2007 20:39
Aktivieren einer Checkbox aktiviert viele andere Checkboxen buggybugga HTML, Usability und Barrierefreiheit 3 12.03.2007 16:23
checkboxen wizzardxx PHP Tipps 2005-2 7 16.10.2005 22:58
(inhalte) der checkboxen aus mysql auslessen PHP Tipps 2005-2 4 07.06.2005 14:02
Problem mit auslesen von Checkboxen PHP Tipps 2005 2 08.03.2005 20:10
Umfrage-Formular mit Checkboxen und MySQL PHP Tipps 2004-2 10 26.11.2004 18:20
$_POST und nicht geklickte Checkboxen PHP Tipps 2004 5 29.09.2004 21:41
Checkboxen value übergeben ?? PHP Tipps 2004 15 15.08.2004 23:17


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:44 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum