mysql insert mit php

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysql insert mit php

    Hallo,
    leider bekomme ich es nicht hin in eine mysql tabelle zu schreiben.

    PHP-Code:
    if 
    (
    preg_match('#\s(\w\w\w\w\s\w+\s\d+\/\d\d)#',$content,$target5)) 
    {      
    foreach (
    $target5 as $value){  
    $query "insert into referenceNumbe(feedId,reference)
    values ('" 
    $feedid[0] . "','" $value "')" ."<br>";
    echo 
    $query;
    mysql_query($query) . mysql_error();  
    }}  
    else{
    echo 
    "keine Übereinstimmungen";
    }
      unset(
    $content);  

    ich kann auch definitiv auf die tabelle zugreifen. leider bekomme ich keinerlei fehlermeldung.
    echo gibt folgendes aus
    Code:
    insert into referenceNumber (feedId,reference) values ('2',' III ZA 7/06')
    wenn ich diesen insert im mysql querybrowser ausführe funktioniert es auch.
    also stimmen auch die anzahl der felder mit den values überein. ich habe keinen anhaltspunkt. thx
    Zuletzt geändert von iberican; 22.10.2007, 20:06.

  • #2
    error_reporting den Regel gemäß oben?
    PHP-Code:
    mysql_query($query) . mysql_error(); 
    Was möchtest du damit erreichen? Meinst du so werden Fehler ausgeben?
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      ok, nachdem ich nun folgenden mysql error bekomme

      Code:
      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 '  ' 
      at line 1
      insert into referenceNumber (feedId,reference) values ('2',' III ZA 7/06')
      habe ich nun ein addslashes vor das query, doch auchdas geht nicht
      PHP-Code:
      addslashes($query 
      "insert into referenceNumber (feedId,reference) 
      values ('" 
      $feedid[0] . "','" $value "')" "<br>"); 

      Kommentar


      • #4
        Beschäftige dich mit Grundlagen
        Code:
        $query = "insert into referenceNumbe(feedId,reference)
        values ('" . $feedid[0] . "','" . $value . "')" ."<br>";
        Das ist 100% nicht das was du per echo ausgeben hast. Was soll der Server mit dem <br> anfangen? Was willst du mit addslashes bewirken? Wenn du diese Fragen beantworten kannst oder merkst das beides einfach Unsinn ist kannst du wiederkommen.
        Code:
        addslashes($variable = '...');
        So passiert einfach nichts. wenn dann musst du addslashes vor der Zuweisung anwenden: $variable = addslashes ( '...' ); - in diesem Fall erreichst du damit natürlich nur Fehler. Wenn du irgendwas escapen solltest dann die Eingaben die aus dem Regex kommt und das am besten mit mysql_real_escape_string.
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          @tontechniker
          das war nix mit dem br am ende..
          funktioniert netzt, doch leider wird bei jedem regex treffer doppelt in die db geschrieben.wie beschränke ich es auf einmal?

          Kommentar


          • #6
            wie beschränke ich es auf einmal?
            Nur einmal matchen?
            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

            Kommentar


            • #7
              das sind alles unerschiedlich regex.
              doch in meinem dokument kommt das pattern nur einmal vor und trotzdem bekomme ich es 2x ausgegeben..

              Kommentar


              • #8
                Ich habe dir schon einmal geschrieben, du sollst deinen Code lesbar formatieren. Wenn ich Zeilen sehe, wie diese:
                Code:
                {{
                bekomm ich das nackte Grausen. Wenn du den Code anständig eingerückt hättest, hättest du auch die überflüssige Klammer sofort gesehen.
                Aber nun zu deinem Problem:
                preg_match schreibt:
                $treffer[0] enthält dann den Text, der auf das komplette Suchmuster passt, $treffer[1] den Text, der auf das erste eingeklammerte Teilsuchmuster passt und so weiter
                Deshalb ist es logisch, dass zwei Einträge in die DB geschreiben werden, wenn auch mit unterschiedlichen Werten. Warum machst du überhaupt eine Schleife, wenn du weisst, dass es nur eine Übereinstimmung gibt? Das würde doch genügen (einfach auch noch um zu zeigen, wieviel lesbarer eingerückter Code ist):
                PHP-Code:
                if preg_match('#s(wwwwsw+sd+/dd)#'$content$target5)){      
                    
                $query "INSERT INTO referenceNumbe(feedId, reference)
                              VALUES(
                $feedid[0], '$target5[1]')" ;
                    
                mysql_query($query) or die(mysql_error());  
                }  
                else{
                    echo 
                "keine Übereinstimmungen";

                Gruss
                H2O

                Kommentar


                • #9
                  OffTopic:
                  Wenn du schon auf richtige Einrückung des Codes pochst, solltest du deine Strings mal vernünftig verketten! Und eine öffnende Klammer hast du hinter dem if auch noch vergessen

                  Kommentar


                  • #10
                    Mit der Klammer hast du natürlich recht, die ist irgenwo untergegangen. Und über die Stringverkettung wurde schon sehr viel diskutiert, die mach ich aber sehr bewusst so. Selbstverständlich ist es jedem überlassen, dass mit den entsprechenden Operatoren zu machen (dann wenigstens mit Leerzeichen drum, damit man sie auch sieht).
                    Zuletzt geändert von H2O; 24.10.2007, 11:30.
                    Gruss
                    H2O

                    Kommentar


                    • #11
                      ok,danke für die tipps. das skript läuft nun einwandfrei.
                      thx

                      ja leider muss ich das korrigieren, denn ich muss noch doch mit der foreach schleife arbeiten, denn das pattern trifft auf verschiedene strings zu, und diese sollen jeweils ausgegeben werden.
                      folgenden text wird z.bsp. gescannt
                      Code:
                      it {Urteil vom 8.2.2007 - I ZR 59/04 -} 
                      hat der B05 - {I ZR 231/01}, {GR
                      fogende schleife trifft nun auf beide pattern zu

                      PHP-Code:
                      if (preg_match('#(\w\s\w+\s\d+\/\d\d)#',$content,$target3)) {
                      foreach (
                      $target3 as $value){  
                      $update "update feeds set matched = 'y' where id=" .$feedid[0];              
                      mysql_query($update) or die(mysql_error());              
                      $query "insert into referenceNumber (feedId,reference,regEx) values ('" $feedid[0] . "','" $value "','3')";              
                      echo 
                      $query "<br>\n";              mysql_query($query) or die(mysql_error().'<hr />'.$query.'<hr />');              
                      $hilfsvar true;  }  } 
                      also im array habe ich laut debugger folgende werte
                      $target3=Array[2]
                      0=I ZR 59/04
                      1=I ZR 59/04

                      und mein regex evaluator gibt mir folgendes
                      0.0: (I ZR 59/04)
                      0.1: (I ZR 231/01)
                      1.0: (I ZR 59/04)
                      1.1: (I ZR 231/01)
                      also werden 2 pattern getroffen...
                      danke für eure hilfe !!!
                      Zuletzt geändert von iberican; 25.10.2007, 00:14.

                      Kommentar


                      • #12
                        Ich bezweifle, ob du überhaupt liesst, was man dir schreibt. preg_match() findet nur die erste Übereinstimmung, und die Resultate sind genau so im Array, wie ich es dir geschrieben habe. Was du für einen Validator benutzst, weiss ich nicht, aber der braucht wahrscheinlich preg_match_all(). Und deinen Code schaue ich mir vorläufig nicht mehr an.
                        Gruss
                        H2O

                        Kommentar


                        • #13
                          ich benutze http://www.rexv.org/ als validator


                          Falls der Parameter Treffer angegeben wurde, wird er mit den Suchergebnissen gefüllt. $treffer[0] enthält dann den Text, der auf das komplette Suchmuster passt, $treffer[1] den Text, der auf das erste eingeklammerte Teilsuchmuster passt und so weiter.

                          und so weiter lässt aber schon darauf schließen, dass mehrere gefunden werden?
                          und das der code immer so sch+++ aussieht ärgert auch mich. aber immer wenn ich copy und paste mache, haut es mir beim einfügen unnötige umbrüche rein.

                          Kommentar


                          • #14
                            Original geschrieben von iberican
                            i$treffer[0] enthält dann den Text, der auf das komplette Suchmuster passt, $treffer[1] den Text, der auf das erste eingeklammerte Teilsuchmuster passt und so weiter.
                            und so weiter heisst, das nächste Element enthält den nächsten Klammerausdruck und das übernächste den übernächsten .... Da du aber nur einen Klammerausdruck hast, gibts auch nur Treffer 0 und 1. Ausserdem begreife ich deinen Regulären Ausdruck nicht, und kann mir darum nicht vorstellen, warum überhaupt etwas augegeben werden soll.
                            Gruss
                            H2O

                            Kommentar

                            Lädt...
                            X