| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

06-02-2009, 13:19
|
|
Maclaim
Registrierter Benutzer
|
|
Registriert seit: Oct 2006
Beiträge: 28
|
|
Probelm mit einer IF Anweisung
Hallo Leute,
ich habe eine Problem mit meiner IF Anweisung... es wird jedes mal einen Eintrag in die DB gemacht.. und es wird nicht mehr geprüft ob die IP schon vorhanden ist..
Ansonsten funktioniert alles in dem Script..
ich benutze diese Anweisung:
if(Bedingung)
{ Anweisung }
else { Anweisung }
?>
das ist mein Script!
PHP-Code:
include "connect.php"; // Datei connect.php wir eingebunden,
// damit bekomme ich eine Verbindung zu DB!
// Variable wird überprüft bwz. SGL Injections
$_REQUEST['Name'] = mysql_real_escape_string($_REQUEST['Name']);
$_REQUEST['Titel'] = mysql_real_escape_string($_REQUEST['Titel']);
$_REQUEST['Eintrag'] = mysql_real_escape_string($_REQUEST['Eintrag']);
if (
// Das ist die SQL-Abfrage ob ein ebestimmte IP schon vorhaden ist
$sql = "SELECT IP
FROM Gaestebuch
WHERE IP = '".$_SERVER['REMOTE_ADDR']."' LIMIT 1")
{ // Das passiert wenn die SQL-Abfrage true ist
$SQL = "INSERT INTO Gaestebuch
(Datum, Name, Titel, Eintrag, IP)
VALUES (NOW(''),
'".$_REQUEST['Name']."',
'".$_REQUEST['Titel']."',
'".$_REQUEST['Eintrag']."',
'".$_SERVER['REMOTE_ADDR']."'
)";
mysql_query($SQL, $DatabasePointer);
if(mysql_affected_rows($DatabasePointer) == 1) {
echo "Es wurde", mysql_affected_rows($DatabasePointer), "Datensatz hinzugefuegt<br /><br />";
echo "Ihr IP-Adresse", $_SERVER['REMOTE_ADDR'], "wird gespeichert damit kein Missbrauch entsteht!";
}
else {
echo ('Error: ' . mysql_error());
}
}
else { // Das passiert wenn die SQL-Abfrage falseist
$result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
if(mysql_num_rows($result)) {
echo "<p class=\"content\">\n".
"Sie haben gerade einen Eintrag hinterlassen. Sie koennen nichts mehr eintragen.\n".
"</p>\n";
}
}
Nur so nebenbei falls jemand was in dem Script auffällt was nicht sicher ist (SQL Injections) oder so dann schreibt es bitte einfach dazu, ich kann darauf nur lernen!
Cu Andreas
Geändert von Maclaim (06-02-2009 um 13:21 Uhr)
|

06-02-2009, 13:35
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
PHP-Code:
if (
// Das ist die SQL-Abfrage ob ein ebestimmte IP schon vorhaden ist
$sql = "SELECT IP
FROM Gaestebuch
WHERE IP = '".$_SERVER['REMOTE_ADDR']."' LIMIT 1")
Ist immer TRUE obwohl die Abfrage NIE durchgeführt wird....
Wozu wurden wohl mysql_query() usw erfunden?
|

06-02-2009, 17:09
|
|
Maclaim
Registrierter Benutzer
|
|
Registriert seit: Oct 2006
Beiträge: 28
|
|
Ja ich habe mir das mal angeschaut und habs jetzt bissel umgeschrieben... also so funktionierts jetzt :-)
Ist bestimmt nicht die beste und sicherste Lösung aber ok.. denke ich ;-)
PHP-Code:
<?php
include "connect.php"; // Verbindung zu DB wird eingebunden!
//Es wirs auf eine mögliche SGL Injection überprüft!
$_REQUEST['Name'] = mysql_real_escape_string($_REQUEST['Name']);
$_REQUEST['Titel'] = mysql_real_escape_string($_REQUEST['Titel']);
$_REQUEST['Eintrag'] = mysql_real_escape_string($_REQUEST['Eintrag']);
{
//Die Funktion mysql_query sendet eine MySQL-Anweisung
$SQL = mysql_query("
SELECT IP
FROM Gaestebuch
WHERE IP = '".$_SERVER['REMOTE_ADDR']."'");
// Mysql_num_rows gibt die Anzahl der Datensätze (Zeilen) zurück!
if (mysql_num_rows($SQL) == 1)
{ // Die Überprüfung ist True und der Text wird mit echo ausgegben!
echo "Du kannst nur 1mal einen Eintrag machen!";
}
else
{ // Die Überprüfung war False und es wir ein Eintrag in GB gemacht
$SQL = "INSERT INTO
Gaestebuch
(Datum, Name, Titel, Eintrag, IP)
VALUES( NOW(''),
'".$_REQUEST['Name']."',
'".$_REQUEST['Titel']."',
'".$_REQUEST['Eintrag']."',
'".$_SERVER['REMOTE_ADDR']."'
)";
//Die Funktion mysql_query sendet eine MySQL-Anweisung
mysql_query($SQL, $dz);
//Liefert die Anzahl betroffener Datensätze einer vorhergehenden MySQL Operation
if(mysql_affected_rows($dz) == 1)
{
echo "Es wurde", mysql_affected_rows($dz), "Datensatz hinzugefuegt<br />";
echo "Ihr IP-Adresse", $_SERVER['REMOTE_ADDR'], "wird gespeichert damit kein Missbrauch entsteht!";
}
else
{
echo ('Error: ' . mysql_error());
}
} // Die Überprüfung war False und es wir ein Eintrag in GB gemacht BEENDET
}
?>
|

06-02-2009, 18:54
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
also wenn das der original-code ist, dann sollte dir der parser eigentlich eine fehlermeldung um die ohren hauen.
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

07-02-2009, 12:54
|
|
php_fussel
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 120
|
|
Mmmmh ... ich fang mal an!
Anstatt ...
PHP-Code:
include "connect.php";
... besser ...
PHP-Code:
require_once ("connect.php");
Poste doch bitte mal Deine 'connect.php'!
Gruß php_fussel
|

07-02-2009, 13:50
|
|
Maclaim
Registrierter Benutzer
|
|
Registriert seit: Oct 2006
Beiträge: 28
|
|
So hier ist meine 'connect.php'
PHP-Code:
<?php
$host = "aaa";
$user = "aaa";
$pass = "aaa";
$database = "aaa";
$dz = mysql_connect ($host, $user, $pass) or die(mysql_error());
mysql_select_db ($database, $dz) or die(mysql_error());
?>
Übrigens meine neue insert.php falls mir noch jemand nen tipp geben kann ich freue mich
PHP-Code:
<?php
// Verbindung zu DB wird eingebunden!
require_once ("connect.php");
if (empty ($_POST['Name']) . empty($_POST['Titel']) . empty($_POST['Eintrag'])) {
echo "Bitte fuellen sie alle Felder aus!";
}
else
{ //Es wirs auf eine mögliche SGL Injection überprüft!
$_REQUEST['Name'] = mysql_real_escape_string($_REQUEST['Name']);
$_REQUEST['Titel'] = mysql_real_escape_string($_REQUEST['Titel']);
$_REQUEST['Eintrag'] = mysql_real_escape_string($_REQUEST['Eintrag']);
{ //Die Funktion mysql_query sendet eine MySQL-Anweisung
$SQL = mysql_query("
SELECT IP
FROM Gaestebuch
WHERE IP = '".$_SERVER['REMOTE_ADDR']."'");
// Mysql_num_rows gibt die Anzahl der Datensätze (Zeilen) zurück!
if (mysql_num_rows($SQL) == 1)
{ // Die Überprüfung ist True und der Text wird mit echo ausgegben!
echo "Du kannst nur 1mal einen Eintrag machen!";
}
else
{ // Die Überprüfung war False und es wir ein Eintrag in GB gemacht
$SQL = "INSERT INTO
Gaestebuch
(Datum, Name, Titel, Eintrag, IP)
VALUES( NOW(''),
'".$_REQUEST['Name']."',
'".$_REQUEST['Titel']."',
'".$_REQUEST['Eintrag']."',
'".$_SERVER['REMOTE_ADDR']."'
)";
//Die Funktion mysql_query sendet eine MySQL-Anweisung
mysql_query($SQL, $dz);
//Liefert die Anzahl betroffener Datensätze einer vorhergehenden MySQL Operation
if(mysql_affected_rows($dz) == 1) {
echo "Es wurde", mysql_affected_rows($dz), "Datensatz hinzugefuegt<br />";
echo "Ihr IP-Adresse", $_SERVER['REMOTE_ADDR'], "wird gespeichert damit kein Missbrauch entsteht!";
}
else
{echo ('Error: ' . mysql_error());}
} // Die Überprüfung war False und es wir ein Eintrag in GB gemacht BEENDET
}
}
?>
<a href="gaestebuch.php">Einträge</a>
Geändert von Maclaim (07-02-2009 um 14:10 Uhr)
|

07-02-2009, 16:42
|
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
PHP-Code:
if (empty ($_POST['Name']) . empty($_POST['Titel']) . empty($_POST['Eintrag'])) {
Ich glaube hier wäre etwas Grundlagenforschung angebracht. 
Der Punkt ist ein Verkettungsoperator und konkateniert damit mehrere Ausdrücke. Was du eigentlich suchst, ist ein Vergleichsoperator, und zwar das logische Oder.
Grüße
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|