php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.01.2005, 13:56  
Gast
 
Beiträge: n/a
Standard php-Problem wegen Verknüpfung von Bedingungen

Hi

Mein php-script bastelt aus den Inhalten von $_POST eine MySQL-Abfrage. Da ich in einer Tabelle mehrere Spalten auf verschiedene Inhalte durchsuchen möchte, folgen nach "WHERE" mehrere Bedingungen. Die erste Bedingung muss erfüllt sein, danach folgen vier Bedingungen von welchen in einem Datensatz mindestens eine zutreffen muss. Damit die Verknüpfung schlussendlich das richtige Resultat liefert, müsste ich Klammern setzen:

... WHERE bedingung1 AND (bedingung2 OR bedingung3 or bedingung4 OR bedingung5) ORDER by ...

Wenn mein Script aber einen Query-String erstellt, der Klammern enthält, erhält es kein gültiges Abfrageresultat. Die Meldung dazu:

mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Wenn ich bei Script-Ende den aktuellen $sql ausgeben lasse und diesen in phpMyAdmin kopiere, erhalte ich dort die richtigen Datensätze.

Um den Rest des $sql zu kontrollieren habe ich die Klammern weggelassen, mysql_fetch_assoc() funktioniert dann. Nur das Abfrageresultat ist natürlich ein anderes als mit den Klammern.

Wo liegt das Problem?

Danke für eure Antworten
Nikie
 
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.01.2005, 14:00  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

wie wärs den code zu posten? vieleicht nen vertipper bei der resultvariable?
robo47 ist offline  
Alt 28.01.2005, 14:04  
Gast
 
Beiträge: n/a
Standard

Dies ist die Ausgabe des Scriptes. Der untere Abschnitt ist der Inhalt von $sql und funktioniert in phpMyAdmin ohne Fehlermeldung.

$Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/httpd/vhosts/finut2004.ch/httpdocs/pages/services.php on line 116
SELECT services.NOM, services.PRENOM, services.PROFESSION, services.BUREAU, services.ABT, services.RUE_NO, services.CODE_POSTA, services.LOCALITE, services.TEL, services.NO_E_MAIL, services.GEB_CH, services.GEB_D_CH, services.GEB_W_CH, services.GEB_I_CH, services.GEB_KT, services.SP_AND, services.ANG_UVP, services.ANG_BOKA, services.ANG_OEBB, services.ANG_AND from services WHERE services.ANG_BBB_AN = 1 AND (services.PRENOM like '%Martin%' OR services.BUREAU like '%BABU%' ) ORDER by services.NOM
 
Alt 28.01.2005, 14:09  
Erfahrener Benutzer
 
Registriert seit: 08.06.2004
Beiträge: 865
RudiS
Standard

robo47 meinte, dass du den Code mit dem SQL-Code und den danach folgenden PHP-Befehlen hier reinstellst. Also alles mit mysql_query, mysql_fetch_assoc, etc.
Und bitte benutzte hier im Forum [code] oder [php] um deinen Code zu formatieren.
mfg RudiS
__________________
Kunst kommt von Können und nicht von wollen, denn sonst würde es ja Wunst heißen.
RudiS ist offline  
Alt 28.01.2005, 14:32  
Gast
 
Beiträge: n/a
Standard

Bitte sehr:

PHP-Code:

else {

        
$sql "SELECT services.NOM, services.PRENOM, services.PROFESSION, services.BUREAU, services.ABT, 
        services.RUE_NO, services.CODE_POSTA, services.LOCALITE, services.TEL, services.NO_E_MAIL, 
        services.GEB_CH, services.GEB_D_CH, services.GEB_W_CH, services.GEB_I_CH, services.GEB_KT, 
        services.SP_AND, services.ANG_UVP, services.ANG_BOKA, services.ANG_OEBB, services.ANG_AND, services.URL
        from services 
        WHERE services.ANG_BBB_AN = 1"
;

        if (
"" != $_POST["NOM"] OR "" != $_POST["PRENOM"] OR "" != $_POST["BUREAU"] OR "" != $_POST["ANG_AND"]) {
            
$sql .= " AND (";
        }

        if (
"" != $_POST["NOM"]) {
            
$sql .= "services.NOM like '%";
            
$sql .= $_POST['NOM'];
            
$sql .= "%' OR ";    
        }
        
        if (
"" != $_POST["PRENOM"]) {
            
$sql .= "services.PRENOM like '%";
            
$sql .= $_POST['PRENOM'];
            
$sql .= "%' OR ";
        }

        if (
"" != $_POST["BUREAU"]) {
            
$sql .= "services.BUREAU like '%";
            
$sql .= $_POST['BUREAU'];
            
$sql .= "%' OR ";
        }
        
        if (
"" != $_POST["ANG_AND"]) {
            
$sql .= "services.ANG_AND like '%";
            
$sql .= $_POST['ANG_AND'];
            
$sql .= "%' OR ";
        }

        if (
"" != $_POST["NOM"] OR "" != $_POST["PRENOM"] OR "" != $_POST["BUREAU"] OR "" != $_POST["ANG_AND"]) {
        
$sql{strlen($sql)-1} = "";
        
$sql{strlen($sql)-2} = "";
        
$sql{strlen($sql)-3} = "";

        
$sql .= ")";
        }

        
$sql .= " ORDER by services.NOM";

        
    }

    @
mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR
    die(
"Keine Verbindung zur Datenbank moeglich. ".mysql_error());
    
mysql_select_db(MYSQL_DATABASE) OR
    die(
"Die Datenbank konnte nicht ausgwaehlt werden. ".mysql_error());
    
    
$ergebnis mysql_query($sql);
    while (
$row mysql_fetch_assoc($ergebnis)) {
    
print_r ($row);
    echo 
"
\n"
;
    } 
Das mit dem Formatieren scheint nicht so zu klappen, wie ihr es wohl gerne hättet (zumindest in der Vorschau).

Die Verbindung zur Datenbank klappt offensichtlich, ich habe nie diesbezügliche Fehlermeldungen erhalten.

Wenn ich im Code die '(' und ')' entferne, welche schlussendlich um die OR-Bedingungen stehen, erhalte ich hübsche Datensätze.

Nikie
 
Alt 28.01.2005, 14:49  
Erfahrener Benutzer
 
Registriert seit: 11.07.2004
Beiträge: 269
function
function eine Nachricht über ICQ schicken
Standard

das interessiert mich auhc mal weil eigentlich ist
$a AND ($b OR $c)
etwas anderes als
$a AND $b OR $C
ich kenne das nur aus der Digitaltechnik (bin noch nen PHP- n00b)
da bindet AND stärker als OR

ist das in PHP anders?
__________________
Es ist ein großer Trost, andere dort scheitern zu sehen, wo man selbst gescheitert ist. (William Somerset Maugham)
function ist offline  
Alt 28.01.2005, 14:54  
Erfahrener Benutzer
 
Registriert seit: 08.06.2004
Beiträge: 865
RudiS
Standard

Also erstmal solltest du dein SQL-Query umformatieren, damit man es besser lesen kann:
Code:
  $sql = "SELECT
            services.NOM,
            services.PRENOM,
            services.PROFESSION,
            services.BUREAU,
            services.ABT,
            services.RUE_NO,
            services.CODE_POSTA,
            services.LOCALITE,
            services.TEL,
            services.NO_E_MAIL,
            services.GEB_CH,
            services.GEB_D_CH,
            services.GEB_W_CH,
            services.GEB_I_CH,
            services.GEB_KT,
            services.SP_AND,
            services.ANG_UVP,
            services.ANG_BOKA,
            services.ANG_OEBB,
            services.ANG_AND,
            services.URL
          FROM
            services
          WHERE
            services.ANG_BBB_AN = 1
         ";
Außerdem solltest du Schlüsselwörter wie 'SELECT', 'FROM', 'WHERE', etc. groß schreiben, damit du sie besser erkennen kannst.

Wenn du vor mysql_query mit echo den Query ausgibst und diesen dann per phpMyAdmin ausführst werden dir die richtigen Datensätze angezeigt, stimmt das?
Leider konnte ich dir (noch) nicht helfen, da ich den Fehler nicht entdecken kann.
mfg RudiS
__________________
Kunst kommt von Können und nicht von wollen, denn sonst würde es ja Wunst heißen.
RudiS ist offline  
Alt 28.01.2005, 14:57  
Gast
 
Beiträge: n/a
Standard

Das ist es ja, was mich seit zwei Tagen ärgert: wenn ich den $sql in phpMyAdmin kopiere, funktioniert die Abfrage 100% richtig.

nikie
 
Alt 28.01.2005, 15:02  
Erfahrener Benutzer
 
Registriert seit: 08.06.2004
Beiträge: 865
RudiS
Standard

Nur nochmal zur Sicherheit, der Query funktioniert auch mit den Klammern, in phpMyAdmin ausgezeichnet aber in der Datei nicht.
Vielleicht wählst du eine falsche Datenbank aus oder deine Logindaten sind falsch. Versuch doch mal in der Datei einen einfacheren Query, vielleicht geht es dann.
mfg RudiS
__________________
Kunst kommt von Können und nicht von wollen, denn sonst würde es ja Wunst heißen.
RudiS ist offline  
Alt 28.01.2005, 15:11  
Gast
 
Beiträge: n/a
Standard

Genau so ist es: phpMyAdmin rekapituliert den Query wie untenstehend. Anschliessend gibt es die Datensätze aus.

Code:
SELECT services.NOM, services.PRENOM, services.PROFESSION, services.BUREAU, services.ABT, services.RUE_NO, services.CODE_POSTA, services.LOCALITE, services.TEL, services.NO_E_MAIL, services.GEB_CH, services.GEB_D_CH, services.GEB_W_CH, services.GEB_I_CH, services.GEB_KT, services.SP_AND, services.ANG_UVP, services.ANG_BOKA, services.ANG_OEBB, services.ANG_AND
FROM services
WHERE services.ANG_BBB_AN = 1 AND (
services.PRENOM
LIKE '%Martin%' OR services.BUREAU
LIKE '%BABU%'
)
ORDER BY services.NOM
Das Script habe ich mit x-verschiedenen einfacheren Query-Strings getestet. Alle haben problemlos funktioniert und die Datensätze wurden erwartungsgemäss ausgegeben. Sobald ich die Klammern einfügte kam die Meldung:

$Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Ob der Puffer Urlaub macht wenn er eine Klammer sieht?

nikie
 
 


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] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php strlen mehrere bedingungen, http://www.php.de/php-tipps-2005/16876-php-problem-wegen-verknuepfung-von-bedingungen.html

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:57 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.