Announcement

Collapse
No announcement yet.

MySQL: Wenn bereits bestehend, nicht ersetzen.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MySQL: Wenn bereits bestehend, nicht ersetzen.

    Hallo. ich hoffe Ihr könnt mir helfen?

    Also es handelt sich um ein Linklisten Script.

    PHP Code:
    <?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 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>";
        }
      }
    }
    ?>
    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?

  • #2
    Hallo,
    Originally posted by mailto View Post
    ...Das bedeutet wenn also zum zweiten mal ein link mit dem Namen “ich” erstellt wird der erste überschrieben.
    Also aus dem Code folgt das nicht zwangsläufig, Überschrieben wird nur wenn $link == 'update', also unabhängig von einem Namen. Bei $link == 'add' wird ein neuer DS erstellt, auch unabhängig von einem Namen - es sei denn auf dem Feld name der Tabelle liegt ein UNIQUE-Index, dann würde ein Fehler ausgelöst werden.

    Originally posted by mailto View Post
    ...Laut einer Idee müsste also:
    Abfragen ob es “ich” schon gibt und wenn nicht, dann erst die Kategorie erstellen?
    Was für eine Kategorie?

    Originally posted by mailto View Post
    ...Ich denke es hat etwas mit:

    REPLACE INTO ".$prefix."_links (title) VALUES ('$title')
    oder:
    INSERT IGNORE INTO ".$prefix."_links (title) VALUES ('$$title')
    zu tun?
    Das kommt doch darauf an was du machen willst. REPLACE INTO ist ein INSERT-Befehl, mit dem Unterschied, das für den o.g. Fall einer Unique-Key-Verletzung kein Fehler ausgelöst, sondern der bestehende DS vorher gelöscht, also "ersetzt" wird.
    INSERT IGNORE INTO ist ebenfalls ein ganz normaler Insert-Befehl, bei dem im Falle der o.g. Unique-Key-Verletzung einfach NICHTS passiert, diese also "ignoriert" wird.
    Je nachdem welche Schlüsselfelder in der Tabelle definiert sind und was bei "doppelten" Einträgen passieren soll kannst du also INSERT INTO - Fehlermeldung, REPLACE INTO - Ersetzen oder INSERT IGNORE INTO - Ignorieren verwenden.

    Gruß Falk

    P.S.: Du solltest dich mal mit dem Thema SQL-Injektion, Maskierung und Sicherer PHP-Code auseinandersetzen. Dein Script weist diesbezgl. etliche Schwächen auf.
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X