Portal > Foren > PHP > PHP-Programmierung > PHP + SQLite: Kann Daten mysteriöserweise nicht verwerten + Problem "undefined offs
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 11.06.2007, 17:17 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 11.06.2007
Beiträge: 10
Standard PHP + SQLite: Kann Daten mysteriöserweise nicht verwerten + Problem "undefined offs

Ich habe da ein kleines Problem mit einem (selbstprogrammierten) PHP-Script.

Das Script ist eigentlich ganz simpel (und doch habe ich mehr als zweieinhalb Stunden gebraucht). Drei for schleifen, die Daten in einem Array speichern und eine, die das ganze dann ausgibt (Vielleicht hat hier jemand eine Idee, wie man das vereinfachen kann?). Das funktioniert allerdings nicht korrekt. Scheinbar wird nach dem 3. Durchlauf durch irgendwas gestoppt.

Ausserdem habe ich nervige Notices weil ich angeblich einen 11. Offset anspreche. Wo liegt das? Klar, ich könnte einfach die error_reporting Stufe runterstellen, aber das ist ja nicht der Zweck meiner "kleinen" Übung.

Hier das Script, die Datenbank ist im Anhang und mit SQLite 2 erzeugt worden. Die echos in den for-Schleifen sind zu Debugzwecken: Intressanterweise klappt es hier auch.

PHP-Code:
<?php
 error_reporting
(E_ALL);

 if(
$database sqlite_open("part.db"0444$error))
 {
  
$query sqlite_array_query($database"SELECT * from sda"); // structure sda: Partition Number | OS | use

  
if($number array_chunk($querycount($query), true)) { // structure sda: 0 | table | element
   
$tmparray = array(array());

   for(
$runid 0$stepid $number[0][$runid][0]; $runid++) {
    
$tmparray[0][] = $stepid;
    echo 
$stepid."<br>";
   }
   for(
$runos 0$stepos $number[0][$runos][1]; $runos++) {
    
$tmparray[1][] = $stepos;
    echo 
$stepos."<br>";
   }
   for(
$runuse 0$stepuse $number[0][$runuse][2]; $runuse++) {
    
$tmparray[2][] = $stepuse;
    echo 
$stepuse."<br>";
   }

   echo 
"<table border='1'>";
   echo 
"<tr><th>ID</th><th>OS</th><th>Verwendung</th></tr>";
   for(
$rundisplay 0$rundisplay count($tmparray); $rundisplay++) {
    echo 
"<tr><td>".$tmparray[0][$rundisplay]."</td><td>".$tmparray[1][$rundisplay]."</td><td>".$tmparray[2][$rundisplay]."</td></tr>";
   }
  }
 }
 else
 {
  echo 
"ERROR";
  die(
$error);
 }
?>
Vielen Dank
Fabio
Angehängte Dateien
Dateityp: zip database.zip (612 Bytes, 1x aufgerufen)

Geändert von Fabio (11.06.2007 um 17:32 Uhr)
Fabio ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:26 Nach oben    #2
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Du hast in allen drei for-Schleifen einen kapitalen Fehler, denn du weist einen Wert zu, anstatt dass du ihn vergleichst. Du nutzt also = statt ==

Dann noch ne kleine Anmerkung für bessere Lesbarkeit im Quellcode:
Sogenanntes CamelCase nutzen. Sprich aus $rundisplay wird $runDisplay. Das liest sich gerade bei längeren Variablennamen deutlich leichter.
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009

Geändert von WarrenFaith (11.06.2007 um 17:30 Uhr)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:29 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Du hast in allen drei for-Schleifen einen kapitalen Fehler, denn du weist einen Wert zu, anstatt dass du ihn vergleichst. Du nutzt also = statt ==
Bisschen durcheinander?

Er will doch gar nichts vergleichen, er will doch zuweisen!
Wobei das $number = array_chunk(..) nicht ganz sauber ist.

Hab mir den Code jetzt aber nicht genauer angeschaut, gerade nicht den Kopf dafür
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:31 Nach oben    #4
Neuer Benutzer
 
Registriert seit: 11.06.2007
Beiträge: 10
Standard

Meine Überlegung war, dass die Schleife ausgeführt wird, solange das noch funktioniert und das auch gleich noch ausführen. Aber irgendwie muss man das verhindern können.

In welcher Weise "nicht ganz sauber"? Mir ist schlichtweg keine andere Methode eingefallen. Was gäbe es dann da?
Fabio ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:32 Nach oben    #5
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Du hast in allen drei for-Schleifen einen kapitalen Fehler, denn du weist einen Wert zu, anstatt dass du ihn vergleichst. Du nutzt also = statt ==
Bisschen durcheinander?
Dito?!
Ich meine nicht innerhalb der for-Schleife sondern im for-Schleifenkopf.

for(Wertzuweisung für Start; Vergleich bis wann die Schleife gilt; Was machen nach Schleifendurchlauf)
Er macht an 2. Stelle aber eine Wertzuweisung.

*update*
deutlicher und richtig:

for($runos = 0; $stepos == $number[0][$runos][1]; $runos++) {
$tmparray[1][] = $stepos;
echo $stepos."<br>";
}

(ohne php-tags, da sonst das fette hervorheben nicht geht)
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009

Geändert von WarrenFaith (11.06.2007 um 17:36 Uhr)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:33 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Genau. Ich habs mal wieder verbockt ..
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:36 Nach oben    #7
Neuer Benutzer
 
Registriert seit: 11.06.2007
Beiträge: 10
Standard

Wie schon gesagt, meine Überlegung war, dass die Schleife ausgeführt wird, solange das noch funktioniert und dass das auch gleich ausgeführt wird.

Gibt es so etwas wie "As_long_this_works_errorless()" oder so? Ansonsten müsste ich mein Programm nochmal komplett neu schreiben

Edit: Ich werde mal deine Variante ausprobieren und neu verwerten.

Edit 2: Scheinbar wird mit deiner Variante gar nichts zurückgegeben. Absoulut keine Ausgabe mehr.

Geändert von Fabio (11.06.2007 um 17:42 Uhr)
Fabio ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:37 Nach oben    #8
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Ich muss ganz ehrlich sagen, dass ich kaum nachvollziehen kann was dein Programm eigentlich machen soll?!
Versuch mir das bitte nochmal zu erklären. Also welche Daten sind in der Tabelle, was soll am ende rauskommen?
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:45 Nach oben    #9
Neuer Benutzer
 
Registriert seit: 11.06.2007
Beiträge: 10
Standard

Am Ende sollte eine HTML Tabelle ausgegeben werden, die so aussieht:

|Partitionsid|System, dass die Partition verwendet|Wie wird es verwendet|
|1|Ubuntu|/boot|

usw.

Das könnte man auch einfach mit einer Query lösen und auf dem Terminal ausgeben, aber dann ist es ja keine PHP-Übung mehr.

Struktur der Datenbank:
sda(nr integer, system varchar(20), use varchar(20)) (Eine Nummer als Integer, das System als Varchar und die Verwendung als varchar)

Inhalt der DB:
1|Ubuntu|/boot
2|All Linux|SWAP
3|All Linux|/home
5|Ubuntu|/tmp
6|Ubuntu|/
7|Gentoo|/
8|Fedora|/
9|All Linux|DiskIMG Parallels
10|All Linux|Games
11|CentOS|/
12|SuSE|/
Fabio ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 17:51 Nach oben    #10
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Zitat:
Zitat von Fabio Beitrag anzeigen
Gibt es so etwas wie "As_long_this_works_errorless()" oder so?
Eine while()-Schleife?
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 18:00 Nach oben    #11
Neuer Benutzer
 
Registriert seit: 11.06.2007
Beiträge: 10
Standard

Bringt auch nichts. Es muss wohl am array_chunk() liegen, da alle while versuche auch gescheitert sind.
Fabio ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 18:01 Nach oben    #12
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Ok verstehe.
Ich würde sagen, du gehst da definitiv zu kompliziert heran
PHP-Code:
<?php
  error_reporting
(E_ALL);
  
$database sqlite_open("part.db"0444$error);
  if(!
$database) {
    exit(
'Datenbankfehler!');
  }
  
$query sqlite_query("SELECT * from sda");
  while (
$ergebnis sqlite_fetch_array($query)) {
    echo 
$ergebnis[0] . "|" $ergebnis[1] . "|" $ergebnis[2] . "<br/>";
  }
?>
Das sollte dir die von dir genannte Liste ausgeben.
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 18:33 Nach oben    #13
Neuer Benutzer
 
Registriert seit: 11.06.2007
Beiträge: 10
Standard

Du hast dies wirklich ums vielfache einfacher gemacht.
Einfacher geht's nicht, dankeschön. Den Code hab ich verstanden und daraus gelernt, dass das KISS Prinzip in der Programmierung Fehler vermeidet.

Tatsächlich: Die Ausgabe stimmt auch. Noch ein wenig angepasst. Möchte jemand noch die Endgültige Version sehen?
Fabio ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 19:27 Nach oben    #14
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Ja hau rein, kann für andere nicht schaden

Sagst mir noch schnell was KISS ist? Dann hab ich auch was gelernt
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 19:31 Nach oben    #16
Neuer Benutzer
 
Registriert seit: 11.06.2007
Beiträge: 10
Standard

Es waren vor allem Fehler in den Funktionen für SQLite. Steht alles in den Kommentaren.

PHP-Code:
<?php
  error_reporting
(E_ALL);

  
$database sqlite_open("part.db"0444$error);
  if(!
$database) {
    exit(
'Datenbankfehler!');
  }
  
$query sqlite_query($database"SELECT * from sda"); // Fixed: $database als erster Parameter

  
echo "<table border='1'>\n";
  echo 
"<tr><th>ID</th><th>System</th><th>Verwendung</th></tr>\n"// Fixed: Tabelle eingefügt
  
while ($ergebnis sqlite_fetch_array($query3)) { // Fix
    
echo "<tr><td>" $ergebnis[0] . "</td><td>" $ergebnis[1] . "</td><td>" $ergebnis[2] . "</td></tr>\n"// Fixed: Tabelle (Beendet)
  
}
  echo 
"</table>";
?>
Und natürlich die HTML Tabelle eingefügt.

Geändert von Fabio (11.06.2007 um 19:56 Uhr)
Fabio ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 19:32 Nach oben    #17
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Zitat:
Den Code hab ich verstanden und daraus gelernt, dass das KISS Prinzip in der Programmierung Fehler vermeidet.
Nunja das stimmt voll und ganz, denn je weniger Codezeilen es gibt, desto weniger Fehler dürfte es haben.

Irgendwo hab ich mal gelesen, dass ein guter Programmierer auf 1000 Codezeilen 1 bis 3 Fehler macht...
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.06.2007, 19:36 Nach oben    #18
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Zitat:
Ergebnis_Typ spezifiziert, wie Sie das Ergebnis erhalten möchten. Der Standard-Wert ist SQLITE_BOTH. Damit werden die Spalten sowohl mit Ihrer Nummer als auch mit Ihrem Namen als Hashindex genutzt. SQLITE_ASSOC erzeugt ein Array, dass nur mit den Spaltennamen indiziert ist, SQLITE_NUM eine reine Indizierung mit den Spaltennummern.
Quelle: http://de3.php.net/sqlite_fetch_array
Demzufolge ist $sqlite_fetch_array($query, 3) falsch, denn damit gibst du nicht die Anzahl der Parameter an, sondern wie das Array gestaltet sein soll. Das solltest du beachten
__________________
I did it my way - Senseless-Blog
Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hardware-RAID-Lösung robo47 Plauderecke 29 26.12.2007 04:49
Java Applet soll Daten an ein PHP Script senden flanger Allgemeine Java-Programmierung 5 16.05.2007 16:52


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45