kostenloser Webspace werbefrei: lima-city


MySQL: Wenn bereits bestehend, nicht ersetzen.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tshg

    Kostenloser Webspace von tshg

    tshg hat kostenlosen Webspace.

    Dringende MySql Script frage?
    Hallo ich möchte eine Datei bearbeiten?
    Und zwar habe ich folgendes Problem, immer wenn bei einer Eingabe zwei mal die selbe Kategorie angegeben wird die erste überschrieben.
    Gibt es eine Möglichkeit das bei der Eingabe das zweite Thema wenn es gleich ist nicht gespeichert wird?
    Der Eingabe zwang ist ja schon vorhanden.
    Also er darf nur nicht gleich sein.

    Ich hätte das betreffende Script gespeichert, aber ich finde das Tool hier gerade nicht?
    Es geht um cat

    $conn = mysql_connect($mysqlhost,$mysqluser,$mysqlpw) or die("$lang_no_conn");
    mysql_select_db($database,$conn) or die("$lang_no_conn");
    switch($link)
    {
      case "add":
      if($title=="" or $url=="" or $description=="" or $lang=="" or $cat=="" or $name=="" or $email=="" or $password=="")
      {


    or $cat==""

    Danke für eure hilfe!

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo tshg,

    wenn ich dein Post richtig verstehe, dann willst Du lediglich verhindern, dass ein doppelter Eintrag in der DB vorhanden ist. Wenn das wirklich das Problem ist, dann prüfe doch in der IF-Abfrage als erstes ob der zu erzeugende Eintrag bereits vorhanden ist und schreibe ihn nur, wenn er nicht enthalten ist.

    Gruß Proshac
  4. Autor dieses Themas

    tshg

    Kostenloser Webspace von tshg

    tshg hat kostenlosen Webspace.

    An sich wäre das auch die Lösung?
    Aber es handelt sich um ein Linkscript.
    Und das ist das einzige was nicht richtig läuft.
    User könne einen link einsenden oder eben eine Kategorie erstellen.
    Und ich glaube nicht das dies ein user beachtet?
    Dachte es gäbe eine einfache Lösung wie kleiner oder größer wie cat ?

    Hier mal der kommplette Code:

    <?php
    include("inc/config.inc.php");
    include("lang/$language.php");
    
    $conn = mysql_connect($mysqlhost,$mysqluser,$mysqlpw) or die("$lang_no_conn");
    mysql_select_db($database,$conn) or die("$lang_no_conn");
    switch($link)
    {
      case "add":
      if($title=="" or $url=="" or $description=="" or $lang=="" or $cat=="" or $name=="" or $email=="" or $password=="")
      {
        include("inc/header.inc.php");
        echo "$lang_forget_field";
        include("inc/footer.inc.php");
      }
      else
      {
        $title = str_replace("'"," (--) ",$title);
        $date = time();
        $query = "insert into ".$prefix."_links (title,active,url,description,lang,date,visits,rating,votes,category,name,email,password) values ('$title','yes','$url','$description','$lang','$date','0','0','0','$cat','$name','$email','$password')";
        $result = mysql_query($query);
    
        if(!$result)
        {
          include("inc/header.inc.php");
          echo "$lang_error";
          include("inc/footer.inc.php");
        }
        else
        {
          include("inc/header.inc.php");
          echo "$lang_link_added";
          include("inc/footer.inc.php");
        
          $query = "select email from ".$prefix."_admins";
          $result = mysql_query($query);
          $row = mysql_fetch_array($result);
          $wmmail = $row['email'];
    
          mail($email,$subject,$mailbody,"FROM:$wmmail");
          mail($wmmail,$subject1,$mailbody1,"FROM:$vswl_title");
          echo "<a href='$base_url/'>$lang_back</a>";
        }
      }
      break;
    
      case "update":
      if($title=="" or $url=="" or $description=="" or $lang=="" or $cat=="" or $name=="" or $email=="" or $password=="")
      {
        include("inc/header.inc.php");
        echo "$lang_forget_field";
        include("inc/footer.inc.php");
      }
      else
      {
        $title = str_replace("'"," (--) ",$title);
        $query = "update ".$prefix."_links set title='$title',url='$url',description='$description',lang='$lang',category='$cat',name='$name',email='$email',password='$password',active='no' where id = '$id'";
        $result = mysql_query($query);
    
        if(!$result)
        {
          include("inc/header.inc.php");
          echo "$lang_error";
          include("inc/footer.inc.php");
        }
        else
        {
          include("inc/header.inc.php");
          echo "$lang_link_edited";
          include("inc/footer.inc.php");
              
          $query = "select email from ".$prefix."_admins";
          $result = mysql_query($query);
          $row = mysql_fetch_array($result);
          $wmmail = $row['email'];
    
    
          mail($email,$subject2,$mailbody2,"FROM:$wmmail");
          mail($wmmail,$subject3,$mailbody3,"FROM:$vswl_title");
          echo "<a href='$base_url/'>Zurück</a>";
        }
      }
    }
    ?>


    Beitrag zuletzt geändert: 6.12.2009 21:03:29 von tshg
  5. Hmmm

    Verstehe ich dein Problem so richtig:

    1. Es gibt einen Eintrag des Users
    title,active,url,description,lang,date,visits,rating,votes,category,name,email,password
    mit URL ist belegt und category ist belegt

    2. Nun aktualisiert der User den Eintrag, dabei ist category allerdings leer und überschreibt den vorhandnen Eintrag?

    Wenn dem so ist, mußt du dein Update-Query abhängig machen von den gelieferten Werten
    Etwa so:
    $query = "update ".$prefix."_links set title='$title';
    if ($url != "" )
    {
      $query = $query . ", url='$url' ";
    };
    if ($category != "" )
    {
      $query = $query . ", category='$cat' "
    }
    ......
  6. Und wenn du das ganze von Datenbankseite angehst, dann setzt du ein UNIQUE-Index oder ein PRIMARY-Index auf die Spalte.
  7. Das Problem ist wohl, dass bei Änderung des Datensatzes Felder nicht mit leeren Inhalten überschrieben werden sollen (sofern ich das Problem überhaupt verstanden habe)
    Da nützt auch kein Index, da leere Felder an sich wohl kein Problem sind.

    Beitrag zuletzt geändert: 7.12.2009 16:12:43 von vopvop
  8. Autor dieses Themas

    tshg

    Kostenloser Webspace von tshg

    tshg hat kostenlosen Webspace.

    Also es handelt sich um ein Linklisten Script.
    <?php
    include("inc/config.inc.php");
    include("inc/header.inc.php");
    include("lang/$language.php");
    ?>
    
    <? echo $lang_link_add; ?><p><form name="form1" method="post" action="save.php">
    <table class=table width="40%" border="0">
    <tr>
    <td width="25%"><b><? echo "$lang_name"; ?></b></td>
    <td width="75%"><input type="text" name="title"></td>
    </tr>
    <tr>
    <td width="25%"><b>URL: </b>(ohne http://!)</td>
    <td width="75%"><input type="text" name="url"></td>
    </tr>
    <tr>
    <td width="25%"><b><? echo $lang_desc;?>:</b></td>
    <td width="75%"><textarea name="description" cols="30" rows="5"></textarea></td>
    </tr>
    <tr>
    <td width="25%"><b><? echo $lang_lang; ?>:</b></td>
    <td width="75%"><input type="text" name="lang"></td>
    </tr>
    <tr>
    <td width="25%"><b><? echo $lang_category; ?>:</b></td>
    <td width="75%">
    <select name="cat">
    <?php
    $conn = mysql_connect($mysqlhost,$mysqluser,$mysqlpw) or die("$lang_no_conn");
    mysql_select_db($database,$conn) or die ("$lang_no_conn");
    $query = "select name from ".$prefix."_categories";
    $result = mysql_query($query);
    
    while($row=mysql_fetch_array($result))
    {
      $cat = $row['name'];
      echo "<option value='$cat'>$cat</option>";
    }
    ?>  
    </select></td>
    </tr>
    </table><br><? echo $lang_not_release; ?><br>
    <table class=table width="40%" border="0">
    <tr>
    <td width="25%"><b><?php echo $lang_yourname; ?>:</b></td>
    <td width="75%"><input type="text" name="name"></td>
    </tr>
    <tr>
    <td width="25%"><b><?php echo $lang_youremail;?>:</b></td>
    <td width="75%"><input type="text" name="email"></td>
    </tr>
    <tr>
    <td width="25%"><b><?php echo $lang_yourpassword; ?>:</b></td>
    <td width="75%"><input type="password" name="password"></td>
    </tr>
    </table>
    <input type="hidden" name="link" value="add">
    <input type="submit" name="submit" value="Abschicken">
    </form>
    <?php
    include("inc/footer.inc.php");
    ?>


    Ist das Eingabe Formular.
    Diese angaben werden dann an :

    <?php
    include("inc/config.inc.php");
    include("lang/$language.php");
    
    $conn = mysql_connect($mysqlhost,$mysqluser,$mysqlpw) or die("$lang_no_conn");
    mysql_select_db($database,$conn) or die("$lang_no_conn");
    switch($link)
    {
      case "add":
      if($title=="" or $url=="" or $description=="" or $lang=="" or $cat=="" or $name=="" or $email=="" or $password=="")
      {
        include("inc/header.inc.php");
        echo "$lang_forget_field";
        include("inc/footer.inc.php");
      }
      else
      {
        $title = str_replace("'"," (--) ",$title);
        $date = time();
        $query = "insert into ".$prefix."_links (title,active,url,description,lang,date,visits,rating,votes,category,name,email,password) values ('$title','yes','$url','$description','$lang','$date','0','0','0','$cat','$name','$email','$password')";
        $result = mysql_query($query);
    
        if(!$result)
        {
          include("inc/header.inc.php");
          echo "$lang_error";
          include("inc/footer.inc.php");
        }
        else
        {
          include("inc/header.inc.php");
          echo "$lang_link_added";
          include("inc/footer.inc.php");
        
          $query = "select email from ".$prefix."_admins";
          $result = mysql_query($query);
          $row = mysql_fetch_array($result);
          $wmmail = $row['email'];
    
          mail($email,$subject,$mailbody,"FROM:$wmmail");
          mail($wmmail,$subject1,$mailbody1,"FROM:$vswl_title");
          echo "<a href='$base_url/'>$lang_back</a>";
        }
      }
      break;
    
      case "update":
      if($title=="" or $url=="" or $description=="" or $lang=="" or $cat=="" or $name=="" or $email=="" or $password=="")
      {
        include("inc/header.inc.php");
        echo "$lang_forget_field";
        include("inc/footer.inc.php");
      }
      else
      {
        $title = str_replace("'"," (--) ",$title);
        $query = "update ".$prefix."_links set title='$title',url='$url',description='$description',lang='$lang',category='$cat',name='$name',email='$email',password='$password',active='no' where id = '$id'";
        $result = mysql_query($query);
    
        if(!$result)
        {
          include("inc/header.inc.php");
          echo "$lang_error";
          include("inc/footer.inc.php");
        }
        else
        {
          include("inc/header.inc.php");
          echo "$lang_link_edited";
          include("inc/footer.inc.php");
              
          $query = "select email from ".$prefix."_admins";
          $result = mysql_query($query);
          $row = mysql_fetch_array($result);
          $wmmail = $row['email'];
    
    
          mail($email,$subject2,$mailbody2,"FROM:$wmmail");
          mail($wmmail,$subject3,$mailbody3,"FROM:$vswl_title");
          echo "<a href='$base_url/'>Zurück</a>";
        }
      }
    }
    ?>


    Gesendet.
    Das bedeutet wenn also zum zweiten mal ein link mit dem Namen “ich” erstellt wird der erste überschrieben.
    Laut einer Idee müsste also:
    Abfragen ob es “ich” schon gibt und wenn nicht, dann erst die Kategorie erstellen?
    Wenn ja wie?

    Ich denke es hat etwas mit:

    REPLACE INTO ".$prefix."_links (title) VALUES ('$title')
    oder:
    INSERT IGNORE INTO ".$prefix."_links (title) VALUES ('$$title')
    zu tun?
    Welches ich irgendwo einfügen müsste?
    Aber wie und wo?


    Beitrag zuletzt geändert: 7.12.2009 20:04:46 von tshg
  9. Sorry, aber irgendwie habe ich das Gefühl, als wenn ich nicht der einzige bin, der dein Problem nicht so ganz versteht.
    Ich glaube du selbst verstehst es auch nicht 100%, oder?

    Hast du das Script selbst entwickelt oder "irgendwo" her?
    Was genau soll das Script eigentlich tun?
    Was genau läuft nicht wie gewünscht?
    Wofür steht "link", wofür steht "Kategorie" und wofür steht "title"?
    Wird ein ganzer Datensatz überschrieben oder nur einzelne Spalten?
  10. MySQL erlaubt eigentlich ohne Probleme auch doppelte Werte, also sollte da nichts überschrieben werden. Gerade, da die ID ja über auto_increment eingefügt wird. Im Prinzip solltest du auch tausend Links mit dem Titel 'ich' haben können, die auch alle in der selben Kategorie stehen.
    Ich erkläre mir das höchstens so, dass deine Tabellendefinition keine doppelten Werte erlaubt und deswegen die alten überschreibt.
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!