Christian: false aber warum?

Hi,
ich habe mir ein Newsscript zusammen gabaut...

Wenn ich einen Newsbeitrag lösche, gibt es Probleme, wenn ich neue News erstellen will.
Die NewsID kommt durch das addieren von 1 zur Funktion mysql_num_rows zustande. Wenn ich jetzt einen Newsbeitrag lösche(wenns nicht gerade der 1. ist) klappts logischerweise nichtmehr.

Beispiel:
4      4
3      3
2-X-1
1

Ich habe 4 posts, lösche den 2. und habe nurnoch 3.
D.h. ich habe 3 Rows. 3+1=4. Aber newsID 4 gibt es schon.
Deswegen habe ich die while Schleife eingebaut um allen Newsposts eine neue newsID zu geben.

[PHP]
<?php
session_start();
$session_id=session_id();
?>
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta http-equiv="refresh"
content="5; url=news.php">
</head>
<body>
<?php
include("logincheck.php");
include("member_menue.php");

$datum=date("d.m.Y");
$uhrzeit=date("H:i");
switch($message)
{
    case "" : die("Bitte Newsfeld ausfüllen.");
}

switch($subject)
{
    case "" : die("Bitte Themenfeld ausfüllen.");
}

$linkID= mysql_connect("localhost","web21","mstrain");
         if(!$linkID)die("Keine Verbindung zur Datenbank!");
         mysql_select_db("usr_web21_1",$linkID);

$new_count= mysql_num_rows(mysql_query("SELECT newsID FROM news", $linkID));

$zaehler=0;

while($new_count<$zaehler){                                         //Soll die anderen NewsID´s updaten.
 $update_newsID="INSERT INTO news (newsID) VALUES ('$zaehler')";    //Wenn ich eine News lösche treten dann Probleme auf weil ja die NEWS ID falsch ist
 $zaehler++;                                                        //Aus diesem Grund möchte ich alle newsID´s in der Tabelle news updaten
 $result=mysql_query($update_newsID,$linkID);                       //Damit keine Probleme mehr auftreten können.
if(!$result)die("Fehler![while]");
}

$num_rows= mysql_num_rows(mysql_query("SELECT newsID FROM news", $linkID))+1;

echo("Num Rows $num_rows<br>");
echo("userDaten $userDaten[1]<br>");
echo("Thema $subject<br>");
echo("Post $message<br>");
echo("Datum $datum<br>");
echo("Uhrzeit  $uhrzeit<br>");

$sql="INSERT INTO news (newsID,newsPoster,newsSubject,newsPost,newsDatum,newsUhrzeit) VALUES ('$num_rows','$userDaten[1]','$subject','$message','$datum','$uhrzeit')";
$result2=mysql_query($sql,$linkID);
if(!$result2)die("Fehler beim eintragen der News!");
echo("News wurden gespeichert.");
?>
</body>
</html>
[/PHP]

Die Variablen werden richtig ausgegeben.

Die $result2 ist false und die IDs der anderen News werden nicht geupdatet.
Woran liegt das?

  1. Hi,

    Wenn ich einen Newsbeitrag lösche, gibt es Probleme, wenn ich neue News erstellen will.
    Die NewsID kommt durch das addieren von 1 zur Funktion mysql_num_rows zustande. Wenn ich jetzt einen Newsbeitrag lösche(wenns nicht gerade der 1. ist) klappts logischerweise nichtmehr.

    Warum benutzt Du nicht einfach eine auto-increment-Spalte der mysql-Datenbank für die ID?
    Da werden automatisch eindeutige ids erzeugt.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Hi,

      Wenn ich einen Newsbeitrag lösche, gibt es Probleme, wenn ich neue News erstellen will.
      Die NewsID kommt durch das addieren von 1 zur Funktion mysql_num_rows zustande. Wenn ich jetzt einen Newsbeitrag lösche(wenns nicht gerade der 1. ist) klappts logischerweise nichtmehr.

      Warum benutzt Du nicht einfach eine auto-increment-Spalte der mysql-Datenbank für die ID?
      Da werden automatisch eindeutige ids erzeugt.

      cu,
      Andreas

      Wie muss ich das Script dann ändern?
      Is es in Ordnung wenn die ID´s immernoch pder num_rows+1 eingetragen werden oder wie benutze ich auto_increment richtig?(Ich habs schon in phpMyAdmin eingestellt und die Tabelle geleert und 3 neue News erstellt.
      Aber das Problem besteht immernoch.

      1. Ich habs jetzt geändert.......

        Ich habe 3 Posts, habe den 2ten gelöscht.
        Ich schreibe eine neue News. Die News hat die ID4.
        Aber die ID`S sollen dann durchgezählt werden.

        Der Post mit der ID 3 sollte dann auch die ID2 haben und der immoment ID4 hat sollte 3 haben.
        Damit man nicht solche "Sprünge" in den IDs hat.

        php:

        <?php
        include("logincheck.php");
        include("member_menue.php");

        $datum=date("d.m.Y");
        $uhrzeit=date("H:i");
        switch($message)
        {
            case "" : die("Bitte Newsfeld ausfüllen.");
        }

        switch($subject)
        {
            case "" : die("Bitte Themenfeld ausfüllen.");
        }

        $linkID= mysql_connect("localhost","web21","mstrain");
                 if(!$linkID)die("Keine Verbindung zur Datenbank!");
                 mysql_select_db("usr_web21_1",$linkID);

        $num_rows= mysql_num_rows(mysql_query("SELECT newsID FROM news", $linkID))+1;

        $sql="INSERT INTO news (newsID,newsPoster,newsSubject,newsPost,newsDatum,newsUhrzeit) VALUES ('','$userDaten[1]','$subject','$message','$datum','$uhrzeit')";
        $result=mysql_query($sql,$linkID);
         if(!$result){
             die("Fehler beim eintrage der News.");
         }
        echo("News wurden gespeichert.");
        ?>
        </body>
        </html>

        1. Hallo Christian!

          Damit man nicht solche "Sprünge" in den IDs hat.

          Die "Sprünge" sind in Datenbanken durchaus üblich.

          Ich hoffe, Du versuchst nicht noch immer, die Anzahl der Datensätze für die ID-Generierung zu verwenden - dies ist eigentlich unüblich - wie gesagt - am besten mit auto_increment, am zweitbesten mit max()!

          mfg

          norbert =:-)

          1. Hallo Christian!

            Damit man nicht solche "Sprünge" in den IDs hat.

            Die "Sprünge" sind in Datenbanken durchaus üblich.

            Ich hoffe, Du versuchst nicht noch immer, die Anzahl der Datensätze für die ID-Generierung zu verwenden - dies ist eigentlich unüblich - wie gesagt - am besten mit auto_increment, am zweitbesten mit max()!

            mfg

            norbert =:-)

            Hi,
            ich benutze jetzt auto_increment.
            IS eigentlich in Ordnung, da ich dann eh vor hatte die ID´s zu verstecken und dann ist es ja relativ egal.

            Danke für eure Hilfe.

        2. Hi,

          Aber die ID`S sollen dann durchgezählt werden.
          Der Post mit der ID 3 sollte dann auch die ID2 haben und der immoment ID4 hat sollte 3 haben.
          Damit man nicht solche "Sprünge" in den IDs hat.

          Nein, die id eines Posts sollte konstant sein.
          Wenn Du eine numerierte Ausgabe haben willst, dann erzeuge die Numerierung bei der Ausgabe.

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  2. Hallo Christian,

    Ich habe 4 posts, lösche den 2. und habe nurnoch 3.
    D.h. ich habe 3 Rows. 3+1=4. Aber newsID 4 gibt es schon.
    Deswegen habe ich die while Schleife eingebaut um allen Newsposts eine neue newsID zu geben.

    warum so umständlich, wenn es auch einfach geht? - verpass der Spalte newsID einfach noch auto_increment (siehe auch http://www.mysql.de/doc/de/CREATE_TABLE.html (etwas runterscrollen))

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  3. Hallo Christian!

    Ich weiß zwar nicht, was Du mit Deinem Script anstellst (alle Records überarbeiten - oder ähnliches?) - aber zu deiner Frage:

    In jedem Fall das beste haben meine Vorredner schon erwähnt (auto_increment). Solltest Du dies aus irgendwelchen Gründen nicht umsetzen können, so nimm bitte statt der Anzahl an Records die größte ID aus der DB. Den Grund hast Du ja schon selbst herausgefunden.

    select max(NewsId) from news;

    Liefert in jedem Fall die größte vergebene ID - wenn Du diese um eins erhöhst, hast Du eine eindeutige neue - auch wenn dazwischen schon welche fehlen sollten.

    mfg

    norbert =:-)