Inputbox (sql INSERT INTO)



  • 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



  • hallo,

    das weiß ich und bin ja dabei es zu lernen bzw. möchte es unbedingt!
    Und Ihre Erklärungen sind einfach spitze!

    Naja ich versuch später! leider komm ich hier von der Firma nicht auf mein phpmyadmin!
    naja das geht auch XD

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

    Dank nochmals für die Erfolgreiche Informationen !



  • Hey hmmz,

    ich habe bemerkt, dass er das Password nicht in die Datenbank einträgt nur die email? weist du woran das liegt?

    hier dein code nochmal:

    $password = $_POST['password']; 
    $email   = $_POST['email']; 
    
    if ($password=="") { print "<br><br><br><center>Sie haben kein Password eingetragen<br><FONT SIZE=2>(Password z.b. 1111)</FONT><br><br><a href=versenden.php>Neuer Versuch</a></center>"; exit; } 
    if ($email  =="") { print "<br><br><br><center>Sie haben keine Email Addresse eingetragen!<br><br><a href=versenden.php>Neuer Versuch</a></center>";   exit; } 
    
    $email   = explode(",", $email); 
    
    foreach($email as $email) 
    { 
       mysql_query("INSERT INTO `login` (`email`) VALUES ('".$email."') ON DUPLICATE KEY UPDATE `email`=`email`"); 
       //mysql_query("INSERT INTO `login` (`password`) VALUES ('".$password."')ON DUPLICATE KEY UPDATE `password`=`password`"); 
    }
    


  • <center>, <font>, <br> 😮
    Ich hab innerlich geweint, als ich das gelesen hab.

    Aber ok, weiter im Text. Kann sich ja nicht jeder an Standards halten :p

    Wenn du schon abschreibst, dann auch richtig..

    ließ nochmal den Codeausschnitt von hmmz und dann deinen. Und achte darauf, auch alle Variablennamen so zu schreiben, wie er es gemacht hat

    Und informier dich mal drüber, was Kommentare sind und was die bewirken



  • Hi,

    ja -> das liegt daran dass du ihm nicht sagst dass er es eintragen soll!

    mysql_query("INSERT INTO `login` (`email`, `password`) VALUES ('".$email."','".$password."') ON DUPLICATE KEY UPDATE `email`=`email`");
    

    Dann muss `password` allerdings ebenfalls UNIQUE sein ... (also die Verbindung aus email und password muss unique sein)

    VlG



  • Wo Sie Recht haben, haben Sie Recht!
    Danke



  • hmm jetzt funktionier garnichts mehr -.-
    nun trägt er nur eine email ein und nicht mehr mehrere!

    Eintragen funktioniert: (email & password)

    $password = $_POST['password']; 
    $email   = $_POST['email']; 
    
    if ($password=="") { print "<br><br><br><center>Sie haben kein Password eingetragen<br><FONT SIZE=2>(Password z.b. 1111)</FONT><br><br><a href=versenden.php>Neuer Versuch</a></center>"; exit; } 
    if ($email  =="") { print "<br><br><br><center>Sie haben keine Email Addresse eingetragen!<br><br><a href=versenden.php>Neuer Versuch</a></center>";   exit; } 
    
    $email   = explode(",", $email); 
    foreach($email as $email) 
    { 
    mysql_query("INSERT INTO `login` (`email`, `password`) VALUES ('".$email."','".$password."') ON DUPLICATE KEY UPDATE `email`=`email`");
    
    }
    

    mehre Emails jedoch leider nicht mehr... sorry das ich mittlerweile nerve..
    Bitte um Verständnis da ich nicht viel wissen besitze!



  • Hallo,

    wie hast du die UNIQUE-Keys gesetzt? Ggf. musst du beide nochmal entfernen und gemeinsam setzen! MySQL vereint UNIQUE-Keys nicht miteinander, wenn es MySQL nicht expl. mitgeteilt wird.

    ALTER TABLE `login` DROP INDEX `email` 
    ALTER TABLE `login` DROP INDEX `password`
    
    ALTER TABLE `login` ADD UNIQUE (
    `email` ,
    `password` 
    );
    

    Danach wird die Eindeutigkeit auf beide Felder gleichzeitig gesetzt. Heißt: Passwort und Email-Adresse als Paar darf nicht doppelt vorkommen.

    Momentan ist es so, dass du einmal `email` und einmal `password` unique gesetzt hast. Sollte nun also ein Passwort zweimal (mit versch. Adressen) auftauchen. streikt MySQL und sagt schlicht und ergreifend: nö! Deswegen muss der Index auf beide Felder gleichzeitig gesetzt werden.

    ... kompliziertes Thema ... am Besten du besorgst dir da mal etwas Fachliteratur!

    VlG


Anmelden zum Antworten