Inputbox (sql INSERT INTO)



  • 😕 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";
    }
    
    }
    


  • Hallo,

    du vergleichst die Eingabe (_POST['emails']) mit einem SQL-Statement (checkmail)! Das kann nicht funktionieren. Nimm die Lösung mit dem UNIQUE und dem modifizierten INSERT und dann klappt das auch 🙂 .
    Das spart enorm viel Code und schont die Nerven des Programmierers. Zudem gibt es diese Funktionalitäten extra aus solchen Gründen (Code-Sparen)...

    VlG



  • hmm sorry ich glaub ich habe blackout von viel code :S

    form
    $password=$_POST['password'];
    $email=$_POST['email'];
    $checkmail= "ALTER TABLE `login` ADD UNIQUE (`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";
    }
    }
    
    else{
    
    $foo = explode(",", $_POST['email']); 
    foreach($foo as $bar) 
    { 
       mysql_query("INSERT INTO `login` (`email`) VALUES ('".$bar."') ON DUPLICATE KEY UPDATE `email`=`email`"); 
    }
    }
    

    weiß grad nicht wie ich es einbinden soll!



  • Hallo,

    dir fehlt Grundwissen für MySQL! Was du machen muusst ist, das Tabellenfeld `email` auf eindeutig (UNIQUE) setzen. Das ganze passiert nur einmal und hat den Sinn, dass es keinen zweiten Eintrag mit dem selben Inhalt geben darf!

    Du gehst also in deine MySQL-GUI (phpmyadmin z.B.) oder rufst es direkt über die Konsole auf. Dann führst du den Befehl ALTER TABLE `login` ADD UNIQUE (`email`); aus.

    In deinem PHP-Script machst du dann nichts anderes mehr als:

    $password = $_POST['password'];
    $emails   = $_POST['emails'];
    
    if ($password=="") { print "Passwort leer"; exit; }
    if ($emails  =="") { print "EMails leer";   exit; }
    
    $emails   = explode(",", emails);
    foreach($emails as $email) 
    { 
       mysql_query("INSERT INTO `login` (`email`) VALUES ('".$email."') ON DUPLICATE KEY UPDATE `email`=`email`"); 
    }
    

    Das wars schon.

    VlG


Anmelden zum Antworten