Datenstäze aus einer CSV-Datei ausgeben

  • Themenstarter Themenstarter D@nger
  • Beginndatum Beginndatum
D

D@nger

Hallo,
warum funktioniert denn folgender Code nicht?

PHP:
<?php

  $ausgeben = $_GET['ausgeben']; //Inhalt der Checkboxen
     

  $row = 1;                                      
  $handle = fopen ("datei.csv","r");       
       
       $i=0;   
       

       
    
  while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE  AND isset($ausgeben[$i])) 
    {      
    $ausgeben[$i]-=1;                                 
    $num = count ($data);                                                             
    
    $row++;                                       
    
    echo "<table><tr>";  
                                               
    
      
      print $row-1 . "  " . $data[2] . "<br>\n";            // des Arrays auszugeben
      $i=$i+1;
      

    echo "</table></tr>";
    $i+=1;
   
    }
  fclose ($handle);
  

?>

Es wird leider nur ein Datensatz ausgegeben. Kann da mal jemand drüberschauen? Danke schon mal.
 
Hallo,

du setzt vor der While-Schleife $i auf 0 und subtrahierst in der Schleife $i=$i-1.
D.h. beim 2. Schleifendurchlauf ist $i=-1 und die Bedingung isset($ausgeben[$i]) ist nicht mehr gegeben.
Ändere
$ausgeben[$i]-=1;
in
$ausgeben[$i]+=1;

Gruß, Loocie
 
Hallo, danke schon mal, aber bei folgendem Code ist es immer noch das gleiche:
PHP:
<?php

  $ausgeben = $_GET['ausgeben']; //Inhalt der Checkboxen
     

  $row = 1;                                      
  $handle = fopen ("datei.csv","r");       
       
       $i=0;   
       

       
    
  while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE  AND isset($ausgeben[$i])) 
    {      
    $ausgeben[$i]+=1;                                 
    $num = count ($data);                                                             
    
    $row++;                                       
    
    echo "<table><tr>";  
                                               
    
      
      print $row-1 . "  " . $data[2] . "<br>\n";            // des Arrays auszugeben
      $i=$i+1;
      

    echo "</table></tr>";
    $i+=1;
   
    }
  fclose ($handle);



?>

Bei diesem Code:
PHP:
<?php

  $ausgeben = $_GET['ausgeben']; //Inhalt der Checkboxen
     

  $row = 1;                                      
  $handle = fopen ("datei.csv","r");       
       
       $i=0;   
       

       
    
  while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE  AND isset($ausgeben[$i])) 
    {      
    $ausgeben[$i]+=1;                                 
    $num = count ($data);                                                             
    
    $row++;                                       
    
    echo "<table><tr>";  
                                               
    
      
      print $row-1 . "  " . $data[2] . "<br>\n";            // des Arrays auszugeben
      $i=$i+1;
      

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

   
    }
  fclose ($handle);



?>

wird zwar die Anzahl der markierten Datensätze ausgegeben, allerdings die falschen.

Zum Vergleich mal der Code mit dem es funktioniert (imo allerdings nicht gerade elegant):
PHP:
<?php

  $ausgeben = $_GET['ausgeben']; //Inhalt der Checkboxen, z.b. 2, 4, 8, 21, 23, 56, 78
     


      $file = "datei.csv; 

	if($handle = fopen ($file , "r"))
	{
		$wert = substr(fread ($handle, (filesize ($file)-1)),1);//eins weniegr auslesen, damit " weg ist
		fclose ($handle);
	
   $wert=str_replace("\"","",$wert);

   $wert=str_replace("
",";",$wert);

   $wert=explode(";",$wert);//splitten
   
   $i=0;
	$anzahl=9;
	echo "<table>";
   		while(isset($ausgeben[$i])) 
		{
		$ausgeben[$i]-=1;
			echo "<tr>
						<td>".$wert[$anzahl*$ausgeben[$i]]."</td>
						<td>".$wert[$anzahl*$ausgeben[$i]+2]."</td>
						<td>".$wert[$anzahl*$ausgeben[$i]+3]."</td>
						<td>".$wert[$anzahl*$ausgeben[$i]+7]."</td>
					</tr>";	

		$i+=1;
		}
		echo "</table>";
	}
	

?>

Vielen Dank schon mal.
 
Ups, da habe ich etwas übersehen:

Du kannst per GET nur einen String übergeben, kein Array, d.h.
PHP:
$ausgeben = $_GET['ausgeben']; //Inhalt der Checkboxen
ist kein Array

In deiner While-Bedingung gehst du aber davon aus, dass es ein Array ist:
PHP:
while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE  AND isset($ausgeben[$i]))

Lass dir mal zur Probe mit
PHP:
echo var_dump($ausgeben);
die Variable ausgeben.

MfG, Loocie
 
Kommt nur "Array" und sonst nichts? Siehst du nicht den Inhalt des Arrays?
Dann ist dein Array leer. Wie füllst du denn das Array auf der vorigen Seite?

Gruß, Loocie
 
Ich fülle es mit diesem Code:
PHP:
<form action="access3.php">
<input type="hidden" name="sent" value="yes">
<input type=checkbox value=$id name=ausgeben[]>
<input type="submit" value="Drucken">
 
D@nger hat gesagt.:
Ich fülle es mit diesem Code:
PHP:
<form action="access3.php">
<input type="hidden" name="sent" value="yes">
<input type=checkbox value=$id name=ausgeben[]>
<input type="submit" value="Drucken">

Und da liegt der Fehler.
Mit dem von dir geposteten Quellcode, sendest du erstmal die Daten an die Seite access3.php. Und erst auf dieser Seite kannst du dann das Array füllen, nämlich mit den übergebenen Werten, in diesem Fall der Wert der Checkbox.

Gruß, Loocie
 
Ich habe es bisher immer so gemacht:

1. Dein Formular sollte ungefähr so aussehen:

PHP:
<form action="access3.php"> 
<input type="hidden" name="sent" value="yes"> 
<input type=checkbox name=$id1>
... 
<input type=checkbox name=$id10>
<input type="hidden" name="Checkboxeninhalt">
<input type="submit" value="Drucken" onClick="pruefeCheckboxen()">

Die JavaScript-Funktion pruefeCheckboxen sieht so aus:

PHP:
function pruefeCheckboxen(){
  var strCheckboxen ="";
  var i;
  for (i = 0; i < document.forms[0].length; i++){
    if ((document.forms[0].elements[i].type == "checkbox")&&(document.forms[0].elements[i].checked)){
      if (strCheckboxen != "")
        strCheckboxen = strCheckboxen + "-";
      strCheckboxen = strCheckboxen + document.forms[0].elements[i].name;
    }
  }	

  document.forms[0].Checkboxeninhalt.value = strCheckboxen;
  document.forms[0].submit();
  return false;
}

Zur Erklärung:
Wenn man auf den Button "Drucken" klickt, wird die JavaScript-Funktion aufgerufen.
Die Funktion baut nun, abhängig von den angeklickten Checkboxen, einen String zusammen, der den Namen der angeklickten Checkboxen enthält, getrennt durch ein Minuszeichen. Die Namen der Checkboxen müssen den Werten $id1...$id10 usw entsprechen, d.h. du hast dann einen String, wie z.B. 2-3-4-7 anhand dessen du weisst, dass die Boxen 2,3,4 und 7 asugewählt wurden. Wichtig: Im Namen einer Checkbox darf kein Minuszeichen vorkommen.
Der Befehl
PHP:
document.forms[0].Checkboxeninhalt.value = strCheckboxen;
gibt den String in das versteckte Feld "Checkboxeninhalt" und das musst du dann auf der nächsten Seite auslesen und per
PHP:
unset($Checkboxenarray);
if ($_POST['Checkboxeninhalt']!=""){
  $Checkboxenarray=explode("-",$_POST['Checkboxeninhalt']);
}
hast du dann ein Array mit den Werten 2,3,4 und 7, also den angeklickten Checkboxen.
Es ist vielleicht nicht die eleganteste Lösung, aber sie funktioniert.

MfG, Loocie
 
Zurück