Übergabe eines SQL-Statements

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

  • Übergabe eines SQL-Statements

    Hallo @ alle!

    Ich habe folgendes Problem:

    Ich lasse einen Nutzer ein SQL-Statement eingeben, welches, bevor es zur Datenbank geschickt wird noch um limit 0,100 ergänzt wird.
    Nun wird mit mysql_num_rows überprüft, ob die Abfrage mehr als 100 Treffer ergab. Ist dies so, wird ein Button "Weiter" angezeigt, um die weiteren Treffer anzuzeigen.
    Den Button rufe ich folgendermaßen auf:
    PHP-Code:
    printf("<input type=button onClick=\"window.location.href='".$PHP_SELF.
    "?submit=1&sqlstatement=".$sqlstatement."&start=".$start_previous.
    "&anzahl=".$anzahl."'\" value=\"nächste Treffer\">"
    Mit "einfachen" SQL-Statements funktioniert das auch super.
    Ist das SQL-Statement aber in der Art, dass in der Where-Klausel 'like x="abc%" ' vorkommt, funktioniert es nicht mehr, dass heißt es wird einfach kein Button angezeigt. Ich habe schon versucht, das %-Zeichen zu maskieren, das bringt jedoch auch keine Abhilfe.

    Wo könnte PHP Probleme mit der Abfrage haben?

    Gruß, Daniel
    EDIT:
    php-tag sponsered by asp2php.
    Zuletzt geändert von asp2php; 12.11.2004, 09:51.

  • #2
    urlencode sollte dir dabei helfen

    Kommentar


    • #3
      ..wenn ich $uebergabestatement durch die urlencode-Funktion schicke, funktioniert es selbst mit dem einfachen SQL-Statement nicht mehr...

      Kommentar


      • #4
        ich meine so
        PHP-Code:
        ...&sqlstatement=".urlencode($sqlstatement)."&star... 
        oder wie hast du 's gemacht?

        Kommentar


        • #5
          ..ja, genauso hab ich das gemacht...

          Kommentar


          • #6
            musst dann natürlich bevor du das statement an die db schickst ein urldecode machen!
            die hummel ist ein sinnloses tier ohne zukunft!

            Kommentar


            • #7
              Original geschrieben von dispositor
              musst dann natürlich bevor du das statement an die db schickst ein urldecode machen!
              muß man nicht wenn man per $_GET aus liest, $_GET macht von alleine. Bei RG = on ist was anderes

              @Batz_Junior, zeige mal wie du in der Datei sqlstatement wieder verwendet.

              Kommentar


              • #8
                ..okay, hatte ich vergessen. Aber auch mit urldecode bringt es nichts...

                Kommentar


                • #9
                  PHP-Code:
                  $start_next=$start+100;
                             
                  $start_previous=$start-100;
                             
                  //echo $sqlstatement."<br>";
                                 
                  $sqlstatement=stripslashes($sqlstatement);
                  //überflüssige Backslashes entfernen, da diese sonst bei der SQL-Abfrage stören
                                 //echo $sqlstatement;
                                 
                  $query=$sqlstatement;
                                 
                  $query.=" limit ".$start.",".$anzahl;
                                 
                  //echo $query;
                                 
                  $result=mysql_query($query);
                                 if (
                  mysql_errno() > ) {
                              echo 
                  "<DIV ALIGN=\"LEFT\"><FONT COLOR=\"#FF0000\">
                  Fehler bei der Abfrage: "
                  mysql_error(), "</FONT></DIV>\n";
                             }
                             
                  //echo $result;
                                 
                  $menge=mysql_num_rows($result); //Zählen der Ergebnismenge
                             //echo $start."&nbsp;";
                             //echo $menge;
                             //$uebergabestatement=str_replace("\"","\\\"",$sqlstatement);
                             
                  $uebergabestatement=addslashes($sqlstatement);
                             
                  //echo "<br>".$uebergabestatement;
                                 
                  printf("<input type=button onClick=\"window.location.href='".
                  $PHP_SELF."'\" value=\"Neue Suche\">");
                                 if(
                  $start!=0){
                                
                  printf("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                  <input type=button onClick=\"window.location.href=

                  '"
                  .$PHP_SELF."?submit=1&Datenbank=".$Datenbank."&sqlstatement=".
                  $sqlstatement."&start=".$start_previous."&anzahl=".$anzahl."'\" 
                  value=\"vorherige Treffer\">"
                  );}
                             if(
                  $menge==100){ //wenn Ergebnismenge>100 stelle Weiter-Button dar
                                
                  if($start==0) echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
                  else echo 
                  "&nbsp;";
                                
                  printf("<input type=button onClick=\"window.location.href='".
                  $PHP_SELF."?submit=1&Datenbank=
                  "
                  .$Datenbank."&sqlstatement=".
                  $uebergabestatement."&start=".$start_next."&anzahl=".$anzahl."'\" 
                  value=\"nächste Treffer\">"
                  );}
                            
                  ?> 
                  Zu Beginn wird $start mit 0 und $anzahl mit 100 übergeben.Weiter unten wird dann noch die Ausgabe von $result generiert, interessiert hier aber, denke ich nicht.
                  EDIT:
                  line break sponsored by asp2php. Bitte demnächst selbst dafür sorgen.
                  Zuletzt geändert von asp2php; 12.11.2004, 10:05.

                  Kommentar


                  • #10
                    Original geschrieben von Batz_Junior
                    ..okay, hatte ich vergessen. Aber auch mit urldecode bringt es nichts...
                    DAS sehe ich aber nirgends

                    Kommentar


                    • #11
                      ..habs auch schon wieder rausgenommen, da es ja eben nichts brachte...

                      Kommentar


                      • #12
                        Original geschrieben von Batz_Junior
                        ..habs auch schon wieder rausgenommen, da es ja eben nichts brachte...
                        mich interessiert aber, wo du 's machst. Außerdem wasfür PHP-Version hast du?

                        Kommentar


                        • #13
                          PHP-Code:
                          $start_next=$start+100;
                                     
                          $start_previous=$start-100;
                                     
                          //echo $sqlstatement."<br>";
                                         
                          $sqlstatement=stripslashes($sqlstatement);
                          //überflüssige Backslashes entfernen, da diese sonst bei der SQL-Abfrage stören
                                         //echo $sqlstatement;
                                         
                          $sqlstatement=urldecode($sqlstatement);
                                         
                          $query=$sqlstatement;
                                         
                          $query.=" limit ".$start.",".$anzahl;
                                         
                          //echo $query;
                                         
                          $result=mysql_query($query);
                                         if (
                          mysql_errno() > ) {
                                      echo 
                          "<DIV ALIGN=\"LEFT\"><FONT COLOR=\"#FF0000\">
                          Fehler bei der Abfrage: "
                          mysql_error(), "</FONT></DIV>\n";
                                     }
                                     
                          //echo $result;
                                         
                          $menge=mysql_num_rows($result); //Zählen der Ergebnismenge
                                     //echo $start."&nbsp;";
                                     //echo $menge;
                                     //$uebergabestatement=str_replace("\"","\\"",$sqlstatement);
                                     
                          $uebergabestatement=addslashes($sqlstatement);
                                     
                          //echo "<br>".$uebergabestatement;
                                         
                          printf("<input type=button onClick=\"window.location.href='".
                          $PHP_SELF."'\" value=\"Neue Suche\">");
                                         if(
                          $start!=0){
                                        
                          printf("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                          <input type=button onClick=\"window.location.href=

                          '"
                          .$PHP_SELF."?submit=1&Datenbank=".$Datenbank."&sqlstatement=".
                          $sqlstatement."&start=".$start_previous."&anzahl=".$anzahl."'\" 
                          value=\"vorherige Treffer\">"
                          );}
                                     if(
                          $menge==100){ //wenn Ergebnismenge>100 stelle Weiter-Button dar
                                        
                          if($start==0) echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
                          else echo 
                          "&nbsp;";
                                        
                          printf("<input type=button onClick=\"window.location.href='".
                          $PHP_SELF."?submit=1&Datenbank=
                          "
                          .$Datenbank."&sqlstatement=".
                          urlencode($uebergabestatement)."&start=".$start_next."&anzahl=".$anzahl."'\" 
                          value=\"nächste Treffer\">"
                          );}
                                    
                          ?> 
                          PHP-Version:4.2.3

                          Kommentar


                          • #14
                            mach mal so:
                            PHP-Code:
                            echo $sql $_GET['sqlstatement']; 
                            ist die Ausgabe identisch mit dem was du eingetippt hast?

                            Kommentar


                            • #15
                              ..es kommt gar keine Ausgabe!??

                              Kommentar

                              Lädt...
                              X