Willkommen in der Webstatt Zum Webstatt Blog und Stories
Remo1234 Remo1234 am 22.02.07 23:58

Hallo,
ich habe eine Tabelle von einem Gästebuch, die die Spalte "ID" enthält. Dieser ID ist "AUTO_INCREMENT" zugewiesen. Das Problem ist, dass beim Löschen eines Datensatzes die AUTO_INCREMENT-Zahl nicht gelöscht wird, und somit quasi eine Zahl übersprungen wird, wenn man den nächsten Datensatz einfügt.
Wie kann ich die ID manuell zurücksetzen, sodass keine Ziffer "ausgelassen" wird?

Was wäre eine Möglichkeit um diesen Effekt zu umgehen und die Beiträge eines GBs beispielsweise anders zu zählen? Jedesmal wenn ein Beitrag erstellt wird die höchste ID ausgeben, 1 dazu addieren und sie wieder speichern?

netcup.de Warum gibt es hier Werbung?
nuit nuit am 23.02.07 00:01

auto_increment bedeutet auch, dass sie unique ist, dass kann man meines wissens nicht umgehen....warum willst du das umgehene? sinn?

ein unsigned integer geht bis: 0 - 4.294.967.295
ich glaube das sollte reichen :D

und wenn nicht, dann: BigInt: 0 - 18.446.744.073.709.551.615

und wenn das nicht reichen sollte: double: 2.2250738585072014E-308 to 1.7976931348623157E+308

ich glaube das sollte reichen :P

Quelle: http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html


zählen würde ich sie erst beim ausgeben ;) d.h eine for-schleife oder was ähnliches zu machen :D und darin zu zählen, so wird das meistens gemacht

Remo1234 Remo1234 am 23.02.07 00:09

Ich versteh den Sinn von deinem Post nicht =) :D

Das sind doch Zahlentypen oder nicht?

Sinn = Wenn ich Beispielsweise 7 Posts in meinem GB habe und der 7. ist Spam so lösch ich ihn. Jetzt kommt ein user und macht einen neuen Eintrag und siehe da - die Einträge sind so nummeriert:

1, 2, 3, 4, 5, 6, 8


Daher meine Frage, wie ich die Nummerierung von einem GB zB. so programmiere, dass diese eine Zahl beim Löschen eines Posts nicht "verloren geht"


:D :D :D

nuit nuit am 23.02.07 00:33

Quote
Original von nuit
[...]zählen würde ich sie erst beim ausgeben ;) d.h eine for-schleife oder was ähnliches zu machen :D und darin zu zählen, so wird das meistens gemacht

dann bist du unabhängig von der ID :D und so ein grosser aufwand eine variable hochzuzählen ist es auch nicht... ;)
ich denke der aufwand ist größer, wenn du alle ids umschreiben musst :D jedesmal, wenn 1 Post gelöscht wird.....

also benutz die id um auf sie zuzugreifen, aber die nummerierung am besten vor der ausgabe, wenn du sie eh durchgehen musst :D

edit: ich habs dann später auch bemerkt, was du meinst ;) aber dachte du willst Zahlen sparen, dadurch, dass du die ID zurücksetzt :D und ich wollte dir eigentlich nur zeigen, dass du das nicht brauchst....nicht in der heutigen Zeit

Christian am 23.02.07 09:16

Quote
Original von Remo1234
Daher meine Frage, wie ich die Nummerierung von einem GB zB. so programmiere, dass diese eine Zahl beim Löschen eines Posts nicht "verloren geht"


Bin mir nicht sicher ob das Problem schon gelöst wurde, ich habe es auf jedenfall so gelöst:
$i = 0;
while(..){
$i++;
echo "Eintrag NR. $i";
....
}


also nicht die ID ausgeben, sondern mit ner extra Zählvariablen arbeiten.

Remo1234 Remo1234 am 23.02.07 13:53

Quote
Original von Christian
[quote]Original von Remo1234
Daher meine Frage, wie ich die Nummerierung von einem GB zB. so programmiere, dass diese eine Zahl beim Löschen eines Posts nicht "verloren geht"


Bin mir nicht sicher ob das Problem schon gelöst wurde, ich habe es auf jedenfall so gelöst:
$i = 0;
while(..){
$i++;
echo "Eintrag NR. $i";
....
}


also nicht die ID ausgeben, sondern mit ner extra Zählvariablen arbeiten.[/quote]
Ja, genau so hat nuit es auch vorgeschlagen.

@nuit, sorry, ahb den letzen teil von deinem ersten Beitrag überlesen :O

Remo1234 Remo1234 am 23.02.07 17:24

Mhh... das ist dann ja falschrum...

Frage am Rande: Wann macht man bei Ausgaben in Form von HTML Codes in PHP ein neues echo"" wie hier:

echo " <div id=\"asdadf\">\n";
echo " Blablubb";
echo " </div>\n";

Für jedes Tag bzw. jeden Inhalt für ein Tag ein neue echo?

Snake am 23.02.07 17:47

das machen nur anfänger :D

Remo1234 Remo1234 am 23.02.07 17:49

Mh hab mal von irgendjemandem hier gehört man macht das so. :D

Wie denn dann? einfach

echo " <html>
<div>
</div>undsoweiter";

der_nic der_nic am 23.02.07 17:50

ja, technisch gesehen ist's egal... aber es geht einfacher wenn du's so machst

Snake am 23.02.07 17:58

nur dass der parser jedes mal ein neues echo und eine neue zeichenkette bearbeiten muss.
nunja, mit template system hat man im endeffekt eh nur noch ein echo, ganz am ende

nuit nuit am 23.02.07 18:28

:P
echo "<html>\n<div>\n</div>undsoweiter";
und für einen tab:
\t

Remo1234 Remo1234 am 23.02.07 18:46

alles in eine zeile?

Dustwolf Dustwolf am 23.02.07 18:47

Das funzt aber nur mit echo "..."; und nicht mit echo '...'; !

jRothkegel am 24.02.07 16:44

Alles in einer Zeile sieht find ich pers. nicht schön aus.

Ich mache es im Regelfall so:

<?php
//Schleifendurchlauf und Ausgabe
while($db->next())
{
?>
<div id="gbeintrag">
<?=$db->value("Name")?><br/>
<?=$db->value("Eintrag")?>
</div>
<?php
}
?>


Hat den Vorteil, dass Syntaxhighlighting funktioniert.
Alternativ, wenn man noch XML verwenden möchte muss der Spass so aussehen:

<?php
//Schleifendurchlauf und Ausgabe
while($db->next())
{
?>
<div id="gbeintrag">
<?php echo $db->value("Name")."<br/>".$db->value("Eintrag");?>
</div>
<?php
}
?>


Ob man jetzt Variante 1 oder 2 nimmt ist Geschmackssache, ich nehme meistens die Erste. So sit der Code leicht lesbar.

Jo

PS: Bei diesem kurzen Ausgabecode ist es jedoch fraglich ob man das auf meine Art machen muss, aber spätestens wenn man ganze Formularfelder ausgeben muss ist der Vorteil doch sehr merkbar.

nuit nuit am 24.02.07 18:17

<?=$db->value("Eintrag")?>
unsauberer stil :D

schreib besser:
<?php echo $db->value("Eintrag"); ?>
bzw:
<?php print $db->value("Eintrag"); ?>

nachdem die kurzschreibweise wahrscheinlich bald aussterben wird

Dustwolf Dustwolf am 24.02.07 18:28

Wenn du auf sowas achtest, solltest du aber auch nur echo verwenden. Denn print stirbt auch aus. :D

Snake am 24.02.07 18:31

Quote
echo() besitzt zusätzlich eine Syntax-Kurzform, Sie können also ein öffnendes PHP-Tag von einem Gleichheitszeichen gefolgt notieren.
Diese Syntax-Kurzform funktioniert nur, wenn short_open_tag in der php.ini eingeschaltet ist.


=> absolut unbrauchbar!

nuit nuit am 24.02.07 21:08

Quote
Original von Dustwolf
Wenn du auf sowas achtest, solltest du aber auch nur echo verwenden. Denn print stirbt auch aus. :D

mit print ist auch sowas lustiges möglich:
$var = print "hallo";
wobei $var nun 1 ist ;)

insofern kann ich mir kaum vorstellen, dass print aussterben soll :D print ist nämlich != echo
siehe: php.net/print
bzw: http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40

jRothkegel am 26.02.07 13:11

@snake & nuit: Deshalb habe ich auch direkt die 2te Variante eingefügt, grade weil es so viele Gegner der Kurzschreibweise gibt und diese in einigen Fällen unbrauchbar ist ;-)


Jo

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt