| 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! |
 |

22-01-2010, 12:51
|
|
jaffi
Registrierter Benutzer
|
|
Registriert seit: Jan 2010
Beiträge: 8
|
|
user bereits vorhanden aber mysql_num_rows ergibt 0?
Und wieder komme ich nicht weiter 
Ich versuche zu prüfen, ob ein User, bevor er angelegt wird bereits vorhanden ist. Dies versuche ich mit einem
Select Statement zu bewerkstelligen:
PHP-Code:
mysql_select_db("datenbank"); $sqluser = "SELECT user_id FROM user WHERE user_id = ' " . $_POST['user'] . " ' "; print mysql_error(); $abfrage = mysql_query($sqluser)or die(mysql_error()); print mysql_error(); $ergebnis = mysql_num_rows($abfrage); print mysql_error(); echo $_POST['user']; echo $ergebnis;
es wird mir an keiner Stelle eine Fehlermeldung ausgegeben.
echo $_POST['user'] zeigt mir sauber den eingegebenen Wert. Der wird also richtig übergeben.
Allerdings bekomme ich als $ergebnis immer eine 0 obwohl der User in meiner db vorhanden ist.
Tausche ich die Form-Variable im Select-Statement einfach mit einer User_id als String aus,
findet er den User und gibt mir eine 1 aus. Nur mit $_POST['user_id']
klappt es nicht
Ich weis, das es noch gehen würde das mysql_error auszulesen, da die user_id in meiner db uniqe ist.
Allerdings empfinde ich das als nicht optimal, da das Script bei einem Fehler ja sterben würde und das nicht
heisst das es nicht auch ein anderer Fehler sein könnte. Zbsp. Server aus
oder ähnliches..
Habe ich irgendeinen Fehler in meiner Abfrage? Wir würdet Ihr solch eine Überprüfung umsetzen?
mit einem Select in der db oder mysql_error() auslesen?
Vielen Dank für eure Tips!
|

22-01-2010, 13:03
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
erstens musst du dich entscheiden, ob es ein SQL-Problem ist oder ein PHP-Problem. PHP-Code hat bei einem SQL-Problem nichts verloren und die Ursache liegt auch nicht bei MySQL, daher *move*.
Die Benennung deiner Variablen ist verwirrend (insbesondere $abfrage).
Dieses Script ist anfällig für SQL-Injections, weil du die POST-Daten ungeprüft in der Abfrage verwendest.
Der Fehler ist offensichtlich: Wenn du dir mal die Abfrage ($sqluser) ausgeben ließest, würdest du sehen, dass dort Leerzeichen um die User-Id drinstehen, die du selbst dort eingebaut hast.
Edit: Die Überprüfung durch Fehlerprovokation zu umgehen, halte ich für keine gute Idee, aber schlag im MySQL Handbuch mal "insert ... on duplicate key update" nach, denn das ist es, was du suchst.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
Geändert von AmicaNoctis (22-01-2010 um 13:08 Uhr)
|

22-01-2010, 13:30
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von jaffi
Ich weis, das es noch gehen würde das mysql_error auszulesen, da die user_id in meiner db uniqe ist.
Allerdings empfinde ich das als nicht optimal, da das Script bei einem Fehler ja sterben würde
|
Quark. Sterben tut es nur, wenn du es sterben lässt.
die() ist aber allgemein keine sinnvolle Fehlerbehandlung.
Zitat:
|
und das nicht heisst das es nicht auch ein anderer Fehler sein könnte.
|
Deshalb fragt man an einer solchen Stelle ab, welcher Fehler aufgetreten ist (über die Fehlernummer).
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

22-01-2010, 13:50
|
|
jaffi
Registrierter Benutzer
|
|
Registriert seit: Jan 2010
Beiträge: 8
|
|
Zitat:
Zitat von AmicaNoctis
Hallo,
erstens musst du dich entscheiden, ob es ein SQL-Problem ist oder ein PHP-Problem. PHP-Code hat bei einem SQL-Problem nichts verloren und die Ursache liegt auch nicht bei MySQL, daher *move*.
|
Bitte entschuldige das ich das als Anfänger nicht immer gleich
verifizieren kann...
Zitat:
|
Der Fehler ist offensichtlich: Wenn du dir mal die Abfrage ($sqluser) ausgeben ließest, würdest du sehen, dass dort Leerzeichen um die User-Id drinstehen, die du selbst dort eingebaut hast.
|
Die Leerzeichen hab ich wirklich übersehen, zumal sie in der Ausgabe auch nicht angezeigt wurden. Hätte ich selbst drauf kommen können. Jetzt funktioniert es!
Danke, wieder was gelernt!
P.S: nichts für ungut aber ich muss das mal loswerden: kann es sein das in diesem Forum keine "Absolut-Anfänger erwünscht sind?
Wenn man einige Antworten so liest bekommt man echt das Gefühl vermittelt als seien solche Fragen unerwünscht...
Ich hab aber mal gelernt es gibt keine doofen Fragen sondern nur doofe Antworten...;o) wie gesagt ist nicht böse gemeint,
wollte es nur mal los werden. Solche Foren sollen einem doch den Einstieg erleichtern und nicht das Gefühl geben das man sich
erst anmelden darf wenn man PHP und MySql auswendig kann !! ;o)
Tausend Dank und viele Grüsse
|

22-01-2010, 14:05
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von jaffi
Bitte entschuldige das ich das als Anfänger nicht immer gleich
verifizieren kann...
|
Dann empfehle ich folgende Faustregel: Benutze bei Mischcode den Teil, der für das Problem relevant ist. Die Sprache dieses Teils ist das erste Indiz für die Wahl des Forums.
Beispiel: PHP-generiertes HTML-Dokument mit generiertem JavaScript-Code. Problem: beim Klicken auf Button XYZ passiert nicht ABC, sondern DEF. Klicken bedeutet: clientseitige Interaktion, bedeutet: Event-Handler arbeitet nicht richtig, bedeutet: nicht der PHP-Code, sondern der generierte JavaScript-Code ist fehlerhaft, bedeutet: im "HTML, JavaScript, AJAX und CSS"-Forum den Code posten, den der Client bekommt. Wenn ich dagegen dort dann PHP-Code sehe, der das ganze noch komplizierter macht, bin ich genervt.
Sorry, wenn ich überreagiert habe.
Zitat:
Zitat von jaffi
kann es sein das in diesem Forum keine "Absolut-Anfänger erwünscht sind?
Wenn man einige Antworten so liest bekommt man echt das Gefühl vermittelt als seien solche Fragen unerwünscht...
|
Definiere Absolut-Anfänger. Ein paar Grundlagen (auch Forenregeln) sollte man intus haben, damit man überhaupt in der Lage ist, die Antwort zu verstehen (ist jetzt nicht auf dich bezogen, sondern allgemein). Die Idee, sich mal den generierten SQL-Code anzusehen (z. B. mit echo), sollte imho eigentlich recht naheliegend sein. Das erweckt bei mir den Eindruck (keine Unterstellung, nur ein persönlicher Eindruck), dass der Fragende keine Lust hat, selbst nach dem Fehler zu suchen.
Nichts für ungut. Ich hatte heute vielleicht auch einen etwas schlechten Start in den Tag.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

22-01-2010, 14:06
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Du fragst hier, weil du, bzw. den Code, verbessert werden möchtest. Also sei doch nicht sofort beleidigt, wenn das auch geschieht.
Und ja, für das Erarbeiten der Grundlagen ist jeder selber zuständig. Denn hier kann man nicht mit jedem Anfänger einen individual Grundlagenkurs durchziehen.
Nur zur Information:
Zitat:
|
Ich hab aber mal gelernt es gibt keine doofen Fragen sondern nur doofe Antworten...;o)
|
Da hast du was falsches gelernt.
Das ist nur eine durchhalte Parole für Dokuleseverweigerer und DAUs.
|

22-01-2010, 19:18
|
|
jaffi
Registrierter Benutzer
|
|
Registriert seit: Jan 2010
Beiträge: 8
|
|
*del* Amica
Geändert von AmicaNoctis (22-01-2010 um 20:33 Uhr)
Grund: Flaming
|
|
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
|