eiriktb Skrevet 21. oktober 2015 Del Skrevet 21. oktober 2015 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 } ?> 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
Crowly Skrevet 21. oktober 2015 Del Skrevet 21. oktober 2015 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
eiriktb Skrevet 22. oktober 2015 Forfatter Del Skrevet 22. oktober 2015 (endret) 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 22. oktober 2015 av eiriktb Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå