Vorhandene einträge überspringen

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

  • Vorhandene einträge überspringen

    Hallo zusammen

    Mein Problem ist ich möchte daten die hintereinander in einem Textfeld durch leerzeichen getrennt eingegeben wurden überprüfen, was soweit kein Problem ist nur wenn erkannt wurde das ein eintrag schon vorhanden ist (die zeichenkette wird übrigens zerlegt) wird durch ein return die While schleife unterbrochen und die werte werden nicht an die tabelle übergeben

    Break Continue, habe ich schon versuch, bei beiden wird der eintrag der eigentlich schon verhanden ist trotzdem mit übernommen, hat nicht einer ein Script das diesen wert entfernt oder aber überspringt so das dieser nicht in die Datenbank tabelle geschrieben wird

    Textfeld: 123.123.123 124.124.124

    hier mal ein ausschnitt wie es zu zeit bei mir ist
    PHP-Code:
    $count strtok ($_POST['zahl']," ");
    $suchmuster = array ("/(\d+)-(\d+)-(\d+)/""/(\d+).(\d+).(\d+)/""/(\d+),(\d+),(\d+)/");
    $ersetzen = array ("\\1:\\2:\\3""\\1:\\2:\\3""\\1:\\2:\\3");
    while (
    $count) {
    $zahl preg_replace($suchmuster$ersetzen$count);

    $sql="select number from table";
    $result=mysql_query($sql);
    while (
    $wert mysql_fetch_array($result))
    {
    if(
    $wert['number']=="$zahl"){echo "Schon vorhanden. $zahl"; return;}
    }

    $sql "INSERT INTO table SET spalte='$zahl'";
    mysql_query($sql) OR die(mysql_error());

    $count strtok (" ");


  • #2
    RETURN geht schonmal nicht, das es nur in Zusammenhang mit Funktionen Sinn macht:
    http://de2.php.net/manual/de/function.return.php

    Normalerweise wäre CONTINUE/BREAK das richtige - aber da du ja eine Schleife in der Schleife hast, wird nur die innere Schleife übersprungen/abgebrochen und die äußere trotzdem weiter ausgeführt.

    Ganz auf die Schnelle würde ich es so machen

    PHP-Code:
    function numberExists($zahl){
      
    $sql="select number from table";
      
    $result=mysql_query($sql);
      while (
    $wert mysql_fetch_array($result)){
         if(
    $wert['number']==$zahl){
           return 
    true;
        }
      }
      return 
    false;
    }

    $count strtok ($_POST['zahl']," ");
    $suchmuster = array ("/(d+)-(d+)-(d+)/""/(d+).(d+).(d+)/""/(d+),(d+),(d+)/");
    $ersetzen = array ("\1:\2:\3""\1:\2:\3""\1:\2:\3");
    while (
    $count) {
      
    $zahl preg_replace($suchmuster$ersetzen$count);

      if(
    numberExists($zahl)) continue;

      
    $sql "INSERT INTO table SET spalte='$zahl'";
      
    mysql_query($sql) OR die(mysql_error());

      
    $count strtok (" ");

    Habe den Code nicht geprüft, aber so in etwa sollte es gehen - wenn ich deine Problemstellung richtig verstanden habe.

    gruss Markus
    Simploo CMS - das einfache Webseiten-Bearbeitungsprogramm

    Kommentar


    • #3
      wenn du in der db die spalte als unique deklarierst, wird niemals zweimal der gleiche wert eingetragen ... dann sparts du dir auch das ganze gefitzel.
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #4
        unique index auf Spalte `spalte` setzen und denn:

        PHP-Code:
        $zahlen array_unique(
          
        preg_split('/\\s+/',
          
        preg_replace('/0*(\\d+)(-|.|,)0*(\\d+)\\2(0*)(\\d+)\\2/''$1:$3:$5',
          
        trim($_POST['zahl'])
        )));
        foreach(
        $zahlen as $zahl)
          
        mysql_query("INSERT INTO table (spalte) values('$zahl')");
        // ohne "die()", die "duplicate entry"-Meldungen müssen ignoriert werden! 
        eins noch @Meisterpz: Einrückungen erhöhen die Lesbarkeit von Source Code ungemein!
        Zuletzt geändert von Titus; 08.06.2005, 09:42.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Ich danke allen die mir geholfen haben!

          @eintrachtemil Deine lösung verursacht ein komplette überlastung und dann ein timeout

          @derHund ein guter vorschlag den ich auch schon mal in betacht gezogen hatte, ja und jetzt auch nutze

          @Titus ich werde es beim nähsten mal beachten den code einzurücken


          nochmals danke

          Kommentar

          Lädt...
          X