• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bestimmte Anzahl an Datenbankeinträgen + bestimmte Datenbankeinträge auslesen

Witschi262

Blogger
Hallo,
ich arbeite gerade an einem Codesystem.

Ein Benutzer kann einen Code generieren lassen, welcher in der Datenbank gespeichert wird.
Es dürfer aber maximal nur 10 Codes erstellt.

Dazu soll dann das Script, bei eingabe eines Codes, den richtigen Code aus der DB "rausfischen" und prüfen.

Meine Frage: Wie geht das?
 
Wenn ich dein Problem richtig verstanden habe brauchst du die SQL Befehle "like" und "limit"...

Mit like kannst du Datenbankeinträge selektieren, die ähnlich sind und mit limit kannst du die ausgabe auf n Ausgaben limitieren.
 
Wenn ich Google richtig verstanden habe, ist Limit dazu da, ausgegebene EInträge zu begrenzen.

Ich möchte aber Datenbankeinträge begreznen: In einer Tabelle max. 10 Einträge möglich.

Aber LIKE triffts aufn Punkt, danke :D
 
Dann musst du dir vorher alle Datensätze ausgeben lassen mit 'SELECT * FROM tabelle' und dann musst du dir die anzahl der Datensätze mit mysql_num_rows() ausgeben lassen. Dann prüfst du mit if, ob mysql_num_rows() größer oder gleich 10 ist, wenn ja, dann breche den Vorgang ab und hinterlasse dem User eine Fehlermeldung, ansonsten Code generieren und abspeichern. =)
 
Semikolon in der vorherigen Zeile vergessen.

Ungetestet:

PHP:
$code = $_POST['code'];
$res = mysql_query("SELECT * FROM beta");
if (mysql_num_rows($res) > 10)
{
echo " Sorry, es sind bereits 10 Codes registriert worden!";
}
else
{
mysql_query("INSERT INTO beta (id, code) VALUES (NULL, '".mysql_real_escape_string($code)."')");
}
?>
 
Hui, habe den Beitrag eigentlich kurz danach gelöscht, ihr seid aber schnell.

Naja es funktioniert. Danke an alle Poster, ich mache mich jetzt an "like"
 
PHP:
<?php
$betacode = $_POST['betacode'];
$connection = mysql_pconnect("localhost","witschi262","*******");
mysql_select_db("witschi262");
if (isset ($_REQUEST["code"]))
{
if (mysql_query("SELECT * FROM beta WHERE code LIKE $betacode") == 0)
{
echo "Code Korrekt";
}
else
{
echo "Code, nicht korrekt";
}
}
?>

So, das funktioniert nicht. Egal was ist: Immer wird ausgegeben, der Code wäre korrekt. Selbst mit "True" funktionierts nich.

Bitte um Hilfe
 
Jetzt hast du dir vor allem noch eine Lücke für SQL Injections eingebaut, obwohl du das in #6 richtig hattest.

- SQL-Injection

Immer geeignete Escape-Funktionen anwenden, wenn Daten in einen SQL-String eingefügt werden sollen.

- PHP: mysql_real_escape_string - Manual

Und lies dir wie gesagt durch, was die einzelnen mysql_*-Funktionen tun und welche Rückgabewerte sie haben. mysql_query gibt in diesem Fall eine Result-Ressource zurück.

- PHP: mysql_query - Manual
- PHP: mysql_num_rows - Manual
 
Sorry, das ich hier n bisschen aufm Schlauch stehe:
Ich habe keinen Blassen Schimmer, was überhaupt der Fehler ist.

Edit:
Achso, ich vergleiche quasi die komplette SQL Abfrage, oder? Ich brauche allerdings nur die "LIKE"- Abfrage.
Schätze, LIKE in eine Variable zu packen, bringt nicht viel..
 
Zuletzt bearbeitet:
mysql_query gibt keinen Integer zurück, sondern eine Resultset-Ressource (oder (bool) false bei Fehler). Wenn du die Anzahl der Einträge in diesem Resultset abfragen möchtest, musst du danach darauf ein mysql_num_rows anwenden.

Grob:

Code:
$res = mysql_query("SELECT * FROM beta WHERE code LIKE '" . mysql_real_escape_string($betacode) . "'");
if (mysql_num_rows($res) === 0) {
    // ...

Mir ist übrigens nicht klar, was dein Code tun soll.
 
Naja meine Website bringt eine neue Version heraus. bzw. eröffnet
Damit manche aber schon die neue Version sehen, und testne können, benötigen sie einen solchen Code um die Seite betreten zu können.

Danke für den Code. Hat Anfangs nicht geklappt :
Eine 1 statt 0 hätte hingemusst. Danke :D
 
Zurück
Oben