PHP Per Checkboxen MSSQL Select steuern

Okay... also die Abfrage für alle Spalten funktioniert jetzt soweit, danke dafür erstmal *freu*

Nur, wenn ich bestimmte Spalten auswählen will, kommt folgende Fehlermeldung: Notice: Undefined index: alle in C:\xampplite\htdocs\test\dbabfrage_ergebnis.php on line 37

Die Ausgabe schaut dann wie folgt aus:



Der jetzt geänderte Quellcode:

PHP:
<?php
error_reporting( E_ALL );

include 'dbconnect.php';

if(isset($_POST['start'])) {
    $start = $_POST['start'];
} else {
    $start= '';
}

if(isset($_POST['ende'])) {
    $ende = $_POST['ende'];
} else {
    $ende= '';
}

if(isset($_POST['tester_filter'])) {
    $benutzer = $_POST['tester_filter'];
} else {
    $benutzer= '';
}

if(isset($_POST['dbinfo'])) {
    $dbinfo= $_POST['dbinfo'];
} else {
    $dbinfo= '';
}

$i=1;
while($i<count($dbinfo)){
  $query = "Exec_ID";
  $query.=",".$dbinfo[$i];
  $i++;
}

if($_POST['alle']){
  $sql = ("SELECT * FROM CFTEST WHERE Durchfuehrungsdatum BETWEEN '$start' AND '$ende' AND Benutzer = '$benutzer'; ");
}
else{
  $sql = ("SELECT '$query' FROM CFTEST WHERE Durchfuehrungsdatum BETWEEN '$start' AND '$ende' AND Benutzer = '$benutzer'; ");
}

$result=odbc_exec($odbc,$sql);

if (!$result){
  echo $sql;
  die;
}

$header = '';
$content = '';
$z = 0;

while($row = odbc_fetch_array($result)){
    if($z==0){
        $header .= "<tr><td>".implode("</td><td>", array_keys($row))."</td></tr>";
    }
        $content .= "<tr><td>".implode("</td><td>", $row)."</td></tr>";
    $z++;
}

if(!empty($content)){
    echo  "<table border=\"1\">".$header.$content."</table><hr>";
}
 
Was steht denn in Zeile 37?

Das $query steht bei Dir in Hochkommas. Damit wird nicht der Spalteninhalt angezeigt, sondern nur der Name selber.

Probier es mal so:
"SELECT ".$query." FROM CFTEST WHERE Durchfuehrungsdatum BETWEEN '".$start."' AND '".$ende."' AND Benutzer = '".$benutzer."'; "


PS:

statt
if($_POST['alle']){

dann mal

if(isset($_POST['alle'])){
 
Zuletzt bearbeitet:
Alles so umgesetzt, jetzige Fehlermeldung:




Benutzer wurde rauseditiert, wurde aber richtig übergeben. Es scheitert anscheinend an der $query die über die Selectboxen erzeugt wird...
 
PHP:
$i=1;
while($i<count($dbinfo)){
  $query = "Exec_ID";
  $query.=",".$dbinfo[$i];
  $i++;
}

Du musst sicherstellen, dass $query niemals leer ist, wenn er die SQL in diesem Zweig ausführt. Ansonsten evt. gar nicht erst ausführen, auch nicht das Folgescript.

Das query wird doch bei Dir sowieso immer vorbelegt, mit der Exec_ID
aber probier erstmal mal folgendes:

PHP:
$sql = '';

if(isset($_POST['alle'])){

  $sql = "SELECT * FROM CFTEST WHERE Durchfuehrungsdatum BETWEEN '".$start."' AND '".$ende."' AND Benutzer = '".$benutzer."'; ";

}
else{

	if(isset($_POST['dbinfo']) && is_array($_POST['dbinfo'])){
		
		$dbinfo= $_POST['dbinfo'];
		$query = "Exec_ID";
	 
		// da das array $dbinfo je nach Auswahl auch Index-Lücken haben kann, ist foreach sicherer, als for, while oder count	
		foreach($dbinfo as $key => $val){
			if(!empty($val)) $query .= ",".$val;
		} 

		$sql = "SELECT ".$query." FROM CFTEST WHERE Durchfuehrungsdatum BETWEEN '".$start."' AND '".$ende."' AND Benutzer = '".$benutzer."'; ";

	}
}
 
Zuletzt bearbeitet:
Mhh okay funktioniert soweit. Das einzige Problem was es jetzt noch gibt, ist, dass er nur die Spaltennamen anzeigt, aber nicht deren Inhalt. (Oben habe ich das sql Statement ausgeben lassen, Benutzer wieder retuschiert) Händisch funktioniert die Abfrage!

Screenshot:
 
Es kann nur am Syntax liegen
so müsste es richtig sein.

$sql = "SELECT ".$query." FROM CFTEST WHERE Durchfuehrungsdatum BETWEEN '".$start."' AND '".$ende."' AND Benutzer = '".$benutzer."'; ";

$query sprich die Spaltenamen dürfen in der endgültigen SQL Abfrage nicht in hochkommas stehen, sonst wird es von SQL als Text ausgewertet.

Was zeigt der Screenshot? Eine Ausgabe der SQL aus dem Script, oder Deine manuelle Eingabe?

Und dort stehen doch die Exec_ID Inhalte.
Vielleicht sind ja in der DB die anderen Spalten nicht mit Einträgen belegt ? Dann kommt natürlich nur ein Leerstring zurück.
 
Oben siehst du die Ausgabe von $sql.

Darunter die Tabelle die durch PHP und die Checkboxenauswahl generiert wird!

QUELLCODE:
PHP:
<html>
<head>
<title>Ergebnis der Datenbankabfrage</title>
</head>
<body>
<?php
error_reporting( E_ALL );

include 'dbconnect.php';

if(isset($_POST['start'])) {
    $start = $_POST['start'];
} else {
    $start= '';
}

if(isset($_POST['ende'])) {
    $ende = $_POST['ende'];
} else {
    $ende= '';
}

if(isset($_POST['tester_filter'])) {
    $benutzer = $_POST['tester_filter'];
} else {
    $benutzer= '';
}

if(isset($_POST['dbinfo'])) {
    $dbinfo= $_POST['dbinfo'];
} else {
    $dbinfo= '';
}

/*$i=1;
while($i<count($dbinfo)){
  $query = "Exec_ID";
  $query.=",".$dbinfo[$i];
  $i++;
}*/

$sql = '';

if(isset($_POST['alle'])){
  $sql = ("SELECT Testfall_Status, Durchfuehrungsdatum, Startzeitpunkt, Endzeitpunkt, Durchfuehrungsdauer, Szenario_ID, Testfall_Name, Zielsystem, SuB_Zielsystem, Mandant, Pruefname_1, Pruefwert_1, Pruefname_2, Pruefwert_2, Pruefname_3, Pruefwert_3, Pruefname_4, Pruefwert_4, Pruefname_5, Pruefwert_5, SMI, Bemerkung FROM CFTEST WHERE Durchfuehrungsdatum BETWEEN '$start' AND '$ende' AND Benutzer = '$benutzer'; ");
}

else{
    if(isset($_POST['dbinfo']) && is_array($_POST['dbinfo'])){
        
        $dbinfo= $_POST['dbinfo'];
        $query = "Exec_ID";
     
        // da das array $dbinfo je nach Auswahl auch Index-Lücken haben kann, ist foreach sicherer, als for, while oder count    
        foreach($dbinfo as $key => $val){
            if(!empty($val)) $query .= ",".$val;
        } 

        $sql = "SELECT ".$query." FROM CFTEST WHERE Durchfuehrungsdatum BETWEEN '".$start."' AND '".$ende."' AND Benutzer = '".$benutzer."'; ";

    }
}

$result=odbc_exec($odbc,$sql);

echo $sql;

if (!$result){
  echo $sql;
  die;
}

$header = '';
$content = '';
$z = 0;

while($row = odbc_fetch_array($result)){
    if($z==0){
        $header .= "<tr><td>".implode("</td><td>", array_keys($row))."</td></tr>";
    }
        $content .= "<tr><td>".implode("</td><td", $row)."</td></tr>";
    $z++;
}

if(!empty($content)){
    echo  "<table border=\"1\">".$header.$content."</table><hr>";
}
?>
</body>
</html>

Sollte doch so passen? Trotzdem sehe ich nicht die Daten aus der Spalte sondern nur den Titel!
 
was zeigt der var_dump?


while($row = odbc_fetch_array($result)){

var_dump($row);

if($z==0){

PS:

ach ich seh den Fehler
Da fehlt ein > hinterm td, somit wird es in html nicht angezeigt

$content .= "<tr><td>".implode("</td><td", $row)."</td></tr>";

ändern

$content .= "<tr><td>".implode("</td><td>", $row)."</td></tr>";
 
Zuletzt bearbeitet:
OMG ja auf das hätt ich auch selber drauf kommen können :o

Besten dank für deine Hilfe, nun funktioniert alles so wie ich das haben will :daumen:
 

Ähnliche Themen

Zurück
Oben