myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

PHP MySQL - Prozentzeichen macht Probleme

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 31.07.12, 23:40   #1
jokerface12345
Anfänger
 
Registriert seit: Aug 2010
Beiträge: 3
Bedankt: 0
jokerface12345 ist noch neu hier! | 0 Respekt Punkte
Standard PHP MySQL - Prozentzeichen macht Probleme

Hallo,

ich habe eine Seite in php geschrieben, bei der Werte über Formulare an eine MySQL Datenbank übermittelt werden.

Das Übermitteln der Daten aus den Formular Feldern in die MySQL DB funktioniert auch tadellos.

Nur habe ich folgendes Problem bei einem Vergleich von einem eingegeben Wert in einem Formular Feld und einem Wert der schon in der Datenbank steht:

PHP-Code:
$sql_pruefen "SELECT COUNT(*) AS anzahl_ausgebucht FROM einbuchung WHERE ean = $ean AND ausgebucht = 0"
$wert enthält folgendes aus dem Formular Feld:
%000606301799889397094101040

Das Problem ist das %-Zeichen. Es soll möglich sein über die Formular Seite zu prüfen ob dieser Wert schon in der Datenbank vorhanden ist und wenn ja, soll in dem Feld 'anzahl_ausgebucht' eine 1 geschrieben werden. Dies hat den Sinn, wenn ein eingegeben Wert in der Datenbank vorhanden ist, dieser als ausgebucht in der Datenbank markiert werden soll.

So sieht der Code-Abschnitt aus:
PHP-Code:
          <?php
                    
if($_POST["action"]=="ausbuchen"){ 
                    include(
"server_data.php");
    
                    
$mitarbeiter trim($_POST["mitarbeiter"]);
                    
$ean trim($_POST["ean"]);
                    
                    if (empty(
$_POST['mitarbeiter'])){
                            echo 
'Das Feld Mitarbeiter muss ausgefüllt sein!<br/>';  
                    }
                    
                    
$sql_pruefen "SELECT COUNT(*) AS anzahl_ausgebucht FROM einbuchung WHERE ean = `$ean` AND ausgebucht = 0";
                    
$result mysql_query($sql_pruefen);
                    
$anzahl mysql_fetch_array($result);
                        echo 
$anzahl['anzahl_ausgebucht'];
    
                    if (
$anzahl['anzahl_ausgebucht'] == 1){
                        
$sql_einfuegen "INSERT INTO ausbuchung(mitarbeiter, ean)    VALUES('$mitarbeiter','$ean')";
                        
mysql_query($sql_einfuegen) or die(mysql_error());
    
                        
$sql_update "UPDATE einbuchung SET ausgebucht = 1, zeitstempel_aus = now() WHERE ean = $ean";
                        
mysql_query($sql_update) or die(mysql_error());
            
                        
$var2 'Ausgebucht!';
                        echo 
"var2=".$var2;
                        }
                    else{
                        
$var2 'Fehler';
                        echo 
"var2=".$var2;
                        }    
      }
?>
Sobald in dem Formular Feld ein Zahl mit dem % Zeichen eingegeben wird und auf den Button "Ausbuchen" geklickt wird springt er zu var2 Fehler.
Die Prozentzeichen sind in dem Feld immer vorhaden, sprich es werden immer Werte mit %123892139123 (Prozent-Zahl) eingegeben.

Wenn ich es ohne % eingebe und auch der gleich Wert ohne % in der DB vorhanden ist funktioniert es!

Was kann ich tun?

Ich habe es auch schon so in der Abfrage versucht:
PHP-Code:
WHERE ean '" . $ean . "' AND ausgebucht 0"; 
Dann erhalte ich folgendes auf der Seite:
Code:
1You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%000606301799889397094101040' at line 1
An der MySQL version liegt es nicht es ist die 5.5.25a.

Habe auch schon eine andere version versucht.
jokerface12345 ist offline   Mit Zitat antworten
Ungelesen 01.08.12, 00:47   #2
kkhamburg
Profi
 
Benutzerbild von kkhamburg
 
Registriert seit: May 2009
Ort: riding the roos
Beiträge: 1.468
Bedankt: 1.057
kkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punkte
Standard

Wenn du nach dem Prozentzeichen innerhalb eines Datensatzes suchen willst musst du es escapen.

Das geht unter MySQL so ;
SELECT * FROM `test` WHERE word LIKE 'Wo!%rt' ESCAPE '!'

setze dem Prozentzeichen einen Charakter vorraus und definiere in in der Abfrage als Escape-Character.
__________________

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]


kkhamburg ist offline   Mit Zitat antworten
Ungelesen 01.08.12, 08:28   #3
jokerface12345
Anfänger
 
Registriert seit: Aug 2010
Beiträge: 3
Bedankt: 0
jokerface12345 ist noch neu hier! | 0 Respekt Punkte
Standard

Ok, ich habe noch nicht ganz verstanden wie ich dem Prozentzeichen einen Charakter vorraus setze.

Wo geschieht dies? Im code habe ich ja eine Variable und kein ausgegebenen String mit % Zeichen (WHERE ean = $ean) . Wo und wie muss ich das ansetzen?

Im übrigen habe ich mit
PHP-Code:
echo $sql_pruefen
folgendes erhalten und direk in MySQL ausgeführt, dies funktioniert ohne Probleme und er setzt das Feld anzahl_ausgebucht auf 1:

Code:
SELECT COUNT(*) AS anzahl_ausgebucht FROM einbuchung WHERE ean = '%000606301799889397094101040' AND ausgebucht = 0
Ledeglich diese Meldung kommt in php wenn der gleiche Befehl ausgeführt wird, was hat diese zu bedeuten?
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%000606301799889397094101040' at line 1
jokerface12345 ist offline   Mit Zitat antworten
Ungelesen 01.08.12, 09:16   #4
kkhamburg
Profi
 
Benutzerbild von kkhamburg
 
Registriert seit: May 2009
Ort: riding the roos
Beiträge: 1.468
Bedankt: 1.057
kkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punktekkhamburg leckt gerne myGully Deckel in der Kanalisation! | 594749 Respekt Punkte
Standard

Das problem ist, das in SQL das Prozentzeichen als Wildcard interpretiert wird.

Das bedeutet im schlimmsten Fall das er mehr Datensätze ändern würde als du willst.

Mein Beispiel ist eigentlich selbsterklärend, im Suchstring Wo%rt wird dem Prozentzeichen ein Ausrufezeichen vorangestellt und SQL mitgeteilt, dass das Ausrufezeichen ein Escape-Zeichen ist. Damit wird das Prozentzeichen nicht mehr von SQL interpretiert sondern einfach als Teil des Strings gewertet.

Ergo musst du u. U. per String-Replace dafür sorgen das vor dem Prozentzeichen ein Escape-Zeichen ist und dieses SQL bekanntmachen.
__________________

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]


kkhamburg ist offline   Mit Zitat antworten
Ungelesen 01.08.12, 12:34   #5
ProgMaster
Banned
 
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
ProgMaster ist noch neu hier! | 0 Respekt Punkte
Standard

Wildcards in mySQL bei einem EQUAL-Vergleich?

Wildcards funktionieren nur mit dem LIKE-Operator!


Desweiteren hoffe ich für jokerface, dass dies keine kommerzielle Anwendung werden soll.
Das was du machst ist so sicher und robust wie Windows Vista auf einem China-Netbook.
ProgMaster ist offline   Mit Zitat antworten
Ungelesen 02.08.12, 10:59   #6
jokerface12345
Anfänger
 
Registriert seit: Aug 2010
Beiträge: 3
Bedankt: 0
jokerface12345 ist noch neu hier! | 0 Respekt Punkte
Standard

Eshat jetzt funktioniert und zwar hatte in folgedenem Befehl folgendes gefehlt:

PHP-Code:
$sql_update "UPDATE einbuchung SET ausgebucht = 1, zeitstempel_aus = now() WHERE ean =[B] '" $ean "'"[/B
@ProgMaster: Ne das tool ist nur für mein kleines lager gedacht.

Noch eine andere Frage:

Ich habe jetzt noch eine neue Tabelle und Seite mit "umbuchung". Dort soll es möglich sein ein Paket zb. auf einen anderen Stellplatz zu buchen.

Wenn jemand was umbucht wird dies in die Tabelle "umbuchung" geschrieben.

Jetzt soll wenn jemand etwas ausbucht in beiden Tabellen wo etwas gebucht ist "einbuchen" und "umbuchung" geprüft werden ob der eingegeben Wert vorhanden ist, wenn ja soll ausgebucht auf 1 gesetzt werden.

Wie prüfe ich nun beide Tabellen auf vorhandene Werte ? Mit inner join, wenn ja wie?

Zitat:
$sql_pruefen = "SELECT COUNT(*) AS anzahl_ausgebucht FROM einbuchung WHERE ean = '" . $ean . "' AND ausgebucht = 0";
Dort soll noch zusätzlich zu FROM einbuchung noch umbuchung geprüft werden
jokerface12345 ist offline   Mit Zitat antworten
Ungelesen 02.08.12, 20:34   #7
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

nimm dir eine auszeit von 1-3 tagen, besorg dir lektüre und lerne SQL.
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr.


Sitemap

().