MySQL Count + Rechnung um ID zu erstellen?

sub7even

Mitglied
Hallo,
also es geht um folgendes.
Ich versuche Momentan ein Homepage Script mit einem Privat-Server für ein Spiel
zu kombinieren.
Dafür möchte ich jetzt auch kleine scripts schreiben um sich auf dem Server
Sachen geben zu können/ den Server Administrieren zu können.
Dafür brauche ich ja den zusammen hang der beiden datenbanken der vom Server und der von der Homepage.
Deshalb habe ich jetzt eine neue Datenbank erstellt in die Folgendes rein soll:
HomePage-UserID, Server-UserID,IP-Adresse.
Homepage-UserID udn IP-Adresse ist leicht da ich die einfach vom script auslesen kann.
Jedoch muss ja bei der Server-UserID in der Datenbank des Servers das gleiche stehen wie in der datenbank die Homepage & Server verbinden soll,
deshalb kommt Auto Increment ja nicht infrage da in den Datenbanken dan teilweise untershciedliche ID's erzeugt werden.

Deshalb wollte is das wie folgt machen:
1. Aus der Datenbank zum Homepage & Server verbinden die Datensätze zählen (count)
2. Das ergebnis dan +1 Rechnen
3. dieses dan als neue ID mit in der query einfügen um die neue ID zu speichern.

Hier ist mal mein Code:
PHP:
// Script fängt an!
	$id3 = mysql_query("SELECT count(*) FROM `verb_hpsv` ");

	$aid2 = $_POST['auid2'];
	$id1 = mysql_result($id3);
	$id_add = '1';
	$id2 = $id1 + $id_add;
	$ip21 = $_SERVER['REMOTE_ADDR'];

function nw($N, $C){
  $reg = mysql_query("INSERT INTO accounts (id, username, password, accesslevel) VALUES( '$id2', '$N', '$C', '1')")or die(mysql_error());
  return $reg;
  }
function nW2($N, $C){
	$reg2 = mysql_query("INSERT INTO accounts (homepage, server, ip) VALUES( '$aid2', '$id2', '$ip21')")or die(mysql_error());
	return $reg2;
}


Das funktioniert aber leider nicht.
Kann mir jemand helfen?:(

*EDIT*
Habe natürlich voher zur Datenbank verbunden etc...
 
Zuletzt bearbeitet:
Zitat: Das funktioniert aber leider nicht.

Das ist jetzt ein wenig unpräzise. Könntest Du vielleicht einmal sagen, was genau nicht funktioniert. Welche Fehlermeldungen ausgegegen werden bzw. wo genau das Problem liegt.


DANKE
 
Zunächst habe ich nicht getestet, ob Du auch wirklich mit der Variante den richtigen Wert für $id bekommst, aber das mal vorausgesetzt, erwartet mySQL bei einer Spalte, die als Interger definiert ist einen Integer-Wert, also ohne Anfürungszeichen!
Ändere Dein INSERT INTO accounts ab:
PHP:
// Ich gehe davon aus, daß die Spalten 'id' und 'accesslevel'
// der Tabelle 'accounts' als INT deklariert wurden!
$req = mysql_query( "INSERT INTO accounts (id, username, password, accesslevel) VALUES ( ".$id2.", '$N', '$C', 1)") or die(mysql_error());

DER Fehler sollte damit behoben sein...
:)

Damit Du mit sowas nicht durcheinander kommst, solltest Du Integer-Values auch in PHP als solche behandeln und optisch darstellen:
PHP:
// PHP kann sowohl
$a = '1';
$b = '2';
$c = $a + $b;

echo $c; // Ausgabe: 3

// besser ist allerdings
$a = 1;
$b = 2;
$c = $a + $b;

echo $c; // Ausgabe: 3

// kleiner Tipp: Da Du eh nur um den Wert 1 erhöhst, geht auch
$id++;

Wie gesagt, Deine Zuweisung von $id sieht für mich etwas abenteuerlich aus.
Mag aber sein, daß es so funktioniert. Sollte es nach den obigen Änderungen immer noch nicht funktionieren, können wir uns da noch mal drum kümmern...
;)
 
@serializable
Ich würds auch auf Deine Art machen, aber so wie sub7even das macht, kann PHP das verarbeiten!
Ob das gut oder schlecht ist, mag'n Thema mit verschiedenen Meinungen sein...
;)
 
hmmmm...
So habe das jetzt geändert...

Jetzt wird jedoch ein anderer Fehler ausgegeben:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'lok1', '1f6043936576b9f31ba7dc78a3d1214f', 100 )' at line 1
Info dazu:
lok1 is der Accountname den Ich versucht ahbe zu registrieren
der hash is das passwort
und 100 denke ich mal wird das accesslevel seihen...

Hier nochmal der aktuelle Code:
PHP:
// Script fängt an!

	$id3 = mysql_result(mysql_query("SELECT count(*) FROM `verb_hpsv` "),0);	// Der MySQL query um die Datensätze zu Zählen

	$aid2 = $_POST['auid2'];			// Die AuthID In eine Variable
	$id2 = $id3++;						// Neue ID Erzeugen durch +1 Addieren
	$ip21 = $_SERVER['REMOTE_ADDR'];	// IP Erfragen + In eine Variable


function nw($N, $C){
  $req = mysql_query( "INSERT INTO accounts (id, username, password, accesslevel) VALUES ( ".$id2.", '$N', '$C', 100 )") or die(mysql_error());
  return $reg;
  }
function nW2($N, $C){
	$reg2 = mysql_query("INSERT INTO verb_hpsv (homepage, server, ip) VALUES( ".$aid2.", ".$id2.", '$ip21' )")or die(mysql_error());
	return $reg2;
}

Vielleicht könnt ihr ja die daten Über die Datenbank noch gebrauchen:

verb_hpsv
  • Name= homepage :: Type= INT :: Length= 255 :: Decimals= 0 :: Allow Null= Nein
  • Name= server :: Type= INT :: Length= 255 :: Decimals= 0 :: Allow Null= Nein
  • Name= ip :: Type= LONGTEXT :: Length= 0 :: Decimals= 0 :: Allow Null= Ja

accounts
  • Name= id :: Type= INT :: Length= 255 :: Decimals= 0 :: Allow Null= Nein
  • Name= username :: Type= varchar :: Length= 32 :: Decimals= 0 :: Allow Null= Nein
  • Name= password :: Type= varchar :: Length= 32 :: Decimals= 0 :: Allow Null= Nein
  • Name= accesslevel :: Type= INT :: Length= 3 :: Decimals= 0 :: Allow Null= Nein

In accounts gibt es natürlich noch mehr Atribute, aber da habe ich drauf geachtet
das diese einen Default wert gesetzt haben.
Dan müsste das ja gehen?


danke schonmal für eure hilfe :)
 
Was für einen Wert hat denn $id2 :confused:
Das geht aus der Fehlermeldung nicht hervor.

Laß Dir doch mal den INSERT-Befehl über ein echo oder print ausgeben.
Da sieht man meist mehr.

Ich glaub' immer noch, daß $id3 nicht korrekt belegt wird, aber ich laß mich gern eines besseren belehren. ;)
 
Hab mal schnell geforscht.
Die Art, wie Du $id3 erhältst scheint tatsächlich vom Ansatz her richtig zu sein.

Trotzdem is die Syntax nicht ganz korrekt, glaube ich.

Setz mal bitte die AS-Klausel im SELECT ein und verwende dann den dritten Parameter von mysql_result() für die Feldangabe:
PHP:
$id3 = mysql_result(mysql_query("SELECT count(*) AS myid FROM verb_hpsv"),0,"myid");

So sollte $id3 auf jeden Fall den korrekten Wert erhalten.
Und wenn das nicht klappt, bitte den INSERT-Befehl ausgeben lassen und posten.
 
Hab mal schnell geforscht.
Die Art, wie Du $id3 erhältst scheint tatsächlich vom Ansatz her richtig zu sein.

Trotzdem is die Syntax nicht ganz korrekt, glaube ich.

Setz mal bitte die AS-Klausel im SELECT ein und verwende dann den dritten Parameter von mysql_result() für die Feldangabe:
PHP:
$id3 = mysql_result(mysql_query("SELECT count(*) AS myid FROM verb_hpsv"),0,"myid");

So sollte $id3 auf jeden Fall den korrekten Wert erhalten.
Und wenn das nicht klappt, bitte den INSERT-Befehl ausgeben lassen und posten.

Habe das jetzt so geändert.
und bekomme immernoch folgende Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'lok1', '1f6043936576b9f31ba7dc78a3d1214f', 100 )' at line 1

Wusste jetzt nicht genau was ich ausgeben lassen sollte dehalb habe ich das einfach ma wie folgt gemacht...
PHP:
echo mysql_query( "INSERT INTO accounts (id, username, password, accesslevel) VALUES ( ".$id2.", '$N', '$C', 100 )") or die(mysql_error());
und habe dabei den wert "1" ausgegeben bekommen.
 
Zuletzt bearbeitet:
Zurück