Eintrag prüfen und auf nächste Seite weiterleiten

CreativPur

Erfahrenes Mitglied
Hi,

wie bekomme ich es hin, wenn ein User einen Code in ein Inputfeld eingibt, dieser in der Datenbank geprüft wird, und wenn vorhanden, dann weiterleiten auf eine weitere Seite.

Meine Datenbank heißt: bewerbungsgutscheincode
Meine Felder:
gutscheincode_id
gutschein_code
aktiv

Mein Versuch:
PHP:
include("../system/head.php");
include("../system/inc/config.inc.php");

$gutschein_code = $_POST['gutschein_code'];

$keycheck = "SELECT gutschein_code FROM bewerbungsgutscheincode WHERE gutschein_code = '".$gutschein_code."'";
    $result = mysql_query($keycheck);
    if(mysql_num_rows($result) == 0)
    {
    echo "<span style='color:red;'>Der eingegebene Gutschein_Code <strong>" .$_POST['gutschein_code']. "</strong> ist nicht vorhanden.</span><br /><br />";
    }
    else
    {
    header("Location: login.php");
    }

html:
Code:
<form action="#" method="post">
        <input type="text" class="form-control" name="gutschein_code" id="gutschein_code">
        <hr />
        <button type="submit" class="btn btn-info">weiter</button>
</form>

Bei diesem Script fallen 2 Fehler auf:
Die Meldung -> "Der eingegebene Gutschein_Code ist nicht vorhanden." ist schon vorhanden, bevor ich etwas eingebe, und wenn ich einen Vorhandenen Code eingebe passiert nichts..

Wo liegt der Fehler ?
 
Hi

Bei diesem Script fallen 2 Fehler auf:
3.

Die Meldung -> "Der eingegebene Gutschein_Code ist nicht vorhanden." ist schon vorhanden, bevor ich etwas eingebe
Das liegt daran, dass bei keiner Eingabe die Query nach gutschein_code='' sucht, was kein Ergebnis hat. Wenn der HTML-Code direkt in der .php ist, wird der PHP-Code immer ausgeführt, daher die Ausgabe.

und wenn ich einen Vorhandenen Code eingebe passiert nichts..
Ebenso: header() muss immer als erstes auf einer Seite ausgeführt werden, es darf keine Ausgabe davor geben (auch kein HTML).

Und 3:
Dieser Code ist ein Paradies für SQL-Injections. Nutze entweder mysqli_real_escape_string oder gleich PDO.

Gruss
cwriter
 
Ich habe es jetzt geändert...

Das Formular (Seite 1):
HTML:
<div class="form-group">
    <label style="color:green;" for="bewerbungsgutscheincode">Geben Sie bitte Ihren Bewerbungsgutscheincode ein!</label>
    <form action="test2.php" method="post">
        <input type="text" class="form-control" name="gutschein_code" id="gutschein_code">
        <hr />
        <button type="submit" class="btn btn-info">weiter</button>
    </form>
</div>

Die Ausgabe (Seite 2):
PHP:
include("../system/inc/config.inc.php");
$gutschein_code = $_POST['gutschein_code'];
$sql = "SELECT gutschein_code FROM bewerbungsgutscheincode WHERE gutschein_code = '".$gutschein_code."'";
    $result = mysql_query($gutschein_code);
    if(mysql_num_rows($result) == 0)
    {
    echo "<span style='color:red;'>Der eingegebene Gutschein_Code <strong>" .$_POST['gutschein_code']. "</strong> ist nicht vorhanden.</span><br /><br />";
    }
    else
    {
    header("Location: login.php");
    }

Gelernt habe ich, dass mann dafür tatsächlich 2 Seiten benötigt, aber funktionieren tut es dennoch nicht..

Jetzt nochmals nach PDO:

PHP:
<?php
    $gutschein_code = htmlspecialchars($_GET['gutschein_code']);
  
  
    $sql = "SELECT gutschein_code FROM bewerbungsgutscheincode WHERE gutschein_code = $gutschein_code";
       $user = $pdo->query($sql)->fetch();
        $result = mysql_query($gutschein_code);
        if(mysql_num_rows($result) == 0)
        {
        echo "<span style='color:red;'>Der eingegebene Bewerbungsgutschein-Code <strong>" .htmlspecialchars($_GET['gutschein_code']). "</strong> ist nicht vorhanden.</span><br /><br />";
        }
        else
        {
        header("Location: login.php");
        }
        
    ?>

Mein Formular:
PHP:
$gutschein_code = $_POST['gutschein_code'];

<form action="test2.php" method="GET">
<label style="color:green;" for="gutschein_code">Geben Sie bitte Ihren Bewerbungsgutscheincode ein!</label>
<input type="text" class="form-control"  name="gutschein_code" id="gutschein_code">
<hr />
<button type="submit" class="btn btn-info">weiter</button>
</form>
 
Zuletzt bearbeitet von einem Moderator:
Jetzt nochmals nach PDO:
Äh. Die Idee sind eigentlich die Prepared Statements: http://php.net/manual/de/pdostatement.bindparam.php

Gelernt habe ich, dass mann dafür tatsächlich 2 Seiten benötigt, aber funktionieren tut es dennoch nicht..
Was funktioniert denn nicht?

Und hast du die Verbindung zum SQL-Server überhaupt schon geöffnet?
Gibt mysql_query() === false zurück?

Gruss
cwriter

/EDIT: Wenn das Formular mit GET gehen soll, dann kannst du natürlich nicht die $_POST-Globale verwenden.
 
ja... Die Verbindung zum SQL-Server besteht...
PHP:
include("../system/inc/config.inc.php");

Gibt mysql_query() === false zurück?
Ich komme auf die "test2.php" und dort wird mir bei der vorigen Eingabe von 123 folgendes auf der "test2.php" ausgegeben ->
Der eingegebene Bewerbungsgutschein-Code 123 ist nicht vorhanden.

Wobei der Code 123 in der Tabelle bewerbungsgutscheincode unter gutschein_code drin ist

Es muss kein GET sein.. Ich versuche es mit POST

Mit POST bekomme ich nur eine leere Seite

Sorry...-
Natürlich musste ich die
PHP:
$gutschein_code = htmlspecialchars($_POST['gutschein_code']);
in POST umwandeln

Jetzt habe ich das gleiche Ergebnis wie bei GET

Um Ordnung rein zu bringen..
1.Seite: Formular
html mit Datenbankverbindung:
PHP:
include("../system/inc/config.inc.php");

$gutschein_code = $_POST['gutschein_code'];

<form action="test2.php" method="POST">
<label style="color:green;" for="gutschein_code">Geben Sie bitte Ihren Bewerbungsgutscheincode ein!</label>
<input type="text" class="form-control"  name="gutschein_code" id="gutschein_code">
<hr />
<button type="submit" class="btn btn-info">weiter</button>
</form>

Seite 2:Ausgabeseite (test2.php)
PHP:
<?php
include("../system/inc/config.inc.php");
?>

<?php include("../site/navi.php"); ?>
<div class="container">
<h3>Bewerbungsgutschein-Code</h3>
<hr />
<?php
$gutschein_code = htmlspecialchars($_POST['gutschein_code']);
   
   
$sql = "SELECT gutschein_code FROM bewerbungsgutscheincode WHERE gutschein_code = $gutschein_code";
$user = $pdo->query($sql)->fetch();
$result = mysql_query($gutschein_code);
if(mysql_num_rows($result) == 0)
{
echo "<span style='color:red;'>Der eingegebene Bewerbungsgutschein-Code <strong style='color:blue;'>" .$gutschein_code. "</strong> ist nicht vorhanden.</span><br /><hr /> <a href='paypal.php'><button type='button' class='btn btn-success btn-xs'>Zurück</button></a>";
}
else
{
header("Location: login.php");
}
?>

</div>
<?php include("../site/footer.php"); ?>

Ausgegeben wird auf test2.php bei einer Eingabe von 456
"Der eingegebene Bewerbungsgutschein-Code 456 ist nicht vorhanden", obwohl der Code existiert.
 
Zuletzt bearbeitet von einem Moderator:
Gibt mysql_query() === false zurück?
Ich komme auf die "test2.php" und dort wird mir bei der vorigen Eingabe von 123 folgendes auf der "test2.php" ausgegeben ->
Der eingegebene Bewerbungsgutschein-Code 123 ist nicht vorhanden.

Wobei der Code 123 in der Tabelle bewerbungsgutscheincode unter gutschein_code drin ist
Die Frage war, ob $result === false ist.
Prüfbar mit
PHP:
if($result === false)
{
    echo "MySQL error";
    return;
}

Ausgegeben wird auf test2.php bei einer Eingabe von 456
"Der eingegebene Bewerbungsgutschein-Code 456 ist nicht vorhanden", obwohl der Code existiert.
Prüfe mal $result (wie schon geschrieben).
Und sollte das nicht mysql_query($sql) (statt mysql_query($gutscheincode)) sein? Du kannst PDO und mysql nicht mischen.

Gruss
cwriter
 
Ich versuche ja mit PDO zu arbeiten.. Leider bin ich noch nicht solo weit.
wenn ich folgendes eingebe..
PHP:
<?php
include("../system/head.php");
include("../system/inc/config.inc.php");

error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
<div class="container">
    <h3>Bewerbungsgutschein-Code</h3>
    <hr />
<?php
    $gutschein_code = htmlspecialchars($_POST['gutschein_code']);
    $statement = "SELECT gutschein_code FROM bewerbungsgutscheincode WHERE gutschein_code = :gutschein_code";
        if($result === false)
{
    echo "MySQL error";
    return;
}
    ?>

</div>

erhalte ich folgenden Fehler-Code..
Notice: Undefined variable: result in /mnt/web122/e3/07/58167107/htdocs/Bewerbungsemail.com/start/users/test2.php on line 15

Jetzt habe ich es mit PDO versucht zu schreiben..
PHP:
$gutschein_code = htmlspecialchars($_POST['gutschein_code']);
   
    $statement = $pdo->prepare("SELECT gutschein_code FROM bewerbungsgutscheincode WHERE gutschein_code = :gutschein_code");
        $result = $statement->execute(array('gutschein_code' => $gutschein_code));
        if(mysql_num_rows($result) == 0)
        {
        echo "<span style='color:red;'>Der eingegebene Bewerbungsgutschein-Code <strong style='color:blue;'>" .$gutschein_code. "</strong> ist nicht vorhanden.</span><br /><hr /> <a href='paypal.php'><button type='button' class='btn btn-success btn-xs'>Zurück</button></a>";
        }
        else
        {
        header("Location: login.php");
        }

Fehlermeldung:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /mnt/web122/e3/07/58167107/htdocs/Bewerbungsemail.com/start/users/test2.php on line 21 Warning: Cannot modify header information - headers already sent by (output started at /mnt/web122/e3/07/58167107/htdocs/Bewerbungsemail.com/start/system/head.php:48) in /mnt/web122/e3/07/58167107/htdocs/Bewerbungsemail.com/start/users/test2.php on line 27

Der Fehler liegt wohl im if .. Den bekomme ich nicht als PDO geschrieben

hierbei...
PHP:
$gutschein_code = htmlspecialchars($_POST['gutschein_code']);
   
$statement = $pdo->prepare("SELECT gutschein_code FROM bewerbungsgutscheincode WHERE gutschein_code = :gutschein_code");
$result = $statement->execute(array('gutschein_code' => $gutschein_code));
if($result === false)
{
echo "MySQL error";
return;
}
zeigt er keine Fehlermeldung
 
Zuletzt bearbeitet von einem Moderator:
und hierbei...
PHP:
$gutschein_code = htmlspecialchars($_POST['gutschein_code']);
   
$statement = $pdo->prepare("SELECT gutschein_code FROM bewerbungsgutscheincode WHERE gutschein_code = :gutschein_code");
$result = $statement->execute(array('gutschein_code' => $gutschein_code));
if(mysql_num_rows($result) == 0)
{
echo "<span style='color:red;'>Der eingegebene Bewerbungsgutschein-Code <strong style='color:blue;'>" .$gutschein_code. "</strong> ist nicht vorhanden.</span><br /><hr /> <a href='paypal.php'><button type='button' class='btn btn-success btn-xs'>Zurück</button></a>";
}
else
{
header("Location: login.php");
}

Fehler:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /mnt/web122/e3/07/58167107/htdocs/Bewerbungsemail.com/start/users/test2.php on line 20
 
hierbei...
PHP:
$next_row = $statement->fetch();
if($next_row === false) {
    //Nothing (more) to fetch
    //Hier dasselbe wie dein get_num_rows == 0 oben
}
else
{
    print_r($next_row);
}


Array ( [gutschein_code] => 123 [0] => 123 )
 
Zurück