php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 31-07-2009, 14:48
thx-sound
 Registrierter Benutzer
Links : Onlinestatus : thx-sound ist offline
Registriert seit: May 2009
Ort: Stuhr
Beiträge: 29
thx-sound befindet sich auf einem aufstrebenden Ast
Standard Problem mit if mysql abfrage ob wert vorhanden

Hi,

habe leider ein Merkwürdiges problem festgestellt in meiner 2. if abfrage.

In der 2. If Abfrage soll geprüft werden ob der Wert "input" in der Datenbank "bewertungen" in der spalte "userid" vorhanden ist.

userid hat in meiner sql der Primärschlüssel.

In userid stehen in der Datenbank die Usernummern.



Folgendes merkwürdiges problem tritt auf:

Wenn anstelle von IRGENDEINER Zahl ein Buchstabe oder mehrere Buchstaben übergeben werden, meint die 2. if abfrage das der übergebene Wert vorhanden ist und löst den else dadrunter aus.
Wenn nur irgend eine Zahlenkombination wie 123456789 (die nicht in der Datenbank ist) übergeben wird, verhält sich diese if abfrage korrekt und gibt die korrekte Fehlermeldung aus.


Beim Script Aufruf wird normalerweise der Wert "user" übergeben welcher dann zu "input" wird.



PHP-Code:
$dbconnect=mysql_connect("SERVER","SQLNUTZER","SQLPASSWORT");
$dbusername "SQLDBUSER";
$dbtable "bewertungen";
$dbsuchspalte "userid";
$input $_GET['user'];
$inputvorschlag "userid";
$inputvorschlag2 "USERID";


if(
$input!="")
{

mysql_select_db($dbusername$dbconnect);

$sql_checkbefehl="SELECT $dbsuchspalte FROM $dbtable WHERE $dbsuchspalte =" $input;
$checkergebnis=mysql_query($sql_checkbefehl,$dbconnect) OR die(mysql_error());

if (
mysql_num_rows($checkergebnis)==OR $input==$inputvorschlag OR $input==$inputvorschlag2)
    {
ausgabe wenn user nicht in der Datenbank oder gleich ist mit inputvorschlag und imputvorschlag2 
    
}

else
     { 
ausgabe wenn user in Datenbank vorhanden
     
}




}
else
    {
Ausgabe wenn kein Wert für input übergeben wurde 
    

Ich hoffe ihr könnt mir damit weiterhelfen, da ich unbedingt die Fehlermeldung ausgeben muss.
Gibt leider einige "tölpel" die ihrem usernamen anstelle der userid beim script aufruf verwenden. Und das trotzt das ich eine userid Liste bereitstelle mit fertigen script aufruf -.-

Geändert von thx-sound (31-07-2009 um 14:51 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 31-07-2009, 15:01
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von thx-sound Beitrag anzeigen
Wenn anstelle von IRGENDEINER Zahl ein Buchstabe oder mehrere Buchstaben übergeben werden, [...]
... dann wird dein SQL-Statement dadurch augenblicklich fehlerhaft; schliesslich hast du keinerlei Kontrolle des Wertes auf Gültigkeit vorgesehen.

Dass dein Script dann noch weiter als bis zum OR die(mysql_error()); kommen soll, kann ich mir schwer vorstellen.


Btw: Die zusätzlichen Bedingungen, die du in diesem if auch noch drin hast, finde ich an dieser Stelle höchst unsinnig untergebracht. Wenn "userid" oder "USERID" als Suchbegriff übergeben wurden, dann willst du doch vermutlich gar nicht in der Datenbank suchen, weil das unsinnige (Default-?)Werte sind - warum tust du's dann trotzdem?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 31-07-2009, 15:10
thx-sound
 Registrierter Benutzer
Links : Onlinestatus : thx-sound ist offline
Registriert seit: May 2009
Ort: Stuhr
Beiträge: 29
thx-sound befindet sich auf einem aufstrebenden Ast
Standard

ich möchte nicht wirklich nach dem "userid" oder "USERID" suchen lassen.

in der Musteraufruf Vorlage steht eben "userid" an der stelle wo dann die userid von dme user selbst gesetzt werden soll. Und wenn jemand ausversehen nur das als Url eingibt soll ja auch ne fehlermeldung ausgegeben werden

ich kann es natürlich anders herum stellen:

PHP-Code:
if ($input==$inputvorschlag OR $input==$inputvorschlag2 OR mysql_num_rows($checkergebnis)==
Aber das hat ja kein einfluss auf eine falsche userid.


Wie es anders gehen soll weiß ich leider nicht. Habe keine ahnung. War froh das ich mit hilfe einiger user das gesamt script zum laufen bekommen hatte.
Die Abfrage wurde mir ja schon halbwegs hier aus dem Forum generiert vor 2 Monaten. Allerdings hat sich das Script ziemlich verändert seit damals...




Also momentan erhalte ich als fehlerausgabe beim scriptaufruf mit einen text als "user" :


Unknown column 'irgendeintext' in 'where clause'



Allerdings kann ich nicht 100% sagen ob sich das nicht schon auf die mysqlabfrage bezieht die in der else ist für die ausgabe der Daten.




Was ich natürlich einfach machen könte., ich könte den übergebenen Wert nach Buchstaben durchsuchen lassen und diese gegen igend eine zahl austauschen.
Aber das ist glaube ich nicht im sinn und zweck für eine if abfrage. Sowas hatte ich gemacht um einen vernünftigen Dateinamen aus dem generierten Bild zum abspeichern zu bekommen, da dort nicht die userid zum einsatz kommen soll..

Geändert von thx-sound (31-07-2009 um 15:28 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 31-07-2009, 15:27
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von thx-sound Beitrag anzeigen
ich kann es natürlich anders herum stellen:
PHP-Code:
if ($input==$inputvorschlag OR $input==$inputvorschlag2 OR mysql_num_rows($checkergebnis)==
Genauso unsinnig - wieso willst du zuerst die Datenbank-Abfrage machen, wenn der Suchwert "userid" lautet?

Mach sie in dem Fall gar nicht erst!

Zitat:
Also momentan erhalte ich als fehlerausgabe beim scriptaufruf mit einen text als "user" :

Unknown column 'irgendeintext' in 'where clause'

Allerdings kann ich nicht 100% sagen ob sich das schon auf die mysqlabfrage bezieht
Natürlich tut es das.

Und natürlich hast du bei der Fehlersuche ja auch eine Kontrollausgabe der Query gemacht - so wie die aussieht, sollte dir daran doch etwas auffallen ...?

Zitat:
Was ich natürlich einfach machen könte., ich könte den übergebenen Wert nach Buchstaben durchsuchen lassen und diese gegen igend eine zahl austauschen.
Das wäre ja noch blödsinniger - dann kommt am Ende noch ein Suchtreffer heraus, trotz abwegigem Suchwert.

Entweder schreibst du die Abfrage so, dass sie auch mit Buchstaben umgehen kann (und dann einfach nur keinen Wert liefert);
oder du prüfst den Wert vorher auf Gültigkeit - und machst dann gar nicht erst eine Abfrage, wenn er nicht gültig ist. (Das ist dann prinzipiell wieder das gleiche, wie mit dem Wert 'userid' - warum danach überhaupt erst suchen lassen, wenn danach zu suchen nicht im geringsten einen Sinn ergibt?)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #5 (permalink)  
Alt 31-07-2009, 15:39
thx-sound
 Registrierter Benutzer
Links : Onlinestatus : thx-sound ist offline
Registriert seit: May 2009
Ort: Stuhr
Beiträge: 29
thx-sound befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Genauso unsinnig - wieso willst du zuerst die Datenbank-Abfrage machen, wenn der Suchwert "userid" lautet?

Mach sie in dem Fall gar nicht erst!


Natürlich tut es das.

Und natürlich hast du bei der Fehlersuche ja auch eine Kontrollausgabe der Query gemacht - so wie die aussieht, sollte dir daran doch etwas auffallen ...?


Das wäre ja noch blödsinniger - dann kommt am Ende noch ein Suchtreffer heraus, trotz abwegigem Suchwert.

Entweder schreibst du die Abfrage so, dass sie auch mit Buchstaben umgehen kann (und dann einfach nur keinen Wert liefert);
oder du prüfst den Wert vorher auf Gültigkeit - und machst dann gar nicht erst eine Abfrage, wenn er nicht gültig ist. (Das ist dann prinzipiell wieder das gleiche, wie mit dem Wert 'userid' - warum danach überhaupt erst suchen lassen, wenn danach zu suchen nicht im geringsten einen Sinn ergibt?)




Sorry ich steige bei deinen Text nicht wirklich durch.

Ich will ja quasi mit der checkabfrage Prüfen ob der Wert gültig ist in dem ich überprüfe ob der in der Datenbank ist.

Mir ist inzwischen schon klar geworden das es wohl der Falsche sql abruf ist, aber ich weiß nicht wie ich es anders Prüfen kann ob der Wert in der datenbank ist.
ich fand es schon immer merkwürdig das da am ende ein = . $input in der sql abfrage für das überprüfen steht und nicht irgend wo weiter vorne


Wenn ich es besser wüßte wie es geht, würde ich garnicht erst Fragen.


Gruss Stefan
Mit Zitat antworten
  #6 (permalink)  
Alt 31-07-2009, 15:55
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von thx-sound Beitrag anzeigen
Ich will ja quasi mit der checkabfrage Prüfen ob der Wert gültig ist in dem ich überprüfe ob der in der Datenbank ist.
Das ist so, als ob du ins Telefonbuch schauen würdest, um zu "prüfen", ob 12345678 ein in Deutschland vorkommender Familienname ist ...

Zitat:
ich fand es schon immer merkwürdig das da am ende ein = . $input in der sql abfrage für das überprüfen steht und nicht irgend wo weiter vorne
Nein, das ist nicht merkwürdig, sondern normale SQL-Syntax.
Was du dabei nicht berücksichtigst ist aber, dass MySQL wie auch andere Sprachen wie bspw. PHP, Zahlenwerte anders notiert als Textstrings.

Zitat:
Wenn ich es besser wüßte wie es geht, würde ich garnicht erst Fragen.
Und wenn du dir mal ein bisschen Grundlagenwissen aneignen würdest, statt dir per Copy&Paste irgendwas zusammenzubasteln, was vielleicht zufällig am Ende mal "funktioniert" - dann bräuchtest du gar nicht erst fragen.


Also, überlege dir, wie du vorgehen willst.

Willst du das ganze simpel so schreiben, dass die Datenbank "alles mögliche" vorgesetzt bekommt? Dann informiere dich, wie der Wert in der WHERE-Klausel so unterzubringen ist, dass auch Buchstaben dort nicht die Syntax zerstören.

Oder willst du vorher prüfen, so dass du alles, was gar keine Zahl ist, gar nicht erst an die Datenbank schickst?
Dann überlege dir auch dazu, a) wie diese Prüfung aussehen könnte, und b) wie man das ganze dann vom Ablauf her gestaltet - wann du eine Datenbankabfrage machst, und wann nicht, sondern gleich eine entsprechende (Fehler-)Meldung ausgibst.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 31-07-2009, 19:22
thx-sound
 Registrierter Benutzer
Links : Onlinestatus : thx-sound ist offline
Registriert seit: May 2009
Ort: Stuhr
Beiträge: 29
thx-sound befindet sich auf einem aufstrebenden Ast
Standard

also es funktioniert nun folgendes mit preg_match :


PHP-Code:
$dbconnect=mysql_connect("SERVER","SQLNUTZER","SQLPASSWORT");
$dbusername "SQLDBUSER";
$dbtable "bewertungen";
$dbsuchspalte "userid";
$input $_GET['user'];



if(
$input!="")
   {

if (
preg_match("/^[0-9]*$/"$input)===)
    {
print 
"ausgabe wenn nicht nur Zahlen enthalten sind";
     }
else
     {

mysql_select_db($dbusername$dbconnect);

$sql_checkbefehl="SELECT $dbsuchspalte FROM $dbtable WHERE $dbsuchspalte =" $input;
$checkergebnis=mysql_query($sql_checkbefehl,$dbconnect) OR die(mysql_error());

if (
mysql_num_rows($checkergebnis)==)
    {
print 
"ausgabe wenn user nicht in der Datenbank"
    }

else
     { 
print 
"ausgabe wenn user in Datenbank vorhanden";
     }

     }


     }
else
    {
print 
"ausgabe wenn kein Wert für input übergeben wurde";
     } 
Ist das gut oder soll da noch etwas verbessert werden?
Auf eine bestimmte anzahl an zahlen darf es nicht beschrängt werden.

Wenn als Input Buchstaben und zahlen kommen erfolgt auch die korrekte Ausgabe des Fehlers.

Geändert von thx-sound (01-08-2009 um 00:42 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 31-07-2009, 23:18
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

richtiges einrücken üben

Peter Kropff - PHP - Programmierstile - Einrückungen
__________________
Gruß
Uzu

private Homepage
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
wie prüfe ich ob ein wert in der datenbank vorhanden ist? HansDerLange SQL / Datenbanken 1 24-12-2007 00:11
wert aus array muss vorhanden sein Shoty PHP Developer Forum 6 27-01-2006 20:20
[Frage] unique mit PHP/ überprüfen ob wert schon vorhanden ist zabarax PHP Developer Forum 3 09-09-2004 19:26
[MySQL] Prüfen ob ein Wert in mehrerern Datensätzen vorhanden ist Hazzardous SQL / Datenbanken 1 15-08-2004 16:12
[MySQL 4.0] Abfrage nach Datensätzen die nicht vorhanden sind el_espiritu SQL / Datenbanken 25 11-09-2003 07:18

Themen-Optionen
Thema bewerten
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.

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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:50 Uhr.