Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

[Løst] PHPmailer, mysql, litt ajax.


Anbefalte innlegg

Hei, har tatt meg bittelitt vann over hodet når det gjelder en ganske grei webapp for jobb. 

 

Har laget et mottaksregister i php, mysql og litt ajax. (Veldig mye klipp og lim fra nettet).

Hovedmålet med systemet er man kan gå med mobil og registrere at bestillingsvarer er ankommet vårt mottak.

 

Etter å ha bruk for mye tid på prøving og feiling, spør jeg nå om hjelp.

 

Det som skjer i koden under, er at jeg bruker id(idd column i mysql) for å hente ut det unike mottaket.

Mottaker får da mulighet å legge på en kommentar før man trykker "Godkjenn" og da settes verdi i mysql til 1=TRUE. 

<?php
include "config.php";
if(isset($_GET['id'])){
$stmt = $conn->prepare("update po set Kommentar=?, Godkjent = 1, Dato = NOW() WHERE idd=?");
$stmt->bind_param('si', $nm, $id);

$nm = $_POST['nm'];
$id = $_GET['id'];

if($stmt->execute()){
?>
<div class="alert alert-success alert-dismissible" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
  <strong>PO er godkjent og sendt på epost til bestiller.</strong>
</div>
<?php
} else{
?>
<div class="alert alert-danger alert-dismissible" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
  <strong>Error!</strong> 
</div>
<?php
}
} else{
?> 
<div class="alert alert-warning alert-dismissible" role="alert">
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
  <strong>Warning!</strong>
</div>
<?php
}
?>

CuXMVq4.jpg

 

Screenshot av hvordan det ser ut "live". 

 

Det jeg ønsker er at denne informasjonen også sendes på mail til "Bestiller" når man trykker knappen. Hver bestiller har en epost-kolonne i mysql som kan brukes. 

 

Har laget en phpmailer for å teste om epost fungerer, og det gjør det. 

<?php
date_default_timezone_set('Etc/UTC');
require '../phpmailer/PHPMailerAutoload.php';
include "config.php";

$res = $conn->query("SELECT * FROM po WHERE Godkjent IS NULL ORDER BY idd DESC LIMIT 1");
while ($row = $res->fetch_assoc()) {

$ordre = $row['Ordrenummer'];
$lev = $row['Leverandor'];
$deler = $row['Deler'];
$bestiller = $row['Bestiller'];
$kommentar = $row['Kommentar'];
$epost = $row['epost'];
    
$mail = new PHPMailer;

$mail->CharSet = 'UTF-8';
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;

$mail->Username = "[email protected]";
$mail->Password = "passord";

$mail->setFrom('[email protected]', 'Mottakskontroll');
$mail->addReplyTo('[email protected]', 'Test');
$mail->addAddress('[email protected]', 'Eirik');
$mail->Subject = "$ordre er ankommet";
$mail->isHTML(true);                                 
$mail->Body    = 'Test på at systemet fungerer' .$ordre;
$mail->AltBody = 'Slå på HTML-koding av e-post takk.';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}
}
?>

Så hvordan kombinerer jeg dette? Som dere ser har jeg juksa ved å sette LIMIT 1.

Blir det to mysql-spørringer? En for å finne id, sette kommentar og godkjent=1, samt en for å hente ut informasjonen igjen for så å sende den på epost? 

 

Håper noen har tid til å hjelpe. Og trengs det mer utfyllende informasjon er det bare å spørre.

På forhånd takk.

 

 

Lenke til kommentar
Videoannonse
Annonse

Du må ha 2-3 sql'er, en update og en eller to select.

Noe slikt, har ikke testet: 

if($stmt->execute()) // utfør UPDATE
{
    $sendMail = $stmt->affected_rows > 0;
    $stmt->close();

    if ($sendMail)
    {
        $sql = "SELECT * FROM po WHERE idd = ?"; // utvid med en (INNER) JOIN (om mulig) for å få brukers epost adresse ++, hvis ikke må du ha en ny select for å hente dette
        $mailStmt = $conn->prepare($sql);
        $mailStmt->bind_param('i', $id);
        $mailStmt->execute();

        $mailRes  = $mailStmt->get_result(); // du oppdaterer kun en rad, og henter derfor kun ut en rad, ikke nødvendig å legge ting i en while løkke
        $mailData = $mailRes->fetch_assoc();

        $mailRes->close();
        $mailStmt->close();

        // utfør SELECT for å hente brukers epost og slikt her om nødvendig

        // phpmailer her
    }

}
Det du har gjort ser ganske greit ut. Selv om du bruker prepared statments ville jeg ha hatt litt validering og sanitering av bruker input:

$nm = $_POST['nm'];
$id = $_GET['id'];

// eks.
$nm = filter_input(INPUT_POST, 'nm', FILTER_SANITIZE_STRING);
$id = (int)$_GET['id'];
Lenke til kommentar

Du må ha 2-3 sql'er, en update og en eller to select.

Noe slikt, har ikke testet: 

if($stmt->execute()) // utfør UPDATE
{
    $sendMail = $stmt->affected_rows > 0;
    $stmt->close();

    if ($sendMail)
    {
        $sql = "SELECT * FROM po WHERE idd = ?"; // utvid med en (INNER) JOIN (om mulig) for å få brukers epost adresse ++, hvis ikke må du ha en ny select for å hente dette
        $mailStmt = $conn->prepare($sql);
        $mailStmt->bind_param('i', $id);
        $mailStmt->execute();

        $mailRes  = $mailStmt->get_result(); // du oppdaterer kun en rad, og henter derfor kun ut en rad, ikke nødvendig å legge ting i en while løkke
        $mailData = $mailRes->fetch_assoc();

        $mailRes->close();
        $mailStmt->close();

        // utfør SELECT for å hente brukers epost og slikt her om nødvendig

        // phpmailer her
    }

}
Det du har gjort ser ganske greit ut. Selv om du bruker prepared statments ville jeg ha hatt litt validering og sanitering av bruker input:

$nm = $_POST['nm'];
$id = $_GET['id'];

// eks.
$nm = filter_input(INPUT_POST, 'nm', FILTER_SANITIZE_STRING);
$id = (int)$_GET['id'];

 

Takk for svar. Skal prøve å få det på plass i løpet av dagen. 

Endret av eiriktb
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...