Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Abfrage erzeugen/ string bearbeitung

Einklappen

Neue Werbung 2019

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

  • SQL Abfrage erzeugen/ string bearbeitung

    Also ich versuch eine SQL Abfrage zu erzeugen und muss die felder plus ihre Werte angeben.Dafür bastel ich mir zwei strings.
    Ich frag alle feldernamen ab und schreib sie auf den ersten string.
    Dann gehts problem los... ich kann zwar den string mit den werten
    erzeugen hab aber immer die sch* leerzeichen.
    Hatte versucht alle Zeichen einzeln durch zugehen oder alles bis auf die leerzeichen raus zukopieren.
    Ich hab einfach kein plan mehr

    PHP-Code:
    if($einfuegen=="einfuegen")
      {
       
    //test DB auswahl
       
         
    mysql_select_db("$txtDBname")
          or die(
    "Auswahl der Datenbank nicht möglich: " mysql_error());

         
    $query "SELECT *  FROM $txtTname"//abfrage
     
     //Variablendef.  
       
    $zielf_kom="";
       
    $quellef_kom="";
    //Tabellenfelder-Abfrage 
      
    $result mysql_query($query)
          or die(
    "Hauptabf. fehlgeschlagen");
      
    $fields mysql_num_fields($result);//Sp-anzahl
     
    //Strings erzeugen Für EintragAbfrage
       
    $ver=$fields-1;//vergleichsvar
       
    for ($s 0$s <=$fields-1;$s++)
         {
            
    $fname=mysql_field_name($result$s);//feldname(quelle,index)
            
         
    if($s<$ver$zielf_kom.=$fname.",";//wenn letztes feld, kein komma
                           
    else $zielf_kom.=$fname

         if(
    $s<$ver$quellef_kom.="\ "."\"$".$fname."\ "."\","//     \"$BenutzerID\",\"$Name\"//wenn letztes feld
                    
    else  $quellef_kom.="\ "."\$".$fname."\ "."\""
         }
    //String bearbeitung    
        
    $leeranz substr_count($quellef_kom' ');//leerzeichen anzahl
        
    $stlaenge strlen($quellef_kom);//laenge string
        //$str = trim($quellef_kom);
        //$quellef_kom = implode(" ",$bt);
        //echo"$bt[0],$bt[1]";
        
    $leeranz substr_count($quellef_kom' ');
    //Versuch 1. zeichenweise kopieren    
           
    $quellef_komt[$stlaenge]=$quellef_kom;
            
        for(
    $i=0;$i<$stlaenge;$i++)
        {
         if(
    0==strcmp($quellef_komt[$i], " "))
           {
            
    $split.=$quellef_komt[$i];//echo"$quellef_kom[$i]";
           
    }     
        }
        
        
    //Versuch 2. leerzeichen suchen und strings kopieren... 
           
    $gst=$quellef_kom;
        for(
    $i=1;$i<=$leeranz;$i++)
        { 
          
    $fl=0;
          
    $pos strpos($gst' ');
          if(
    $pos!=0) {$st1substr($gst,pos-1);$fl++;}
                 
    $stlaenge strlen($gst);
          if(
    $pos!=$laenge) {$st2=substr($gst,$pos+1,$stlaenge);$fl=2;}
            else echo
    "FEhler";
          echo
    "Teil: $st1
    Teil: 
    $st2
    "
    ;
          if(
    $fl==0)$gst=$st1.$st2;
           else echo
    "Fehlercode: $fl
    "
    ;
        }
        
        echo
    "Leerzeichen: $leeranz";
        echo
    "FEldanz: $fields
    "
    ;
        echo
    "Feldern: $zielf_kom
    "
    ;
        

    //SQL Abfrage    
        
    $eintrag ="insert into $txtTname($zielf_kom)
         values (
    $quellef_kom)";// BenutzerID,Name \"$BenutzerID\",\"$Name\"
        
    $resID mysql_query($eintrag);
        
    $errormysql_error();
        echo 
    $error;
        if (!
    $resID) die ("
    FEHLER IN DER ABFAGE ... Eintrag"
    ); 


  • #2
    Oh Gott. So kann den Code doch keiner lesen!
    Unformatierter Code ist grauenhaft!
    Bitte editiere Deinen Beitrag nochmal und packe den Code in PHP-Tags.

    Dann kann man sich das auch mal durchlesen, ohne Augenkrebs zu kriegen.

    Außerdem dürfte das Problem nichts Fortgeschrittenes sein.

    Edit:
    Dann kannst Du gleich nochmal erzählen, von welchen Leerzeichen Du genau redest.
    **********************************
    Nein, ich bin nicht die Signatur.
    Ich putze hier nur.
    **********************************

    Kommentar


    • #3
      geht klar^^ sry

      Kommentar


      • #4
        Sag doch einfach mal was du vorhast.

        Kommentar


        • #5
          ICh schreib gerade nen DB Admin und wähle vorher ne db und ne tbl aus.

          dann werden die Eingabefelder erzeugt und die Inhalte übergeben(var name wie feldname) an die Funktion zu eintragen.

          so was in der art wie ne "dynamischer" feldeintrag in ne tabelle.

          Kommentar


          • #6
            Und wobei stört welches Leerzeichen?

            Hilft implode()?

            Kommentar


            • #7
              Die Abfrage stimmt dann net ... im SQL darf kein Sinnloses Leerzeichen stehen.

              Aber ohne die Leerzeichen kann ich den string nicht zusammen zimmern zwecks sonderzeichen oder so zb. "\" so söllte es in den String aber funsen tuts nur mit "\ "

              Wenn Die Tabelle die Felder BenutzerID und Name hätte müste/söllte $quellef_kom so aussehen

              $quellef_kom=\"$BenutzerID\",\"$Name\"

              leider funst es bloß so, mit vierlehrzeichen

              $quellef_kom= \ " $BenutzerID \ ", \ "$Name \ "

              Kommentar


              • #8
                Stimmt doch garnicht. In SQL kannst du wie in fast jeder Programmiersprache (Ausnahme: http://de.wikipedia.org/wiki/Whitespace_(Programmiersprache) ) mit Whitespaces um dich werfen wie du lustig bist.

                Zeig doch einfach mal den Soll- und Ist-Zustand des SQL-Codes und welcher Teil davon variabel sein soll?

                Kommentar


                • #9
                  wenn ich das richtig verstehe ist sein problem das einfügen von doppelten Hochkommata.

                  die korrekte syntax dafür ist
                  Code:
                  "\"" . $wert . "\"" 
                  bzw. 
                  '"' . $wert . '"'
                  obwohl ich mich nicht durch den codekauderwelsch da oben durchwuseln möchte.
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #10
                    hm also hab ma nen bissel whitespace gegoogelt....


                    was genau meinst du damit weil kenn whitespce garnet und stand nix als SQLBefehl. Also das mit dem Assemblerskript hab ich net ganz geraft, wäre echt nett wenn du ma nen kleine Einleitung oder was zum lesen hättest.

                    Kommentar


                    • #11
                      http://de.wikipedia.org/wiki/Leerraum

                      Zeig doch einfach mal den Soll- und Ist-Zustand des SQL-Codes und welcher Teil davon variabel sein soll?

                      Kommentar


                      • #12
                        Wenn Die Tabelle die Felder BenutzerID und Name hätte müste/söllte $quellef_kom so aussehen

                        Sollwert: $quellef_kom=\"$BenutzerID\",\"$Name\"

                        leider funst es bloß so, mit vierlehrzeichen

                        Istwert: $quellef_kom= \ " $BenutzerID \ ", \ "$Name \ "

                        Kommentar


                        • #13
                          OK. In Strings sind Leerzeichen natürlich schon störend.
                          Soll da am Ende wirklich $BenutzerID drin stehen oder soll das vorher ersetzt werden?

                          Schauen wir uns doch mal Deinen Code vom Anfang an:

                          PHP-Code:
                          <?
                             $ver=$fields-1;//vergleichsvar
                             for ($s = 0; $s <=$fields-1;$s++)
                               {
                                  $fname=mysql_field_name($result, $s);//feldname(quelle,index)
                                  
                               if($s<$ver) $zielf_kom.=$fname.",";//wenn letztes feld, kein komma
                                                 else $zielf_kom.=$fname;

                               if($s<$ver) $quellef_kom.="\ "."\"$".$fname."\ "."\","; //     \"$BenutzerID\",\"$Name\"//wenn letztes feld
                                          else  $quellef_kom.="\ "."\$".$fname."\ "."\"";
                               } 
                          ?>
                          Das ist doch das gleiche wie der hier:

                          PHP-Code:
                          <?
                             $ver=$fields-1;//vergleichsvar
                             for ($s = 0; $s <= $ver; $s++)
                             {
                                $fname=mysql_field_name($result, $s);//feldname(quelle,index)

                                $zielf_kom .= $fname;
                                $quellef_kom .= ' "$'.$fname.' "';
                                  
                                if($s<$ver)
                                {
                                   $zielf_kom.= ',';
                                   $quellef_kom.=',';
                                }
                             } 
                          ?>
                          Man muss sich das Leben ja nicht unnötig durch ungeschickte Anführungszeichen schwer machen.

                          Du könntest also einfach bei der Zuweisung von $quellef_kom die Leerzeichen weglassen.

                          Und den Vorschlag, das ganze mit implode am Ende zusammen zu packen finde ich auch ganz gut.

                          Außerdem würde ich vorschlagen, nicht so ein gruseliges "SELECT *" am Anfang zu nehmen. Wenn Du nur die Spaltennamen willst, brauchst Du nicht die ganze Tabelle auszulesen.
                          Einerseits sollte da mindestens ein "LIMIT 1" hinten dran, andererseis gibt es doch was in der Art von "SELECT COLUMNS " oder so, was viel passender wäre.
                          **********************************
                          Nein, ich bin nicht die Signatur.
                          Ich putze hier nur.
                          **********************************

                          Kommentar


                          • #14
                            also hab das Hochkomma mit dem ' ersetz und so entstehen die die Leerzeiche net mehr. Wenn ich die aber $quellef_kom benutze kommt SQL Syntax-Fehler aber wenn ich das was auf dem string zb.: \"$BenutzerID\",\"$Name\" liegt einfüge gehts.

                            woran könnte das liegen?
                            PHP-Code:
                            $eintrag ="INSERT INTO $txtTname($zielf_kom)
                                 values (
                            $quellef_kom)LIMIT 1";// BenutzerID,Name \"$BenutzerID\",\"$Name\"
                                 //\"$name\"
                                
                            $resID mysql_query($eintrag);
                                
                            $errormysql_error();
                                echo 
                            $error;
                                if (!
                            $resID) die ("
                            FEHLER IN DER ABFAGE ... Eintrag"
                            ); 
                            Danke es funst mit ' ':
                            PHP-Code:
                             for ($s 0$s <=$fields-1;$s++)
                                 {
                                    
                            $fname=mysql_field_name($result$s);//feldname(quelle,index)
                                    
                                 
                            if($s<$ver$zielf_kom.=$fname.',';//wenn letztes feld, kein komma
                                                   
                            else $zielf_kom.=$fname;

                                 if(
                            $s<$ver$quellef_kom.='\"$'.$fname.'\",'//     \"$BenutzerID\",\"$Name\"//wenn letztes feld
                                            
                            else  $quellef_kom.='\$'.$fname.'\"';
                                 } 
                            [/php]

                            Kommentar


                            • #15
                              KÖNNTE MIR BITTE EINER WEITER HELFEN

                              komm echt nett weiter habs jetz mehren leuten gezeigt bloß keiner hat so richtig ne idee habs jetz mit addslashes, einem hochkomma mit doppel hochkomma versucht komm immer wieder der Fehler

                              You have an errror in your SQL syntax. Check the manual that corresponds to your MYSQL server version for the right syntax to use near '\"$BenutzerID\",\"$Name\"'

                              hab echt kein plan mehr wie ich´s anders den String zusammen schneiden kann.

                              PHP-Code:
                              //string zusammen schneiden....    
                                 
                              $zielf_kom="";
                                 
                              $quellef_kom="";
                                 
                              $result mysql_query($query)
                                    or die(
                              "Hauptabf. fehlgeschlagen");
                                 
                              $fields mysql_num_fields($result);//Sp-anzahl
                                
                                 
                              $ver=$fields-1;echo"$ver";
                                 for (
                              $s 0$s <=$fields-1;$s++)
                                   {
                                      
                              $fname=mysql_field_name($result$s);//feldname (quelle,index)
                                      
                              $wert=$fname;
                                      echo
                              "Werttest $s$wert
                              "
                              ;        
                                      
                                      if(
                              $s<$ver$zielf_kom.=$fname.",";//wenn letztes feld, kein komma
                                      
                              else $zielf_kom.=$fname
                                      
                              //$test.=addslashes($zielf_kom);echo ("$test");
                                      
                              if($s<$ver){ $quelle_teil='"$'.$fname.'",'$quellef_kom.=addslashes($quelle_teil);}//  \"$BenutzerID\",\"$Name\"//wenn letztes feld
                                      
                              else {  $quelle_teil='"$'.$fname.'"';$quellef_kom.=addslashes($quelle_teil);}
                                           
                                   }

                              //abfrage ausführen

                                  
                              $eintrag ="INSERT INTO ".$txtTname.//tbl
                                  
                              "(".$zielf_kom.")" //feldnamen
                                   
                              ." values"."(".$quellef_kom.")";// BenutzerID,Name \"$BenutzerID\",\"$Name\"
                                   //\"$name\"
                                  
                              $test=$eintrag;
                                  
                              $eintrag2="INSERT INTO tbllog
                                  (BenutzerID,Name)
                                  values(\"
                              $BenutzerID\",\"$Name\")";
                                  echo 
                              "SQL:  $eintrag";
                                  
                              $test=$eintrag;
                                  
                              $eintrag3 ="INSERT INTO tbllog(BenutzerID,Name) values(\"$BenutzerID\",\"$Name\")";
                                  
                              //abfrage fehler ausgabe
                                  
                              $resID mysql_query($eintrag);
                                  
                              $errormysql_error();
                                  echo 
                              $error

                              Kommentar

                              Lädt...
                              X