eiriktb Skrevet 21. oktober 2015 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.
Crowly Skrevet 21. oktober 2015 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'];
eiriktb Skrevet 22. oktober 2015 Forfatter 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
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å