Problem bei automatischer Tabellenerstellung

BossBort

Grünschnabel
Moin Moin Leute :)

Ich bin grad dabei ein eigenes Newsscript zu schreiben. Funktioniert auch soweit.
Das ober genannte Problem tritt auch nur in manchen Situationen auf.
Ich benutze für mein Script eine MySQL Datenbank. In der Tabelle hab folgende Felder. id, titel, autor, datum, zeit.

Die spalte ist als Primärschlüsses definiert und mit auto_increment deklariert.

Mein Problem tritt nun beim Listen aller news in einer Übersicht auf. Wenn die ID's alle richtig vergeben sind, also z.B. 6 News mit den ID's 1-6, wird Tabelle vollständig richtig erstellt und einzelnen Daten aus Datensätzen eingetragen.

Lösche ich jetzt aber einen der Datensätze z.B. Den Datensatz mit der ID 3 dann tritt beim Aufbauen der Tabelle ein fehler auf. Die Ursache dafür ist mir durchaus bekannt.
Das Problem liegt darin das ich der Schleife sage das sie in jedem Schleifendurchlauf immer einen Tabellenzeile mit den Datenerstellt. Aber wenn nun z.B. Datensatz 3 nicht vervorhanden ist und nur noch Datensatz 1,2,4,5,6 er mir beim erstellen ab dem 3. Datensatz fehler ausspuckt.

Meine Frage lautet nun wie ich der Datenbank sagen kann das sie automatisch die Zuordnngden der ID's anpasst. Z.B. das im oben genannten Fann Datensatz 4 zu 3, 5 zu 4 und 6 zu 5 wird.
Ich hoffe das ihr mir bei meinem Problem helfen könnt oder andere Lösungsvorschläge für mich habt.

viele Grüße
 
Hi

als allererstes mal eine Gegenfrage:
Warum "kopierst" Du Daten aus einer Tabelle in eine neue Tabelle?
Grade bei einem Newssystem doch unnötig?

Wie ist denn deine Schleife aufgebaut?
Eine foreach, while, for? (bitte etwas Code)

Und was für ein Fehler wird "ausgespuckt"?

Gruß tyg3r
 
Als erstes Danke für dein antwort.
Nun Daten hole ich mich aus der MYSQL Tabelle und gebe sie dann in einer Tabelle in HTML aus.


Code:
   $anzahl = "SELECT * FROM news";       
    $ergebnis = mysql_query($anzahl);       //Zählen der Datensätze
    $anz = mysql_num_rows($ergebnis);


    /*$res = mysql_query("SELECT COUNT(id) as anzahl FROM news");
    $anzahl = mysql_result($res, 0, "anzahl");*/
    


  
    
    $i = 0;    //Daklarieren der Zählervariablen 'i'.
    $tabelle = "";
    $num = $anz;

    
//******************************************************************************    
    
      while ($i < $anz){
                        ;
                        $i = $i+1;
                        
                        
                        $abfrage = "SELECT * FROM news WHERE id=$num";
                        $ergebnis1 = mysql_query($abfrage);
                        
################################################################################  
            
                        while($row = mysql_fetch_object($ergebnis1))
                            {
                              
                              $inhalt = $row->inhalt;
                              $titel = $row->titel;
                              $autor = $row->autor;
                              $datum = $row->datum;
                              $zeit = $row->zeit;
                              $id = $row->id;
                            }
                            
//##############################################################################
                           
                        $tabelle_e =    "<tr>
                                            <td style=\"width: 150px; text-align: center;\"
                                                valign=\"undefined\">$id</td>
                                            <td style=\"width: 130px; text-align: center;\"
                                                valign=\"undefined\">$titel</td>
                                            <td style=\"width: 200px; text-align: center;\"
                                                valign=\"undefined\">$autor</td>
                                            <td style=\"width: 400px; text-align: center;\"
                                                valign=\"undefined\">$inhalt</td>
                                            <td style=\"width: 100px; text-align: center;\"
                                                valign=\"undefined\">$datum</td>
                                            <td style=\"width: 100px; text-align: center;\"
                                                valign=\"undefined\">$zeit Uhr</td>
                                        </tr>";
                                        
//##############################################################################                                        
                        
                        $tabelle = $tabelle.$tabelle_e;
                        $num = $num - 1;
                       };


im prinzip ist das der code in dem die tabelle in php automatisch erstellt wird.

und dieser fehler kommt :
###################################################################################
Notice: Undefined variable: id in E:\xampp\htdocs\Portal-NB\news\admin\listnews.php on line 59

Notice: Undefined variable: titel in E:\xampp\htdocs\Portal-NB\news\admin\listnews.php on line 61

Notice: Undefined variable: autor in E:\xampp\htdocs\Portal-NB\news\admin\listnews.php on line 63

Notice: Undefined variable: inhalt in E:\xampp\htdocs\Portal-NB\news\admin\listnews.php on line 65

Notice: Undefined variable: datum in E:\xampp\htdocs\Portal-NB\news\admin\listnews.php on line 67

Notice: Undefined variable: zeit in E:\xampp\htdocs\Portal-NB\news\admin\listnews.php on line 68
########################################################################################
 
Zuletzt bearbeitet:
Mache es dir doch net so schwer....

PHP:
$result =mysql_query($sql_query_string) or die('query fehlgeschlagen');
while(($datensatz=mysql_fetch_assoc($result))) {
$sql_query_string = "SELECT * FROM news WHERE titel LIKE '".$suchetitel."' ORDER BY id DESC";
$inhalt = $datensatz['inhalt']; // (kann auch weggelassen werden du kannst $datensatz['interpret'] gleich in die tabelle schreiben)
$titel = $datensatz['titel'];
$autor = $datensatz['autor'];
$datum = $datensatz['datum'];
$zeit = $datensatz['zet'];
$id = $datensatz['id'];
echo 'deine tabelle'
}

mfg Spikaner
 
hab mein problem gelöst.

ich habe einfach am query befahl was geändert.
so funktioniert es jetzt wie ich mir das vorgestellt habe...

PHP:
$abfrage = "SELECT * FROM `news` LIMIT 0, $num";
                        $ergebnis1 = mysql_query($abfrage);
 
Dennoch solltest du Spikaners Rat möglicherweise in Betracht ziehen und deinen Aufbau noch einmal überdenken. Das macht den Code einerseits performanter, andererseits aber auch Lesefreundlicher.

Warum bietet sich eine Lösung mit While und der Rückgabe der Funktion an?

1. mysql_fetch_assoc gibt entweder ein Datenarray mit vorhandenen Datensätzen oder, falls keine Datensätze vorhanden sind, false zurück.
2. Eine While-Schleife Arbeitet bis die Bedingung false ist.

==> Sind keine Datensätze vorhanden, wird die Schleife nicht ausgeführt
==> Sind Datensätze vorhanden, arbeitet die Schleife so lange, bis alle Datensätze abgearbeitet sind, weil mysql_fetch_assoc false zurück gibt, wenn keine Datensätze mehr vorhanden sind.

So sparst du dir die Abfragen nach der Anzahl der Datensätze und hast auch kein Problem mit fehlenden ID's.

Du bindest dir die Schuhe ja auch nicht mit den Zähnen oder? :)
 
Zurück