php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.12.2005, 00:29  
Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 64
Nosferatu
Nosferatu eine Nachricht über ICQ schicken
Standard Insert Problem mit IP sperre....

Hallo,
ich hab ein kleines Quiz gemacht aber irgendwie läuft das nicht ganz
es werden trozdem die einträge gespeichert mit gleicher IP
aber es sollte dann ne fehler meldung kommen diese passiert aber nicht. er tragt es ein und nach lust und laune tut er es nicht und nach wenigen minuten wenn man alles neu eingibt tut er es wieder weiß aber nicht woran das liegt

Code:
<html>

<body>
<?

if ($submit) 

{
$punkte = 0;

$dip = $_SERVER['REMOTE_ADDR'];

$mysql = mysql_connect("localhost", "user", "pw");
mysql_select_db("database", $mysql);

$query = "SELECT * FROM quiz WHERE ip = $dip"; 
$resultt = mysql_query($query, $mysql); 

$rew = mysql_fetch_array($resultt);

$ip = $rew['ip'];

if($ip == "$dip")
{
echo "Sry IP vorhanden";
}
else
{
echo "OK"
$ip = $dip;
}

if($f1 == "4") {
$punkte = $punkte + 1;
}
else
{
$punkte = $punkte + 0;
}

if($f2 == "Essbesteck")
{
$punkte = $punkte + 1;
}
else
{
$punkte = $punkte + 0;
}

if(($name <> "") && ($email <> "") && ($ip <> "") && ($punkte <> ""))
{
$db = mysql_connect("localhost", "user", "pw");

mysql_select_db("database", $db);

$sql = "INSERT INTO quiz (name,email,datum,ip,punkte) 

VALUES('$name', '$email', now(), '$ip', '$punkte')";

$result = mysql_query($sql,$db);

echo "Vielen Dank!
";
echo "<a href=\"hall.php\">Hall of Fame</a>";
}else { echo "Sie haben schon Mitgespielt"; }
}
else
?>


<form method="post" <?php echo "action=quiz.php"; ?>>

<table border="0">

<tr><td>Spieler: </td><td><input type="text" name="name" value="<? echo $name ?>" size="20"></td></tr>

<tr><td>E-Mail: </td><td><input type="text" name="email" value="<? echo $email ?>" size="20"></td></tr>

<tr><td> Frage 1</td><tr>
<tr><td> wie viel ist 2+2</tr></td>
<tr><td><input type="radio" name="f1" value="4">4

        <input type="radio" name="f1" value="3">3

        <input type="radio" name="f1" value="2">2</td></tr>




<tr><td> Frage 2</td><tr>
<tr><td> Was ist eine Gabel</tr></td>
<tr><td><input type="radio" name="f2" value="Essen">Essen

        <input type="radio" name="f2" value="Essbesteck">Essbesteck
</td></tr>
<input type="submit" name="submit" value="Fertig">


</form>
</body>

</html>
Nosferatu ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.12.2005, 00:57  
Erfahrener Benutzer
 
Registriert seit: 20.08.2007
Beiträge: 347
CHRIS befindet sich auf einem aufstrebenden Ast
Standard

Also als erstes würde ich nicht
$dip = $_SERVER['REMOTE_ADDR'];

und bei der abfrage einfach
$query = "SELECT * FROM quiz WHERE ip = '$_SERVER[REMOTE_ADDR]'";

und dann
if($rew['ip'] == $_SERVER['REMOTE_ADDR'])

Dann würde ich den Connect zur Datenbank in ne function hauen und nit jedes mal schreiben ... das ist unnötig!

Und $punkte = $punkte + 1; kannst du auch
$punkte++; schreiben!
CHRIS ist offline  
Alt 22.12.2005, 10:02  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Warum benutzt du nicht die BBCode PHP-Tags?

PHP-Code:
<html>
<body>
<?php // benutz <?php und nicht nur <?
if ($submit// siehe *1
{
$punkte 0;
$dip $_SERVER['REMOTE_ADDR']; // wozu eine Variable kopieren?
$mysql mysql_connect("localhost""user""pw"); // *2
mysql_select_db("database"$mysql);

$query "SELECT * FROM quiz WHERE ip = $dip"// *3
$resultt mysql_query($query$mysql); // das 2. Argument ist optional und wenn du nicht mehrere Datenbankverbindungen geöffnet hast nicht nötig

$rew mysql_fetch_array($resultt); // wozu (absichtlich) resultt mit doppel-T?

$ip $rew['ip']; // wozu wieder eine Kopie anlegen?

if($ip == "$dip"// wozu die Anführungszeichen?
{
echo 
"Sry IP vorhanden";
}
else
{
echo 
"OK"
$ip $dip;
}

if(
$f1 == "4") { // Zahlenvergleiche ohne "
$punkte $punkte 1// $punkte++
}
else
{
$punkte $punkte 0// sinnlos, weglassen
}

if(
$f2 == "Essbesteck")
{
$punkte $punkte 1// siehe oben
}
else
{
$punkte $punkte 0// s.o.
}

if((
$name <> "") && ($email <> "") && ($ip <> "") && ($punkte <> "")) // *4
{
$db mysql_connect("localhost""user""pw"); // wozu das?
mysql_select_db("database"$db); // nur zum DB wechseln brauchst du keine neue Verbindung?

$sql "INSERT INTO quiz (name,email,datum,ip,punkte)

VALUES('$name', '$email', now(), '$ip', '$punkte')"
// wenn du SQL Befehle groß schreibst, dann alle, auch NOW()

$result mysql_query($sql,$db);

echo 
"Vielen Dank!
"
// bitte
echo "<a href=\"hall.php\">Hall of Fame</a>";
}else { echo 
"Sie haben schon Mitgespielt"; }
}
else 
// fehlt hier nicht ne Klammer auf?
?>


<form method="post" <?php echo "action=quiz.php"?>

<table border="0">

<tr><td>Spieler: </td><td><input type="text" name="name" value="<?php echo $name ?>" size="20"></td></tr>

<tr><td>E-Mail: </td><td><input type="text" name="email" value="<?php echo $email ?>" size="20"></td></tr>

<tr><td> Frage 1</td><tr>
<tr><td> wie viel ist 2+2</tr></td>
<tr><td><input type="radio" name="f1" value="4">4

        <input type="radio" name="f1" value="3">3

        <input type="radio" name="f1" value="2">2</td></tr>




<tr><td> Frage 2</td><tr>
<tr><td> Was ist eine Gabel</tr></td> 
<tr><td><input type="radio" name="f2" value="Essen">Essen

        <input type="radio" name="f2" value="Essbesteck">Essbesteck
</td></tr>
<input type="submit" name="submit" value="Fertig">


</form>
</body>

</html>
*1 stelle register_globals bitte auf off und verwende statt $submit das $_POST['submit']. Warum:
http://www.heddesheimer.de/coaching/register.html
(weiß nicht ob die Seite gut ist, scheint aber die Problematik darzustellen)

*2 Pack den Datenbankverbindungsaufbau in eine Funktion die du in eine
extra Datei auslagerst, z.B. func.dbConnect.php. Diese kannst du per
require_once einbinden. Das
hat den Vorteil, dass du Änderungen des Passwortes oder MySQL-Servers
zentral an einer Datei und nicht in zig Skripten ändern musst. Außerdem
versucht ein Programmierer immer, doppelte Codeelemente zu
vermeiden, da Änderungen sonst mehrfach vorgenommen werden
müssen.
Außerdem sei dir zu empfehlen, dass man üblicherweise schreibt
PHP-Code:
<?php
mysql_connect
(xyz) or die("Fehler: ".mysql_error());
?>
*3 Dein SQL Befehl könnte dann so aussehen: "SELECT x FROM y WHERE
ip = 12.34.56.78". Wo sind die Anführungszeichen?

*4 siehe empty()

Fazit: Dein Skript ist unsauber und daher für mich nicht wirklich
nachzuvollziehen wo der Fehler ist. Wahrscheinlich an *3
Zergling-new ist offline  
Alt 22.12.2005, 10:37  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Das meiste hat Zergling schon gesagt. Fast noch wichtiger, als die richtigen Tags zu verwenden finde ich ein anständiges
Einrücken des Codes. Ausserdem genügt es ja, abzufragen ob die IP schon existiert.
Ich habe den Code mal etwas angepasst und überflüssiges auskommentiert:
PHP-Code:
<?
echo "<html>
          <body>"
;
if (
$submit)
{
    
$punkte 0;
    
$dip $_SERVER['REMOTE_ADDR'];

    
$mysql mysql_connect("localhost""user""pw");
    
mysql_select_db("database");

    
$query "SELECT ip FROM quiz WHERE ip = '$dip'";        
    
$resultt mysql_query($query) or die(mysql_error();
    
$anz mysql_num_rows($resultt);
//    $rew = mysql_fetch_array($resultt);
//    $ip = $rew['ip'];

//    if($ip == "$dip")
    
if($anz 0)
    {
        echo 
"Sry IP vorhanden";
    }
    else
    {
        echo 
"OK"
        
$ip $dip;   
    }
    if(
$f1 == "4") {
        
$punkte $punkte 1;
    }
//    else
//    {
//        $punkte = $punkte + 0;
//    }

    
if($f2 == "Essbesteck")
    {
        
$punkte $punkte 1;
    }
//    else
//    {
//        $punkte = $punkte + 0;
//    }
//    if(($name <> "") && ($email <> "") && ($ip <> "") && ($punkte <> ""))
    
if((!empty($_POST['name']) && !empty($_POST['email']) && !empty($ip))
    {
//        $db = mysql_connect("localhost", "user", "pw"); // ist ja schon verbunden
//        mysql_select_db("database", $db);
        
$sql "INSERT INTO quiz (name, email, datum, ip, punkte)
                VALUES('$name', '$email', now(), '$ip', $punkte)"
;
        
$result mysql_query($sql)) or die(mysql_error();
        echo 
"Vielen Dank!
"
;
        echo 
"<a href=\"hall.php\">Hall of Fame</a>";
    }
    else 
    { 
        echo 
"Sie haben schon Mitgespielt";
    }
}
else
{
?>
    <form method="post" action="quiz.php">

    <table border="0">

    <tr><td>Spieler: </td><td><input type="text" name="name" value="<? echo $name ?>" size="20"></td></tr>
    <tr><td>E-Mail: </td><td><input type="text" name="email" value="<? echo $email ?>" size="20"></td></tr>

    <tr><td> Frage 1</td><tr>
    <tr><td> wie viel ist 2+2</tr></td>
    <tr><td><input type="radio" name="f1" value="4">4

            <input type="radio" name="f1" value="3">3

            <input type="radio" name="f1" value="2">2</td></tr>
    

    

    <tr><td> Frage 2</td><tr>
    <tr><td> Was ist eine Gabel</tr></td>
    <tr><td><input type="radio" name="f2" value="Essen">Essen

            <input type="radio" name="f2" value="Essbesteck">Essbesteck
</td></tr>
    <input type="submit" name="submit" value="Fertig">


    </form>
    </body>

    </html>
<?
}
?>
Noch zwei Bemerkungen:
  • Die Abfrage auf die IP-Adresse ist doch recht unsicher, alle die über den gleichen Router kommen haben auch die
    gleiche IP-Adresse. Ich denke, eine Überprüfung der Email-Adresse wäre zuverlässiger. Wenn du aber ganz sicher
    sein willst, dann brauchst du ein en Login.
    Woher sollen die Variablen $name und $email im unteren Teil kommen?
__________________
Gruss
L
lazydog ist offline  
Alt 22.12.2005, 22:42  
Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 64
Nosferatu
Nosferatu eine Nachricht über ICQ schicken
Standard

Ich danke euch sehr.
ja ich weiß das ich funktionen in ne extra datei schreiben könnt und so aber das soll nur ein einfaches script werden ohne irgendwas anderes

aber @lazydog
ich hab den code von dir jetzt mal genommen da war noch ein ; und ein ) fehler aber trozdem wird ähm nichts angezeigt es bleibt alles weiß.

warum?
Nosferatu ist offline  
Alt 28.12.2005, 23:26  
Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 64
Nosferatu
Nosferatu eine Nachricht über ICQ schicken
Standard

so das ist nun die version ohne den // und ohne den 3 fehlern

aber es wird jetzt nichts mehr angezeigt nur waurm versteh ich nicht mehr.


Code:
<?php 
echo "<html> 
      <body>"; 

if (submit) 
{ 
    $punkte = 0; 
    $dip = $_SERVER['REMOTE_ADDR']; 

    $mysql = mysql_connect("localhost", "user", "pw"); 
    mysql_select_db("db"); 

    $query = "SELECT ip FROM quiz WHERE ip = '$dip'";         
    $resultt = mysql_query($query) or die(mysql_error()); 
    $anz = mysql_num_rows($resultt); 

    if($anz > 0) 
    { 
        echo "Sry IP vorhanden"; 
    } 
    else 
    { 
        echo "OK"; 
        $ip = $dip;    
    } 

    if($f1 == "4") { 
        $punkte = $punkte + 1; 
    } 

    if($f2 == "Essbesteck") 
    { 
        $punkte = $punkte + 1; 
    } 
    if((!empty($_POST['name']) && !empty($_POST['email']) && !empty($ip)) 
    { 
        $sql = "INSERT INTO quiz (name, email, datum, ip, punkte) 
                VALUES('$name', '$email', now(), '$ip', '$punkte')"; 
        $result = mysql_query($sql) or die(mysql_error()); 
        echo "Vielen Dank!
"; 
        echo "<a href=\"hall.php\">Hall of Fame</a>"; 
    } 
    else  
    {  
        echo "Sie haben schon Mitgespielt"; 
    } 
} 
else 
{ 
php?> 
    <form method="post" action="quiz.php"> 

    <table border="0"> 

    <tr><td>Spieler: </td><td><input type="text" name="name" value="<? echo $name ?>" size="20"></td></tr> 
    <tr><td>E-Mail: </td><td><input type="text" name="email" value="<? echo $email ?>" size="20"></td></tr> 

    <tr><td> Frage 1</td><tr> 
    <tr><td> wie viel ist 2+2</tr></td> 
    <tr><td><input type="radio" name="f1" value="4">4
 
            <input type="radio" name="f1" value="3">3
 
            <input type="radio" name="f1" value="2">2</td></tr> 
    
 
    
 
    <tr><td> Frage 2</td><tr> 
    <tr><td> Was ist eine Gabel</tr></td> 
    <tr><td><input type="radio" name="f2" value="Essen">Essen
 
            <input type="radio" name="f2" value="Essbesteck">Essbesteck
</td></tr> 
    <input type="submit" name="submit" value="Fertig"> 


    </form> 
    </body> 

    </html> 
<?php
} 
php?>
Nosferatu ist offline  
Alt 29.12.2005, 09:32  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Zergling
Warum benutzt du nicht die BBCode PHP-Tags?
[..]
*1 stelle register_globals bitte auf off und verwende statt $submit das $_POST['submit']. Warum:
http://www.heddesheimer.de/coaching/register.html
(weiß nicht ob die Seite gut ist, scheint aber die Problematik darzustellen)
Hast du mein Posting überhaupt gelesen?

Zitat:
Zitat von Nosferatu
aber es wird jetzt nichts mehr angezeigt nur waurm versteh ich nicht mehr.
Nichts kann wohl schlecht sein, denn du fängst jeden Zustand mit deinen else-Konstrukten ab, zumindest soweit ich das jetzt gesehen habe.
Wenn du in ein else kommst, ist logischerweise deine if-Bedingung unwahr.
Zergling-new ist offline  
Alt 29.12.2005, 10:06  
Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 64
Nosferatu
Nosferatu eine Nachricht über ICQ schicken
Standard

register_globals auf off macht mein hoster nicht

und ich hab das jetzt geändert $_POST['submit'] nur es wird rein gar nichts auf der seite angezeigt der bildschirm bleibt weiß.
Nosferatu ist offline  
Alt 29.12.2005, 10:20  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Zitat:
Zitat von Nosferatu
und ich hab das jetzt geändert $_POST['submit'] nur es wird rein gar nichts auf der seite angezeigt der bildschirm bleibt weiß.
Hast du dir mal den resultierenden HTML-Quelltext angesehen? Wie sieht der aus? Ist display_errors aktiviert? Steht auf error_reporting auf E_ALL?
xabbuh ist offline  
Alt 29.12.2005, 10:24  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Häng mal ein
Code:
error_reporting(E_ALL);
an den Anfang der Datei, und du wirst eine ganze Reihe Fehlermeldungen erhalten, z.B.
Code:
Notice: Use of undefined constant php - assumed 'php' in ...\quiz.php on line ..
weil PHP-Code mit
Code:
?>
und nicht mit
Code:
php?>
beendet wird, oder über nicht definierte Variablen. Dann versuch mal diese Fehler zu eliminieren.
__________________
Gruss
L
lazydog ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Mysql Insert Select + Concat Hu5eL Datenbanken 14 10.06.2008 10:39
Self Join / Nested Join ? Ich hab ne Blockade... iangillan Datenbanken 11 06.01.2008 21:37
Verständnisprobleme bei Utf8 > Character Set > Collate erna Datenbanken 4 20.03.2007 14:08
Problem bei Volltextsuche rabatz Datenbanken 1 17.08.2006 14:05
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
Problem mit WHERE bei SELECT-Abfrage Adonis Datenbanken 6 04.05.2006 14:14
Problem mit INSERT und variablen. dattelpalme PHP Tipps 2006 1 10.04.2006 22:12
Insert into problem. PHP Tipps 2005-2 8 05.07.2005 11:00
Insert Script Problem PHP Tipps 2005 11 08.04.2005 20:53
Problem mit Formular übergabe b++ PHP Tipps 2005 6 04.04.2005 14:19
Problem mit MySQL-Tabelle und INSERT El Barto Datenbanken 1 14.02.2005 12:22
download und Insert problem! PHP Tipps 2004 4 04.09.2004 16:51
Insert problem stefan-miti PHP Tipps 2004 6 22.08.2004 16:19
[Erledigt] Insert Problem Datenbanken 2 22.08.2004 00:59
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
$_server[\'remote_addr\'] \use of undefined constant remote_addr\, insert einer ip, use of undefined constant remote_addr - assumed \'remote_addr\', formular mit ip-sperre php, adonis sql user

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.