Inputbox (sql INSERT INTO)



  • Hey Leute,

    ich habe eine kleine frage, müsste nicht so schwer sein!
    ich habe eine Inputbox, wo der User seine email Addy eintragen kann, anschließend wird die eMail Addresse in meiner Datenbank eingetragen!

    Meine Frage wie mache ich es, dass der User mehrer Email addressen eintragen kann ( mit Komma trennen)

    Oder in sql wie lautet der Befehl?

    $eintrag = "INSERT INTO `tabelle` ( `spalte` ) 
    
    VALUES ('1@live.de')
    VALUES ('2@live.de')
    VALUES ('3@live.de')";
    

    Mehrere Values funktionieren nicht!

    ich möchte es gerne so haben

    VALUES ('2@live.de,3@live.de,4@live.de')
    

    Dann solte meine Datenbank so aussehen
    EMAIL
    2@live.de
    3@live.de
    4@live.de

    geht sowas? am besten mit der inputbox



  • bin verwirrt.. aber ich hoffe ich habe es richtig verstanden.

    Du zerteilst den übergebene string aus dem inputfeld jeweils nach dem , (komma natürlich auch rausschneiden). Dann jagst du für jedes array element das du erhalten hast ein statement auf die datenbank. Wenn es wirklich dynamisch sein soll müsst deine tabelle ungefair so aussehen

    id_email, id_nutzer, email_addy



  • Hey,

    also meine Tabelle steht schon!
    Die sieht so aus

    id email password

    nunja und ich habe jetzt eine inputbox
    email & password

    der User trägt seine email und sein password ein, anschließend wird in meine Datenbank id email und password eingetragen

    Nun möchte ich das die inputbox email mehrere funktionen hat, also das es möglich ist 2 Emails einzutragen(z.b: 1@live.de,2@live.de,3@live.de)

    Datenbank sollte dann so aussehen
    id email password
    1 1@live.de
    2 2@live.de
    3 3@live.de
    ( ich möchte die spalte email erweitern bzw mehrere Einträge hinzufügen)



  • also du kannst entweder deine tabellenstruktur ändern

    id email1 email2 email3 email4 passwort
    

    und schreibst also jede mail adresse einzeln rein...

    ...oder du schreibst alle email adressen wie von dir vorgeschlagen kommesepariert in das eine email-feld deiner tabelle, dass du ja schon hast.

    hier ist jetzt die frage, wie die mail adressen auf deiner seite eingetragen werden. hast du mehrere input felder, zb:

    inputfeld:email1, inputfeld:email2, inputfeld:email3, inputfeld:passwort
    

    oder hast du folgendes:

    inputfeld:email, inputfeld:passwort
    

    wenn du ersteres hast, musst du dir mit php (ich geh jetzt mal davon aus, dass du php benutzt) eine funktion schreiben, welche dir jedes inputfeld mit einem komma dahinter in eine variable schreibt.. zb so ungefähr

    $var emailvar = $_GET['email1'].','.$_GET['email2'].','.$_GET['email3'];
    

    wenn du deine mail adressen in einem inputfeld bekommst, so in der art

    mail1@example.com,mail2@example.com,mail3@example.com
    

    dann kannste ja auch einfach mit

    $emailvar = $_GET['email'];
    $sql = insert into deinetabelle(´email´) VALUES($emailvar);
    etc...
    

    die adressen eintragen. im übrigen brauchst du natürlich auch eine funktion zum separieren der mail adressen, damit du damit auch arbeiten kannst.

    hab ich dich richtig verstanden? wolltest du das wissen oder hab ich grad meine zeit verschwendet? 🙂



  • 😕 verwirrt den armen doch nicht so...

    <form method="POST">
    <input type="text" name="mails" />
    <input type="submit" name="submit" value="foobar" />
    </form>
    
    $mails = $_POST['email'];
    $mails = explode(",", $mails);
    foreach($mails as $mail)
    {
        mysql_query("INSERT INTO tabelle (`email`) VALUES ('".$mail."');
    }
    

    Mehr isset nich...

    Erklärung: $_POST['mails'] enthält den Inhalt aus dem input (name="mails"). Dies wird durch explode in seine Einzelteile zertrennt und schön nacheinander in die Datenbank geschrieben...

    VlG



  • Korrektur:

    mysql_query("INSERT INTO tabelle (`email`) VALUES ('".$mail."')");
    


  • hmmz schrieb:

    😕 verwirrt den armen doch nicht so...

    Wer verwirt hier wen? Ich wüsste jetzt wirklich gern, was genau michi-ffm jetzt haben will 🙂



  • Hey, beide Code sind spitze und ich dachte die würden klappen oder ich bin zu blöd die einzusetzen... aber trotzdem danke die haben mir etwas geholfen ich meinte eher so

    $sql = 'INSERT INTO `login` (`id`, `password`, `email`) VALUES (NULL, \'\', \'michi@live.de\'), (NULL, \'\', \'test@live.de\');';

    aber ich möchte ja z.b. 50 emails eintrag ... also copy and paste



  • ich versteh immer noch nicht, was du genau willst 😕

    willst du
    1. pro benutzer eine id, eine emailadresse und ein passwort
    oder
    2. pro benutzer eine id, viele emailadressen und ein passwort?

    also mir würde es helfen, wenn du mal fünf datensätze in tabellenform mal beispielsweise aufschreiben würdest.

    trotzdem versuch ich es nochmal mit einem codeschnipsel:

    //html-formular
    <form action="deinPhpSkript.php" method="post">
     <input type="text" id="email1" name="email1" />
     <input type="text" id="email2" name="email2" />
     <input type="text" id="email3" name="email3" />
     <input type="text" id="passwort" name="passwort" />
    </form>
    
    //deinPhpSkript.php
    $emailvar = $_POST['email1'].','.$_POST['email2'].','.$_POST['email3'];
    $passwort = $_POST['passwort'];
    
    $result = mysql_query("INSERT INTO `deinetabelle` 
                                    (`email`, `passwort`)
                                  VALUES 
                                    ('$emailvar', '123456')");
    

    Generell hab ich das Gefühl, dass Du bei einem Login noch mehr Infos brauchst... schau mal hier: http://www.phpbuddy.eu/login-systeme-einfach-bis-profi.html?showall=1



  • Hallo,

    seinem ersten Post zufolge will er, dass ein Benutzer mehrere - durch Komma getrennte - EMail-Adressen eintragen kann. Dafür gibt es allerdings keine reine MySQL-Lösung. Die EMail-Adressen müssen zuvor auseinander genommen werden. Wie sie dann in die Datenbank gelangen spielt keine Rolle. Entweder alle gemeinsam:

    $emails = explode(",", $_POST['email']);
    mysql_query("INSERT INTO `tabelle` (`email`) VALUES ('".trim($emails)[0]."'),'".trim($emails[1])."')");
    

    oder eben einzeln:

    $foo = explode(",", $_POST['email']);
    foreach($foo as $bar)
    {
       mysql_query("INSERT INTO `tabelle` (`email`) VALUES ('".$bar."')");
    }
    

    Bevor die Klugsch.... des Forums wieder ankommen und sich mit ihrem geballten Theoriewissen auf uns stürzen: denke bei solchen Fällen bitte immer an SQL-Injections und schütz dich entsprechend dagegen. Einfachste Lösung: die verwendung von mysql_real_escape_string().

    VlG



  • WOW SPITZE du bist klasse, Danke vielmals XD

    Der Code hat mir viel geholfen chef!

    $foo = explode(",", $_POST['email']); 
    foreach($foo as $bar) 
    { 
       mysql_query("INSERT INTO `tabelle` (`email`) VALUES ('".$bar."')"); 
    }
    

    bzw. Danke euch beiden XD

    kleine frage bei Rande dieser Code dient doch zur abfrage von der Spalte (email) ?

    $email=  mysql_query("SELECT `email` FROM `login`");
    

    Würde sowas Funktionieren?

    $email=  mysql_query("SELECT `email` FROM `login`");
    $empfaenger =  $email;
    


  • Hallo,

    fast! Um tatsächlich die Email-Adresse zu erhalten musst du den Code noch etwas erweitern

    $result = mysql_query("SELECT `email` FROM `login`");
    while($row = mysql_fetch_array($result))
    { 
       print $row[0]; // 0 ist hierbei der SELECT-Index (email) $row['email'] würde genauso funktionieren
    }
    mysql_free_result($result);
    

    VlG



  • Ich erweiter meine Aussage mal noch etwas. An der Stelle wird es komplexer.

    Willst du eine EMail-Adresse anhand einer bestimmten Bedingung au der Datenbank lesen, so benötigst du eine WHERE-Klausel. Nehmen wir an du willst alle EMail-Adressen des Nutzers "foobar":

    $result = mysql_query("SELECT `email` FROM `login` WHERE `user`='foobar'");
    while($row = mysql_fetch_array($result))
    { 
       print "EMail: " . $row[0] . "<br />";
    }
    mysql_free_result($result);
    

    Willst du hingegen alle EMail-Adressen ( unabhängig vom Nutzer ), so kannst du auf die WHERE-Klausel verzichten:

    $result = mysql_query("SELECT `email` FROM `login`");
    while($row = mysql_fetch_array($result))
    { 
       print "EMail: " . $row[0] . "<br />";
    }
    mysql_free_result($result);
    

    VlG



  • Hey Danke haha hat mir ebenso etwas geholfen! wow

    $result = mysql_query("SELECT `email` FROM `login`"); 
    while($row = mysql_fetch_array($result)) 
    { 
       print "EMail: " . $row[0] . "<br />"; 
    } 
    mysql_free_result($result);
    

    logisch!

    ich möchte gerne emails versenden, an alle datensätze bzw Usern

    $result = mysql_query("SELECT `email` FROM `login`"); 
    while($row = mysql_fetch_array($result)) 
    { 
       print "EMail: " . $row[0] . "<br />"; 
    } 
    
    $empfaenger=mysql_query($result);
    $mail_absender=  "test@live.de";
    $betreff="Eine Testmail";
    $text="test Text";
    
    [b]mail($empfaenger, $betreff, $text,"from:$mail_absender");
    [/b]
    echo "Mail wurde gesendet!";
    ?>
    

    Fehlermeldung:

    Warning: mail() expects parameter 1 to be string, resource given in
    


  • Hallo,

    dann fass beide Codes einfach zusammen 🙂

    $result = mysql_query("SELECT `email` FROM `login`"); 
    while($row = mysql_fetch_array($result)) 
    { 
       $empfaenger    = $row[0];
       $mail_absender = "test@live.de";
       $betreff       = "Eine Testmail";
       $text          = "test Text";
    
       if (!mail($empfaenger, $betreff, $text, "from:$mail_absender")) 
          print "Mail an " . $empfaenger . " konnte nicht gesendet werden!<br />";
    
    } 
    mysql_free_result($result);
    

    Die mail-Funktionen ansich sind sehr interessant. Man hat mit diversen Mail-Klassen unendlich Möglichkeiten zum Versand von EMails. Zum Beispiel auch Versand von HTML-EMails durch Angleichen des Headers. Oder Verssand mit Dateianhängen (ebenfalls Header-Geschichte)...

    VlG



  • Hey Super hat geklappt ohne Fehlermeldung!
    ist doch nicht so schwer als ich gedacht habe XD

    eine weitere kleine frage
    wie lösche ich alle Datensätze? also die ganzen emails nochmal?

    DELETE FROM login WHERE email;
    


  • Hallo,

    entweder

    DELETE FROM `login`;
    

    oder

    TRUNCATE TABLE `login`;
    

    Macht aber in dem Fall - da du alle Datensätze löschst - keinen Unterschied...

    VlG



  • Hey,

    oh man wie dumm muss man sein XD ist logisch haha sowas von logo
    sorry;

    Dank dir vielmals !

    Hättest du ein Vorschlag wie ich emails prüfen kann, nach existens?
    Ich habs so gemacht

    $checkmail= "SELECT email FROM login WHERE email='$email'";
     else if($_POST['email']== '$checkmail'){
    
    $result= mysql_query($checkmail)OR die("Query: <pre>".$checkmail ."</pre>\n"."Antwort: ". mysql_error());
    

    aber irgendwie trägt er gleiche email addressen in meine datenbank ein!
    das mein letzte anliegen! dann habe ich alles was ich brauch

    Info: Zu deinem Code mit mehrere Addressen!
    Er fängt nur dann einzutragen wenn mindestens 2 EMail addressen eingetragen sind im input! wenn ich eine addresse eintrage und speicher passiert nichts, nur bei 2 addressen!



  • Hallo,

    ja, setz einen UNIQUE-INDEX (Eindeutigkeits-Schlüssel) auf die Spalte email in deiner Tabelle:

    ALTER TABLE `login` ADD UNIQUE (`email`);
    

    Dann änder den INSERT-Teil in Folgendes ab:

    $foo = explode(",", $_POST['email']); 
    foreach($foo as $bar) 
    { 
       mysql_query("INSERT INTO `tabelle` (`email`) VALUES ('".$bar."') ON DUPLICATE KEY UPDATE `email`=`email`"); 
    }
    

    VlG



  • michi-ffm schrieb:

    Info: Zu deinem Code mit mehrere Addressen!
    Er fängt nur dann einzutragen wenn mindestens 2 EMail addressen eingetragen sind im input! wenn ich eine addresse eintrage und speicher passiert nichts, nur bei 2 addressen!

    😕

    Folgendes Beispiel liefert folgende Ergebnisse:

    <?php
      $hmm = explode(",", $_POST['foo']);
      foreach($hmm as $aha)
      {
        print $aha . "<br />";
      }
    ?>
    <form method="POST">
    <input type="input" name="foo" />
    <input type="submit" name="submit" value="OK" />
    </form>
    

    Eingabe: 11,22,33,44
    Ausgabe:
    11
    22
    33
    44

    ---------------------------------------

    Eingabe: 11
    Ausgabe:
    11

    Also das verwundert mich nun, dass er bei dir erst ab 2 Einträgen etwas in der Datenbank ablegt?!

    LG



  • hm macht er nicht ist auch egal.. werde ich herrausfinden.. aber ich weis es noch nicht mit dem check

    ALTER TABLE `login` ADD UNIQUE (`email`);

    Das mein Vollständiger coder der nicht funkt!
    Wo ist der Fehler?

    $password=$_POST['password'];
    $email=$_POST['email'];
    $checkmail= "SELECT email FROM login WHERE email='$email'";
    
    if ($_POST['password'] == "") 
    { 
    echo "<center>Sie haben kein Password eingegeben</center>"; 
    } else if($_POST['email']== '$checkmail'){
    
    $result= mysql_query($checkmail)OR die("Query: <pre>".$checkmail ."</pre>\n"."Antwort: ". mysql_error());
    
    if (mysql_num_rows($result)>0){
    $error.= "- Die Eingegeben E-Mail Adresse ".$email ." ist bnereits in unserer Datenbank vorhanden";
    }
    
    }
    

Anmelden zum Antworten