Wert mittels PHP um 1 erhöhen

Eine Inventarnummer sollte eigentlich immer eindeutig sein. Auch in die Vergangenheit.
Das heißt, dass gelöschte Einträge und damit freigewordene Inventarnummern gar nicht mehr verwendet werden dürften, was dem auto_increment entspricht, der einfach weiterzählt. Mit Max() kannst du im Übrigen auch nur anschließen, Lücken, die durch Löschen entstanden sind, musst du durch ein ein klein wenig aufwendigeres Skript suchen (nicht viel aufwendiger, aber ein bisschen).
 
Wenn du das unbedingt so machen willst, wie du vorhast (ich finde ja eine Id reicht aus), könntest du folgendes versuchen (ungetestet):
PHP:
$sql = 'INSERT INTO `tabelle` (`id`) VALUES(NULL)';
mysql_query( $sql );

$id = mysql_insert_id();
$invId = ( 30000 + $id );

$sql2 = 'UPDATE `tabelle` SET `inventarId` = ' .$invId. ' WHERE `id` = ' .$id;
mysql_query( $sql2 );
 
Also, ich wollte ja auch einfach, dass er Auto_increment bei der Inventarnr macht und halt einfach bei 30000 anfängt damit. Wir haben eine PC Inventur, bei der genau das passiert (die fängt bei 1000 an).

Aber: mein Kollege hat gemeint, es wäre "unsauber" nur eine Nummer zu nehmen. Nach langem hin und her hat er halt gesagt, ich soll die ID hochzählen lassen und die Inventarnr selbst hochzählen, FALLS wir die Inventarnr. mal wieder vergeben sollten, wenn ein Drucker weg ist.

Ich persönlich finde den Aufwand eine Tabelle mit Lücken zu pflegen aber umständlicher. Dann muss sich ja ständig einer hinsetzen, gucken welche Zahlen frei sind und dafür neue Etiketten ausdrucken usw.

Deswegen würde ich gern die ID als Inventarnr nehmen und die bei 30000 beginnen lassen und dann Auto_increment machen.
 
SQL:
select t1.id +1
from tabelle t1, outer(tabelle t2)
where t1.id +1 = t2.id
AND t2.id is null

Ist jetzt Informix-Syntax, vielleicht erbarmt sich jemand und schreibt den Join für Informix.
Dieses Skript (ungetestet) sollte dir Lücken in deinen Werten automatisch liefern (wenn du die Lücken dann verwendest, ändert sich auch die Ausgabe des Skriptes).

Wie gesagt, eine Inventarnummer sollte eigentlich immer eindeutig sein. Darum enthält sie meistens auch Angaben zu Jahr und Monat der Anschaffung. Ich würde von einer Wiederverwendung daher abraten.
 
Ich hab mich jetzt entschieden, nur eine Nummer zu nehmen. Leider funktioniert das Hinzufügen von Druckern noch nicht so wriklich. Also hab ich einfach so mal einen Drucker direkt über phpMyadmin in die Tabelle eingefügt und mit ihm rumexperimentiert. An einer Stelle bekomme ich die Fehermeldung:

Unknown column 'id' in 'field list'

Mir ist klar, dass das bedeutet, dass er das Feld id nicht kennt. Also hab ich nochmals in meine Tabelle nachgeschaut. Dort ist alles okay.

Code:
Feld  	Typ   	Null  	Standard   	Kommentare
id 	int(10) 	Nein  	  	 
hersteller 	varchar(15) 	Nein  	  	 
modell 	text 	Nein  	  	 
typ 	text 	Nein  	  	 
standort 	varchar(30) 	Ja  	NULL  	 
benutzer 	varchar(30) 	Ja  	NULL  	 
serial 	varchar(20) 	Ja  	NULL  	 
anschluss 	varchar(10) 	Nein  	  	 
ip 	varchar(15) 	Ja  	NULL  	 
printserver 	varchar(1) 	Nein  	N  	 
bemerkung 	text 	Ja  	NULL  	 
kauf_am 	date 	Ja  	NULL  	 
kauf_bei 	varchar(25) 	Ja  	NULL  	 
finanziert 	varchar(25) 	Ja  	NULL  	 
stand 	date 	Nein

Man kann das jetzt nicht so gut erkennen, aber den Eintrag id gibt es definitiv (auch kleingeschrieben). Hier nochmal mein Code dazu:

Code:
<html>
<head>
  <title>Auflistung der Drucker</title>
  <LINK href="global/css/inc.layout.css" rel="stylesheet" type="text/css">
</head>
<body>
  <h1>Liste der Drucker</h1>
  <?
    require ("db_tools.php");

    function head_out() {
      echo "<table border=0 cellpadding=2 cellspacing=2>\n";
      echo "<tr bgcolor=#F0D8D0>\n";
      echo "  <th>Inventar-Nr.</th>\n  <th>Standort</th>\n  <th>Name</th>\n  <th>Benutzer</th>\n  <th>Printserver</th>\n  <th>Details</th>\n  <th>Löschen</th>\n  <th>Ändern</th>\n";
      echo "</tr>\n";
    }

    function row_out($obj) {
      echo "<tr bgcolor=#E8E8E8>\n";
      echo "  <td>$obj[id]</td>\n";
      echo "  <td>$obj[standort]</td>\n";
      echo "  <td>$obj[modell]</td>\n";
      echo "  <td>$obj[benutzer]</td>\n";
      echo "  <td>$obj[printserver]</td>\n";
      echo "  <td valign=middle><nobr><form action=\"details.php\" method=\"POST\"><input type=hidden name=\"id\" value=\"$obj[id]\"><input type=submit value=\"Details\"></form></td>\n";
      echo "  <td valign=middle><nobr><form action=\"delete_request.php\" method=\"POST\"><input type=hidden name=\"druckernr\" value=\"$obj[id]\"><input type=submit value=\"Löschen\"></form></td>\n";
      echo "  <td valign=middle><nobr><form action=\"update_drucker.php\" method=\"POST\"><input type=hidden name=\"druckernr\" value=\"$obj[id]\"><input type=submit value=\"Ändern\"></form></td>\n";
      echo "</tr>\n";
    }

    function end_out() {
      echo "</table>\n<br>\n";
    } 

    $lk=xconnect();
    $db="inventur-drucker";
    $sql="SELECT id, standort, modell, benutzer, printserver geraet ORDER BY id";
    echo "<table>\n<tr>\n<td>\n";
    echo "<form action=\"new_drucker.php\" method=\"POST\"><input type=submit value=\"Neuen Drucker erfassen\"></form>\n";
    echo "</td>\n<td>\n";
    echo "<form action=\"index.php\" method=\"POST\"><input type=submit value=\"Neue Suche\"></form>\n";
    echo "</td>\n</tr>\n</table>\n";
    head_out();
    $res=send_sql ($db,$sql);
    while ($arr=mysql_fetch_array($res,MYSQL_ASSOC)) {
      row_out($arr);
    }
    end_out();
    echo "<table>\n<tr>\n  <td>\n";
    echo "  <form action=\"new_drucker.php\" method=\"POST\"><input type=submit value=\"Neuen Drucker erfassen\"></form>\n";
    echo "  </td>\n  <td>\n";
    echo "  <form action=\"index.php\" method=\"POST\"><input type=submit value=\"Neue Suche\"></form>\n";
    echo "  </td>\n</tr>\n</table>\n";
  ?>
</body>
</html>
 

Neue Beiträge

Zurück