Was ist an der SQL-Abfrage falsch?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Max
Mitglied
Beiträge: 1051
Registriert: 20.02.2003 22:22

Was ist an der SQL-Abfrage falsch?

Beitrag von Max »

Hallo,


ich fummele schon einige Zeit an einer Abfrage herum.

Ziel ist es, für eine Art Counter die IP für eine gewisse Zeitspanne zu sperren.

Nun habe ich eine Tabelle angelegt mit ip, zeit, user_id und zaehlobjekt

Die Daten dort einzutragen und zeitgemäß zu löschen, klappt hervorragend, aber ich bin momentan zu blöd, die IPs auszulesen, so dass ich die Sperr-Routine in Gang bekomme.


Hier mal der Code dafür:

Code: Alles auswählen

$sql1 = "SELECT * FROM " . $table_prefix . "counter_ip";
$result	= $db -> sql_query($sql1);
	if ( !($result = $db->sql_query($sql1)) )
	{
		message_die(GENERAL_ERROR, 'Error .', '', __LINE__, __FILE__, $sql1);
	}
	while($row	= $db -> sql_fetchrow($result))
	{
		$verip = "IP:".$row['ip'];
  }
Zur Erklärung:
- $uip ist die zuvor erfasste reale IP
- $verip soll die gespeicherte IP sein. Die soll nachher für das Zählobjekt verwendet werden, um das nicht wieder einzublenden, oder eine Doppelzählung innerhalb einer Zeitspanne zu vermeiden.

- das "IP:". habe ich nur darin stehen, weil ich zu Testzwecken später im Script via echo $verip; den Wert anzeigen lasse, da ich aber nie etwas zu sehen bekomme, habe ich dort Text eingesetzt (der erscheint leider auch nicht)


Sicherlich obliege ich hier momentan einem ganz gewaltigen Denkfehler, aber ich stehe momentan total auf dem Schlauch.


Später möchte ich z.B. via:

Code: Alles auswählen

if (($verip != $uip ) && !isset($_COOKIE['CounterX']))
{
.
.
.
}
Die Zählung laufen lassen, außerdem brauche ich im Velauf des Scriptes immer mal einen Wert aus der Tabelle, der sich auf das Zählobjekt, manchmal die User_ID und die IP bezieht, um eine Doppelanzeige zu vermindern.


Wäre schön, wenn ich hier den passenden Schub bekomme, der mich weiterbringt.




Gruß Max
disler
Mitglied
Beiträge: 5
Registriert: 04.12.2007 10:59

Beitrag von disler »

Also, soviel ich weis, gibt es sql_query() nicht!

Ändere das mal in mysql_query($deine_Variable) um! So wie auch sql_fetchrow! Ändere das ebenfalls mal in mysql_fetch_array($deine_Variable) um!

Versuche es mal so!
Max
Mitglied
Beiträge: 1051
Registriert: 20.02.2003 22:22

Beitrag von Max »

Hallo,


danke für die Antwort.
Aber leider bringt das nichts, außer einer Fehlermeldung.
Fatal error: Call to undefined method sql_db::mysql_query()
Kommt, wenn ich:

Code: Alles auswählen

$result	= $db -> sql_query($sql1);
in:

Code: Alles auswählen

$result	= $db -> mysql_query($sql1);
abändere.



Gruß Max
Benutzeravatar
Seimon
Mitglied
Beiträge: 893
Registriert: 23.02.2005 18:10
Wohnort: Linz, Österreich

Beitrag von Seimon »

Lass mal die Zeile weg:

Code: Alles auswählen

$result   = $db -> sql_query($sql1);
disler
Mitglied
Beiträge: 5
Registriert: 04.12.2007 10:59

Beitrag von disler »

also bei deinem SQl String
$sql1 = "SELECT * FROM " . $table_prefix . "counter_ip";
, was steht da genau in der Variable??


Versuche es doch so:

$ipverweigerungszeit = time() + 3600; //Anzahl in Sekunden wie langs dauern soll

$sql = UPDATE deine tbl SET userip =" . $reale_Ip . , gespeert = $ipverweigerungszeit";

mysql_query($sql);

Danach fragst du auf der Seite oben immer ab:
//Hier komtm die SQL abfrage, wo du die Daten wieder rausliest!

if ($ipverweigerungszeit < time()) { echo "immer noch gespeert!"; }
Max
Mitglied
Beiträge: 1051
Registriert: 20.02.2003 22:22

Beitrag von Max »

Seimon hat geschrieben:Lass mal die Zeile weg:

Code: Alles auswählen

$result   = $db -> sql_query($sql1);
Das bewirkt gar nichts, keinen Erfolg, keinen Fehler...

Irgendwie bin ich völlig ratlos.
disler
Mitglied
Beiträge: 5
Registriert: 04.12.2007 10:59

Beitrag von disler »

Diese Zeile braucht er unbedingt! Sonst schreibt es ja nicht in die DB!
Max
Mitglied
Beiträge: 1051
Registriert: 20.02.2003 22:22

Beitrag von Max »

Hallo,

ich schreibe es mal in Schritten:

Beim Zählen wird das gemacht:

Code: Alles auswählen

$sql = "INSERT INTO ". $table_prefix . "counter_ip
      VALUES ('$akzeit', '$uip', '$voter_id', '$objekt_id')";
Hier wird nun die Zeit (Zeitpunkt des Eintrags), die zu dem Zeitpunkt genutzte IP, die User-ID des Teilnehmers und die ID des Zählobjektes eingetragen.

Das klappt ohne Probleme.

Nun habe ich auch eine Löschroutine für abgelaufene Einträge:

Code: Alles auswählen

$del1 = "DELETE FROM " . $table_prefix . "counter_ip WHERE zeit<'".$loeschen."'"; 
$r1 = $db -> sql_query($del1); 
Klappt auch ohne Probleme, so habe ich nie mehr Einträge in der Tabelle, als die vorgegebene Sperrzeit nach sich zieht.


Mein Problem ist halt, dass ich weder die gesperrten IPs, noch die gezählten Objekte/IP abrufen kann.
Ich brauche beides immer mal wieder in dem Script.


Gruß Max
disler
Mitglied
Beiträge: 5
Registriert: 04.12.2007 10:59

Beitrag von disler »

Code: Alles auswählen

$sql = "Select * From [b]deine_tabelle[/b] where [i][u]BEDINGUNG[/u][/i]";
$sql_raus = mysql_query($sql);
if ($row=mysql_fetch_array($sql_raus))
{
         $attribut1 = $row['attributname_in_tbl'];
         fortfolgend
}
$ip = getenv('REMOTE_ADDR');//oder $_SERVER['REMOTE_ADDR'];


BEDINGUNG wo das steht, musst du deine Bedingung angeben! Also zum Beispiel where gesperrteip = $ip
Max
Mitglied
Beiträge: 1051
Registriert: 20.02.2003 22:22

Beitrag von Max »

Hallo,


und wieder danke :-)


Ich könnte mir wo hin beißen.

Das habe ich auch schon gehabt, das Gruselige ist, dass ich dachte, es wäre falsch.
Dieser Code ging ( an der Stelle im Script) auch nicht. Da ich nun davon ausging, dass das nicht sein kann, habe ich einfach mal den Abschnitt woanders im Script positioniert und schon läuft es.

So was ist ja direkt etwas nervig - minimaler Fehler, maximale Folge.




Gruß Max
Antworten

Zurück zu „Coding & Technik“