
Frank K Hosaka
Membros-
Total de itens
1.576 -
Registro em
-
Última visita
Tudo que Frank K Hosaka postou
-
Como estudar o HTML?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em Tutoriais & Dicas - PHP
Obrigado, Wash, mas isso dai está fora do meu alcance. Eu não sei o que é por exemplo nth-child, e nem como funciona o token "e" no js, isso sem falar do operador "=>". Eu já vi vários novos operadores como "|", ou "!=", ou, no seu caso, index = ++element. Eu tentei adaptar por aqui e não deu certo. Certamente, eu fiz alguma besteira, mas eu não consigo enxergar aonde. O nome disso é analfabetismo digital. Se sobrar algum tempo, tem jeito de usar esses códigos do <style> descartável numa tabela 5x5? Eu gostei do efeito cruzeta. Mesmo que eu não saiba como ler o código, sem dúvida vou dar um jeito de aproveitar a dica no meu código. -
Isso daí é bem difícil. Eu usei um vetor, eu acho que você não vai gostar, assim decidi só resolver o problema de "salvar" a lista de presença. Se você não gostar da minha solução, pelo menos eu não terei perdido o tempo para salvar a lista no banco de dados. astudy.php ------------------------------------------------------------- <form id=frmg method=post><input type=hidden id=inpg name=status><form> <?php session_start(); if (!isset($_SESSION['lista'])){ $lista=["Fernando Teixeira"=>0,"Mariangela Silva"=>0]; $_SESSION['lista']=$lista;} else { $lista=$_SESSION['lista'];} if (isset($_POST['status'])){ $lista=$_SESSION['lista']; $nome=$_POST['status']; if ($lista[$nome]==0){$lista[$nome]=1;} else {$lista[$nome]=0;} $_SESSION['lista']=$lista;} echo "<table>"; foreach ($lista as $nome=>$presente){ if ($presente==1) {$status="checked";} if ($presente==0) {$status="";} echo "<tr><td><label><input type=checkbox value='$nome' $status oninput=inpg.value=value;frmg.submit()>$nome</label></form>";} echo "</table>"; echo "<a href='astudy2.php'>Navegue para outra página</a>"; astudy2.php -------------------------------------------------- <?php echo "São Paulo é o melhor time de toda a galáxia!"; echo "<a href='astudy.php'>Voltar para a página anterior</a>" ?> Para quem estiver acompanhando esse tópico, eu posso explicar que não usei o <form> em torno dos chekbox porque levei cinco horas, e não consegui fazer funcionar. Eu desisti, e criei um outro formulário para me socorrer.
-
Como estudar o HTML?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em Tutoriais & Dicas - PHP
Finalmente, coloquei uma rotina que pega a matriz que está no mundo do javascript e manda para o mundo do PHP, isso é uma das grandes dificuldades que encontrei. Copiei alguns CSS do tabela de frequencia original, como destacar a célula onde está o mouse, destacar a linha em que o mouse está, só não consegui ver como destacar a coluna onde está o mouse. <style> tbody tr:hover td {background-color: lightblue} th, td {border: thin solid #ccc;padding: 4px 4px;transition: all .3s ease;} td:hover, td.border {border: thin double #333 !important;z-index: 55;} td {background-color: lightgray} th {background-color: lightgreen} </style> <script> var matriz=new Array(12) for (i=0;i<=11;i++){matriz[i]=new Array(31)} function escreve(id,linha,coluna) { e=document.getElementById(id) texto=e.innerHTML if (texto==""){ e.innerHTML="P" matriz[linha-1][coluna-1]="P"} if (texto=="P"){ e.innerHTML="F" matriz[linha-1][coluna-1]="F"} if (texto=="F"){ e.innerHTML="A" matriz[linha-1][coluna-1]="A"} if (texto=="A"){ e.innerHTML="" matriz[linha-1][coluna-1]=""} P=0;F=0;A=0 for (iColuna=0;iColuna<=30;iColuna++){ texto=matriz[linha-1][iColuna] if (texto=="P") {P++} if (texto=="F") {F++} if (texto=="A") {A++}} if (P==0){P=""} if (F==0){F=""} if (A==0){A=""} nid="tp"+linha e=document.getElementById(nid) e.innerHTML=P nid="tf"+linha e=document.getElementById(nid) e.innerHTML=F nid="ta"+linha e=document.getElementById(nid) e.innerHTML=A nid="tfr"+linha e=document.getElementById(nid) if (A==""){A=0} if (P==""){P=0} frequencia=A+P if (frequencia>22) { frequencia = 100} else { frequencia = parseInt((A+P)/22*100)} e.innerHTML=frequencia } function salvar() {inpg.name='salvar';inpg.value=JSON.stringify(matriz);frmg.submit()} </script> <h2>Grupo Escolar Script Brasil</h2> <h3>Aluno: Frank K Hosaka, 2a. Série do Primário</h3> <?php if (isset($_POST['salvar'])){ $matriz=json_decode($_POST['salvar']); var_dump($matriz); exit;} echo "<table><tr><th>"; for ($k=1;$k<=31;$k++){ echo "<th>".str_pad($k, 2, 0, STR_PAD_LEFT);} echo "<th class=col>Total<br>Falta<th classs=col>Total<br>Pres.<th class=col>Total<br>Abon.<th>%<br>Freq."; $mes=["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"]; for ($j=1;$j<=12;$j++){ $l=$j-1; echo "<tr><td>$mes[$l]"; for ($i=1;$i<=31;$i++){ echo "<td id=t".$j."-".$i." onclick=escreve(id,$j,$i)>";} echo "<td id=tf".$j." align=right><td id=tp".$j." align=right><td id=ta".$j." align=right><td id=tfr".$j." align=right>";} echo "</table>"; echo "<p><input type=submit value=Salvar onclick=salvar()>"; echo "<form id=frmg method=post><input type=hidden id=inpg></form>"; -
Como estudar o HTML?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em Tutoriais & Dicas - PHP
Outra coisa bacana na tabela de frequência é que ele soma as presenças, faltas e abonos assim que você registra o status do aluno no dia que você selecionar. Para repetir a mesma proeza, eu tive que usar uma matriz. <style> td {background-color: lightgray} th.col {width:70px} </style> <script> var matriz=new Array(30) for (i=0;i<=11;i++){matriz[i]=new Array(30)} function escreve(id,linha,coluna) { e=document.getElementById(id) texto=e.innerHTML if (texto==""){ e.innerHTML="P" matriz[linha-1][coluna-1]="P"} if (texto=="P"){ e.innerHTML="F" matriz[linha-1][coluna-1]="F"} if (texto=="F"){ e.innerHTML="A" matriz[linha-1][coluna-1]="A"} if (texto=="A"){ e.innerHTML="" matriz[linha-1][coluna-1]=""} P=0;F=0;A=0 for (iColuna=0;iColuna<=30;iColuna++){ texto=matriz[linha-1][iColuna] if (texto=="P") {P++} if (texto=="F") {F++} if (texto=="A") {A++}} if (P==0){P=""} if (F==0){F=""} if (A==0){A=""} nid="tp"+linha e=document.getElementById(nid) e.innerHTML=P nid="tf"+linha e=document.getElementById(nid) e.innerHTML=F nid="ta"+linha e=document.getElementById(nid) e.innerHTML=A } </script> <?php echo "<table><tr><th>"; for ($k=1;$k<=31;$k++){ echo "<th>".str_pad($k, 2, 0, STR_PAD_LEFT);} echo "<th class=col>Total<br>Falta<th classs=col>Total<br>Presença<th class=col>Total<br>Abono<th>%<br>Frequência"; for ($j=1;$j<=12;$j++){ echo "<tr><td>$j"; for ($i=1;$i<=31;$i++){ echo "<td id=t".$j."-".$i." onclick=escreve(id,$j,$i)>";} echo "<td id=tf".$j." align=right><td id=tp".$j." align=right><td id=ta".$j." align=right><td>";} echo "</table>"; -
Como estudar o HTML?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em Tutoriais & Dicas - PHP
Com uma pequena alteração na função escreve(id), agora consigo escrever P,F,A ou nada, quando seleciono uma caixa. <style> td {background-color: lightgray} </style> <script> function escreve(id) { e=document.getElementById(id) texto=e.innerHTML if (texto==""){e.innerHTML="P"} if (texto=="P"){e.innerHTML="F"} if (texto=="F"){e.innerHTML="A"} if (texto=="A"){e.innerHTML=""}} </script> <?php echo "<table><tr><th>"; for ($k=1;$k<=31;$k++){ echo "<th>".str_pad($k, 2, 0, STR_PAD_LEFT);} for ($j=1;$j<=12;$j++){ echo "<tr><td>$j"; for ($i=1;$i<=31;$i++){ echo "<td id=t".$j."-".$i." onclick=escreve(id)>";}} echo "</table>"; -
Como estudar o HTML?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em Tutoriais & Dicas - PHP
Olá, Wash, eu consegui baixar o código. O problema é como entender. O meu nível de compreensão é de apenas 2%, eu não tenho a menor ideia de como funciona a tabela de frequência que você publicou, mas eu gostei dele, principalmente quando você clica uma data e escreve P de "Presente", clica de novo e aparece A de "Ausente", clica de novo e aparece B de "Bonado". Por enquanto, eu só consegui escrever "P" de "Presente", veja só: <style> td {background-color: lightgray} </style> <script> function escreve(id) { e=document.getElementById(id) e.innerHTML="P"} </script> <?php echo "<table><tr><th>"; for ($k=1;$k<=31;$k++){ echo "<th>".str_pad($k, 2, 0, STR_PAD_LEFT);} for ($j=1;$j<=12;$j++){ echo "<tr><td>$j"; for ($i=1;$i<=31;$i++){ echo "<td id=t".$j."-".$i." onclick=escreve(id)>";}} echo "</table>"; -
Como estudar o HTML?
pergunta respondeu ao Frank K Hosaka de Frank K Hosaka em Tutoriais & Dicas - PHP
Com 2% do que sei sobre <table>, eu consegui isso: <style> td {background-color: lightgray} </style> <?php echo "<table><tr><th>"; for ($k=1;$k<=31;$k++){ echo "<th>".str_pad($k, 2, 0, STR_PAD_LEFT);} for ($j=1;$j<=12;$j++){ echo "<tr><td>$j"; for ($i=1;$i<=31;$i++){ echo "<td>";}} echo "</table>"; -
Eu não sabia nada de HTML, mas fui aprendendo aos poucos com a ajuda do PHP. O PHP é o meu único canal entre o banco de dados MySQL e o navegador. Eu apanhei bastante para aprender como usar o marcador <table>, e eu acredito que já consigo usar 2% dos recursos embutidos nesse marcador. Graças ao Wash aqui do fórum, eu aprendi como colocar um <form> dentro de uma célula do <table>, ele me ensinou a usar o marcador <style>. Mas 2% é bem pouco para apresentar o meu currículo no concorrido mundo dos desenvolvedores, não dá para pegar um emprego de auxiliar de desenvolvedor que ganha mais ou menos R$ 1.212,00 por mês. Para pegar um emprego desses, eu preciso chegar a 3%. O correto é pedir ajuda ao MEC para buscar uma biblioteca em Diadema onde eu encontre um livro que fale sobre HTML, mas o problema é que eu não sei como usar o portal do MEC. Eu coloco "biblioteca" na caixa de busca, ele apresenta um monte de tópicos, mas nada de endereço de bibliotecas. Esse é outro drama. Se eu soubesse como usar essas caixas de busca, certamente seria fácil dominar 3% dos recursos do <table>. Assim, eu decidi entrar na próxima página do fórum do Script Brasil. E acabei encontrando o Wash de novo. Dessa vez, ele estava ajudando um rapaz a montar a frequência escolar com esse exemplo: Frequency Table (w-studies.github.io) - eu fiquei de boca aberta, isso sim é bela obra de arte. Mas, como é que vou ver o código HTML dessa página? Usei o método da tentativa e erro. No topo da janela do Microsoft Edge encontrei os três pontinhos, e lá encontrei a opção Downloads, e depois recebi a mensagem que foi feito o download, pedi para abrir a pasta onde foi feito o download, e advinha o que eu encontrei: nada! Tentei de novo, usei o botão direito do mouse no meio da página, e encontrei a opção Salvar Como, mudei a pasta para a área de trabalho, e finalmente consegui baixar a página e até uma pasta com os arquivos que davam suporte à pagina. Usei o notepad++ e vi o seguinte: frequency table.html ----------------------------------------------------------- <!DOCTYPE html> <!-- saved from url=(0044)https://w-studies.github.io/frequency-table/ --> <html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Frequency Table</title> <link rel="stylesheet" href="./Frequency Table_files/style.css"> <style id="table-column"> table thead tr th:nth-child(33), table tbody tr td:nth-child(33){ background-color: #fffce7; } </style> </head> <body> <div class="app"> <header>HEADER</header> <main> <h1 class="fw-light m-0">Frequency Table</h1> <div class="p-12 d-block"> <label>Student</label> <input type="text" name="studend"> <small class="feedback">Digite o nome do aluno</small> </div> <div class="p-12"> <a href="https://w-studies.github.io/frequency-table/">Novo</a> </div> <div class="h-sroll"> <table> <thead><tr><th>Mês/Dia</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th><th>10</th><th>11</th><th>12</th><th>13</th><th>14</th><th>15</th><th>16</th><th>17</th><th>18</th><th>19</th><th>20</th><th>21</th><th>22</th><th>23</th><th>24</th><th>25</th><th>26</th><th>27</th><th>28</th><th>29</th><th>30</th><th>31</th><th>Total Falta</th><th>Total Abon.</th><th>Total Pres.</th><th>% Freq.</th></tr></thead> <tbody><tr><td>JAN.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>FEV.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>MAR.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>ABR.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>MAI.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>JUN.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>JUL.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>AGO.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>SET.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>OUT.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>NOV.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr><tr><td>DEZ.</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>0</td><td>0</td><td>0</td><td></td></tr></tbody> </table> </div> <div class="text-center p-12"> <button class="p-12">Save</button> <div class="list p-12"></div> </div> </main> <footer> <small>© 2022 - Frequency Table - <a href="https://github.com/w-studies/frequency-table">repository</a></small> </footer> </div> <script src="./Frequency Table_files/app.js.baixados"></script> </body></html> app.js.baixados ------------------------------------------------------------------------------------------------------------ const frequencyTable = document.querySelector('table') const tableColumStyle = document.querySelector('#table-column') const inputName = document.querySelector('input') const params = new URLSearchParams(location.search) const userId = params.get('id') const eList = document.querySelector('.list') const tdOptions = [{ option: 'P', class: 'present', }, { option: 'F', class: 'ausent', }, { option: 'A', class: 'aboned', }, { option: '', class: '', }] // const calcTotalFrom = [ // presence total {child: 2, class: 'present'}, // aboned total {child: 3, class: 'aboned'}, // ausent total {child: 4, class: 'ausent'}] const thirtyOne = Array.from({length: 31}, (_, i) => i + 1) // THEAD const headTexts = ['Mês/Dia', ...thirtyOne, 'Total Falta', 'Total Abon.', 'Total Pres.', '% Freq.'] // create a tr const row = document.createElement('tr') for (const index of headTexts) { // create a th const th = document.createElement('th') th.innerText = index row.append(th) } frequencyTable.querySelector('thead').append(row) const getMothName = (date, length = 'short') => { return new Date(date).toLocaleDateString('pt-br', { month: length, }) } // TBODY const fillTbody = (data = []) => { for (let m = 0; m < 12; m++) { // create a tr const row = document.createElement('tr') const currentMonthData = data[m] ?? null for (const index in headTexts) { const cell = row.insertCell() // insert first cell with month name if (index == 0) { cell.innerHTML = getMothName(new Date().setMonth(m)).toUpperCase() } else if (currentMonthData) { const setIndex = parseInt(currentMonthData.days[index]) if (setIndex > -1) { cell.dataset.option = setIndex cell.className = tdOptions[setIndex].class cell.innerText = tdOptions[setIndex].option } } else { cell.innerHTML = '' } } // insert complete tr into tbody frequencyTable.querySelector('tbody').append(row) calcTotals([row]) } // highlight for (const col of calcTotalFrom) { for (const cell of frequencyTable.querySelectorAll(`td:nth-last-child(${col.child})`)) { const tr = cell.parentNode cell.addEventListener('mouseover', () => { for (const check of tr.getElementsByClassName(col.class)) { check.classList.add('border') } }) cell.addEventListener('mouseout', () => { for (const check of tr.getElementsByClassName(col.class)) { check.classList.remove('border') } }) } } } // highlight columns frequencyTable.addEventListener('mouseover', e => { const element = e.target if (element.matches('td, th')) { const index = ++element.cellIndex if (index > 1) { tableColumStyle.innerHTML = ` table thead tr th:nth-child(${index}), table tbody tr td:nth-child(${index}){ background-color: #fffce7; } ` } } }) // unhighlight columns frequencyTable.addEventListener('mouseout', e => { tableColumStyle.innerHTML = '' }) // when clicking on a cell frequencyTable.addEventListener('click', e => { const element = e.target if (element.matches('td')) { const elementIndex = ++element.cellIndex if (elementIndex > 1 && elementIndex < 33) { const optionIndex = element.dataset.option || 0 let setIndex = 0 if (optionIndex && optionIndex < tdOptions.length - 1) { setIndex = +optionIndex + 1 } element.dataset.option = setIndex element.className = tdOptions[setIndex].class element.innerText = tdOptions[setIndex].option calcTotals([element.parentNode]) } } }) const calcTotals = (trs) => { // calc totals trs = trs || frequencyTable.querySelectorAll('tr > td[class]:first-of-type') for (const tr of trs) { for (const object of calcTotalFrom) { tr.querySelector(`td:nth-last-child(${object.child})`).innerHTML = tr.getElementsByClassName(object.class).length } } } document.querySelector('button').addEventListener('click', async () => { const name = inputName.value if (!name) { inputName.className = 'is-invalid' return false } inputName.className = '' const frequencySchema = [] const trs = frequencyTable.querySelectorAll('tbody tr') for (const tr of trs) { const cells = tr.querySelectorAll('td:nth-child(n+2):nth-child(-n+32)') const month = {month: tr.rowIndex, days: []} for (const c of cells) { month.days[c.cellIndex] = c.dataset.option || 3 } frequencySchema.push(month) } const fData = new FormData() fData.append('name', name) fData.append('frequency', JSON.stringify(frequencySchema)) const response = await saveStudent(fData) // se response estiver ok if (response.statusCode === 200) { window.location = './' } else { eList.classList.add('text-danger') eList.innerHTML = response.body } }) /** * Funçõo para submeter requests a um servidor, esperendo json como resposta * @param url * @param data * @param method * @returns {Promise<any>} */ const fetchJson = async (url, data, method = 'POST') => { const headers = { method: method, } if (method === 'POST') { headers.body = data } // faz o request const request = await fetch(url, headers) try { // converte o resultado da request em json const body = await request.json() // retorna a resposta return {statusCode: request.status, body} } catch (e) { return {statusCode: 404, body: e} } } /** * Função pra buscar students * @param id * @returns {Promise<*>} */ const getStudents = async (id) => { const response = await fetchJson(`api/${id ? `?id=${id}` : ''}`, '', 'GET') // se response estiver ok if (response.statusCode === 200 && response.body.data) { return response.body.data } } const fillList = (data) => { for (const s of data) { const a = document.createElement('a') a.href = `?id=${s.id}` a.className = 'p-12' a.innerText = s.student eList.append(a) } } /** * Função para salvar students * @param id * @returns {Promise<void>} */ const saveStudent = async (data, id) => { id = id || userId const response = await fetchJson(`api/save/${id ? `?id=${id}` : ''}`, data) return response } // assim q o html for carregado document.addEventListener('DOMContentLoaded', async (e) => { // carrega a página inicial const students = await getStudents() if (students) { fillList(students) } if (userId && students) { inputName.parentNode.className = 'd-none' const [register] = students.filter(student => student.id == userId) if (register) { inputName.value = register.student fillTbody(JSON.parse(register.frequency)) } } else { fillTbody() } }) sytile.css ------------------------------------------------------------------------------------------- * { box-sizing: border-box; } html, body { margin: 0; padding: 0; height: 100%; } body { font-family: sans-serif; font-size: 12px; min-height: 100%; } /* estiliza o layout */ .app { min-height: 100%; display: flex; flex-direction: column; margin: 0 auto; overflow: hidden; position: relative; border: thin solid #eee } main { flex: 1; background-color: #fafafa; padding: 6px; } .app > header, .app > footer { display: flex; align-items: center; justify-content: center; } .app > header { height: 55px; border-bottom: thin solid #ccc; } .app > footer { border-top: thin solid #ccc; height: 40px; } /* table */ table { border-collapse: collapse; border-spacing: 0; width: 100%; background-color: #fff; } th, td { border: thin solid #ccc; padding: 12px 4px; min-width: 30px; transition: all .3s ease; } th { padding: 12px 6px; background-color: #f6f6f1; } th:first-child { background-color: #eee; } th:nth-last-child(4) { background-color: #ffe2eb; } th:nth-last-child(3) { background-color: #fffed7; } th:nth-last-child(2) { background-color: #ecfdec; } th:last-child { background-color: #d8ffd8; } tbody tr:nth-child(odd) td { background-color: #fafafa; } tbody tr:hover td { background-color: #fffce7; } tbody td { text-align: center; position: relative; z-index: 1; } tbody td:nth-child(n+2):nth-child(-n+32) { cursor: pointer; } tbody td:first-child { text-transform: uppercase; } td.present { background-color: #dffadf !important; } td.present.border { background-color: darkgreen !important; color: #fff; } td.ausent { background-color: #fadfdf !important; } td.ausent.border { background-color: red !important; color: #fff; } td.aboned { background-color: #fffed7 !important; } td.aboned.border { background-color: #d07600 !important; color: #fff; } td:hover, td.border { border: thin double #333 !important; z-index: 55; } /* classes de texto */ .text-danger { color: red; } .text-center { text-align: center; } .text-end { text-align: right; } .fw-light { font-weight: lighter; } /**/ .m-0 { margin: 0; } .p-12 { padding: 12px; } .d-none { display: none; } .d-block + .p-12 { display: none; } .h-sroll { overflow-x: auto; } /**/ input { padding: 6px; border: thin solid #888; display: block; border-radius: 6px; } input + .feedback { display: none; } input.is-invalid { border-color: red; } input.is-invalid + .feedback { display: block; color: red; } Agora, só falta fazer um bom curso de inglês para conseguir dominar 3% dos recursos do <table>. É mole?
-
Usar resultado de um SELECT fora do while
pergunta respondeu ao mardio de Frank K Hosaka em Repositório de Scripts - PHP
tbpedido --------------------------------------- ped int pk nn ai total float dia date codp mediumint aestudy.php ---------------------------------------- <?php $mysqli=new mysqli("localhost","root","","diario"); $query=$mysqli->query("select sum(total) as total from tbpedido where month(dia)=7"); $total=$query->fetch_assoc()['total']; echo "Valor das Compras do Mes de Julho: <br>R$ $total"; -
Function codeigniter mysql
pergunta respondeu ao imc_1978 de Frank K Hosaka em Repositório de Scripts - PHP
Não entendi bem a pergunta, mas eu fiz um código que divide a tela em duas partes, a da direita exibe a lista dos primeiros contatos, e a da esquerda exibe a lista dos primeiros produtos. Era mais ou menos isso que você pretendia? <style> .box {width: 50%;min-width: 250px;display: inline-block;vertical-align: top} .box2 {width: 50%;min-width: 250px;display: inline-block;vertical-align: top;float:right} </style> <div class=box> <?php echo "<b>lista dos 10 primeiros contatos</b><br><br>"; $mysqli=new mysqli("localhost","root","","diario"); $query=$mysqli->query("select * from tbpessoa limit 10"); while ($row=$query->fetch_assoc()){ echo $row['pessoa']."<br>";} echo "</div>"; echo "<div class=box2>"; echo "<b>lista dos 10 primeiros produtos</b><br><br>"; $query=$mysqli->query("select * from tbprod limit 10"); while ($row=$query->fetch_assoc()){ echo $row['prod']."<br>";} echo "</div>";- 1 resposta
-
- php
- codeigniter
-
(e %d mais)
Tags:
-
o que está errado? Excluir com PHP PDO
pergunta respondeu ao Edilson Santiago de Frank K Hosaka em PHP
O meu conhecimento em PHP é bem precário, eu ainda não sei trabalhar com o PDO e muito menos com a programação orientada a objetos. Mas estou grato pelo código usuario.php, com ele improvisei esses códigos: tbusuario ------------------------------ Username,varchar(45),PK,NN Password,varchar(45) Email,varchar(45) id,varchar(45) astudy.php ------------------------------ <a href="?id=5">listar usuarios</a> <?php require_once 'astudy2.php'; $u=new usuario; if (isset($_GET['id'])){ $u=new usuario; $u->listar("tbusuario"); echo "<a href='?exc=5'>excluir usuario 5</a>";} if (isset($_GET['exc'])){ $exc=$_GET['exc']; $u=new usuario; $u->excluir($exc,"tbusuario"); $u->listar("tbusuario");} ?> astudy2.php ------------------------------------------------ <?php class usuario { private $mysqli; public function conectar() { global $mysqli; $mysqli=mysqli_connect("localhost","root","","astudy");} public function excluir($id,$table){ global $mysqli; $this->conectar(); $query = $mysqli->query("delete from $table where id = $id");} public function listar($table){ global $mysqli; $this->conectar(); $query=$mysqli->query("select * from $table"); while ($row=$query->fetch_assoc()){ var_dump($row);} } } ?> -
Quero amostrar todos os dados da tabela na página
pergunta respondeu ao Romulo Cruz de Frank K Hosaka em Repositório de Scripts - PHP
No seu código faltou definir a variável $con, também faltou o marcador <table> e </table>. Utilizei o meu banco de dados para testar o seu código, ele ficou assim: <?php $conn=mysqli_connect("localhost","root","","diario"); $result = $conn->query("SELECT * FROM tbpessoa"); $numregistro= mysqli_num_rows($result); if ($numregistro>0){ echo '<table>'; while ($row = mysqli_fetch_assoc($result)){ echo '<tr><td>'.$row['codp'].'<td>'.$row['pessoa'].'<td>'.$row['cnpj'];} echo "</table>";} if ($numregistro==0) {echo "Não há nenhum registro";} ?> -
o que está errado? Excluir com PHP PDO
pergunta respondeu ao Edilson Santiago de Frank K Hosaka em PHP
Tentei fazer o teste por aqui e não obtive o erro 500. Para testar mais precisaria de todo o código do usuarios. php onde tem a classe usuario. Melhor ainda se você pudesse mandar a captura da tela onde aparece a mensagem de erro. -
calcular a taxa de juros mensal
pergunta respondeu ao Valdomiro Vanzo de Frank K Hosaka em Repositório de Scripts - PHP
O meu deu 0,0176 ou 1,76% e não 2,99% <?php // M Montante 218.29 x 5 = 1.091,45 // F Financiado 1.000,00 // n 5 meses // i taxa de juros mensal em formato decimal // Fórmula M=C(1+i)**n => 1091,45 = 1000 (1+i)**5 => (1+i)**5 = 1091,45 / 1000 // (1+i)=1,09145**(1/5) => 1+i = 1,0176 => i=0,0176 // Fórmula M=C(1+i)**n => (1+i)**n = M/C => 1+i = (M/C)**(1/n) => i = (M/C)**(1/n)-1 function taxa($financ,$prestacao,$meses) { $taxa=($prestacao*$meses/$financ)**(1/$meses)-1; return $taxa;} echo taxa(1000,218.29,5); //resultado: 0,0176 -
php Pegar um parâmetro para excluir um registro PHP mysql PDO
pergunta respondeu ao Edilson Santiago de Frank K Hosaka em Tutoriais & Dicas - PHP
Obrigado por compartilhar. Eu usei muito o elemento <a> com o $_GET, assim astudy.php: <a href="astudy2.php?id=5">Teste</a> astudy2.php: <?php $id=$_GET['id'] echo $id; // resultado 5 Para obter o mesmo resultado, temos: astudy.php: <a href="astudy2.php?5">Teste</a> astudy2.php: <?php $id=$_SERVER['QUERY_STRING']; ou seja, você omite o índice na hora de transmitir e na hora de receber. Isso é bacana, mas o problema é quando você precisa passar um monte de valores, tipo: <a href=astudy2.php?codprod=12&qt=17&codcliente=3177>Teste</a> o $_SERVER['QUERY_STRING'] pega todo mundo de uma vez, e você vai ter o trabalho de separar cada um, o que não é o caso do $codprod=$_GET['codprod']; $qt=$_GET['qt']; $codcliente=$_GET['codcliente']; -
O meu projeto tem 15 arquivos, quase tudo é código PHP, apenas um deles guarda o código Java. Transformar tudo isso em um HTML decente, isso está bem longe das minhas pretensões, o HTML é muito difícil para mim. Mesmo assim, foi no fórum Script Brasil que eu vi pela primeira vez a palavra 'placeholder' dentro de um <input>. Para ver como ele funciona, eu criei o seguinte código: astudy.php --------------- <form> <input placeholder='frank' name=inpname> <br> <input type=submit value=Confirmar> </form> Eu gostei desse recurso. Como eu não sei nada de HTML, eu criei o código para corrigir o lançamento contábil, numa coluna eu coloquei o nome do campo, na outra coluna coloquei a informação que precisa ser corrigida e finalmente o <input> que vai receber o novo valor. Graças ao placeholder, vou poder colocar a informação anterior dentro da caixa do <input> e a minha tela de atualização vai ter melhor aparência, ao invés de três colunas, ele vai trabalhar com apenas duas colunas.
-
Ajuda em php e banco de dados.
pergunta respondeu ao Victor163 de Frank K Hosaka em Tutoriais & Dicas - PHP
Para testar o seu código, precisei criar dois códigos: astudy3.php -------------------------- <form method=post action=astudy2.php> <input name=pname value='frank'> <input name=ppass value='1234'> <input name=email value='frankhosaka@gmail.com'> <input name=sex value='masculino'> <input type=submit value=Confirmar> </form> astudy2.php ---------------------------- <?php $mysqli=new mysqli("localhost","root","","astudy"); if(!empty($_POST['pname']) && !empty($_POST['ppass']) && !empty($_POST['email'])){ $query1=$mysqli->query("SELECT * FROM `usuarios` WHERE 'Username' = '".$_POST['pname']."' "); $rows = mysqli_num_rows($query1); if($rows > 0) { echo "<b><span style='color:red'>Este Username já está sendo usado!</span></b>";} else { $date = new DateTime(); $date2 = $date->getTimestamp()+2592000*1; $randomphone = rand(999,999999); $sex = $_POST['sex']; $name = $_POST['pname']; $pass = $_POST['ppass']; $email = $_POST['email']; $queryUsuario=$mysqli->query("SELECT * FROM usuarios WHERE Username = '$name'"); $rows=mysqli_num_rows($queryUsuario); if($rows == 1) { echo "Usuario já cadastrado";} else { $queryEmail = $mysqli->query("SELECT * FROM usuarios WHERE Email = '$email'"); $rows=mysqli_num_rows($queryEmail); if($rows == 1) { echo "Email já cadastrado";} else { $query = $mysqli->query("INSERT INTO usuarios (Username,Password,Email,Money,Banco,Sexo,Skin,PosX,PosY,PosZ) VALUES ('$name','$pass','$email',3000,12,'$sex',250,1714.6782,-1882.5239,13.5666)"); echo "<b><span style='color:green'>Conta criada! Click <a href='login.php'>AQUI</a> para fazer login.</span></b>";}}}} else { echo "<b><span style='color:red'>Todos os campos são necessários!</span></b>";} ?> tabela usuarios ------------------------------------------------ `usuarios`.`Username`,varchar(45) `usuarios`.`Password`,varchar(45) `usuarios`.`Email`,varchar(45) `usuarios`.`Money`,float `usuarios`.`Banco`,int `usuarios`.`Sexo`,varchar(45) `usuarios`.`Skin`,varchar(45) `usuarios`.`PosX`,float `usuarios`.`PosY`,float `usuarios`.`PosZ`,float A minha primeira dificuldade foi o uso de aspas inclinadas, eu não sei como fazer isso no meu teclado, então mudei tudo para aspas de pé, onde foi necessário. A segunda dificuldade é o motor que você usa para fazer o carro funcionar, eu só sei usar o mysqli. Tudo indica que tudo está em ordem, desde que você sincronize o código PHP com o que você vai mandar para o MySQL, se você vai mandar um número, você não precisa usar aspas, caso contrário, você precisa botar as apas onde o conteúdo seja não numérico. Já os campos da tabela não precisam de aspas. -
Eu não sei como adicionar um produto selecionado numa cesta. No meu projeto, eu fiz o contrário. Eu criei uma página chamada cesta.php, e de lá o balconista busca o produto pelo nome, coloca a quantidade, e depois a página é atualizada com o preço unitário e o subtotal do orçamento. Mesmo assim, eu estudei o seu código. Como você não colocou o código do menu.php, eu eliminei esse item. Você também não colocou a lista da conexao.php, assim improvei uma conexão assim: conexao=mysqli_connect("localhost","root","","venda"); Não sei como o seu código funcionou com o comando if ((count($result)). Eu tive que eliminar para fazer funcionar no meu teste. Tive que criar uma tabela chamada categoria com os campos idcategoria e categoria, criei um registro com a categoria "básica", mas ele não aparece na tela do navegador. Acho que algum CSS deve estar ocultando esse elemento, mas eu não manjo de CSS. Para o teste funcionar, tive que criar mais duas tabelas: produto e produto_estoque. A tabela produto, tive que fazer assim: id=1 produto=ALFEU id=2 produto=ALFEU id=3 produto=Zeus id=4 produto=Zeus A tabela produto_entrada, ficou assim: id=1 quantidadeentrada=11 mostruario=sim corP="" precovenda=3 id=2 quantidadeentrada=5 mostruario=não corP="" precovenda=100 id=3 quantidadeentrada=9 mostruario=não corP="" precovenda=100 id=4 quantidadeentrada=5 mostruario-não copP="" precovenda-600 Para não confundir o cliente, aconselho a chamar o produto com id=1 de ALFEU de plástico, o id=2 de ALFEU de ouro, id=3 Zeus de plástico e i4 Zeus de Ouro. Já a montagem da lista de produto, isso eu gostei. Não sabia que era possível abreviar o nome das tabelas, mesmo assim precisei acrescentar o idproduto de uma das tabelas que é usada mais adiante. E assim consegui chegar na sua tela de lista de produtos. Quando você aperta o "+", ele solicita a página carrinho.php só com o idproduto. Esse id pode ser capturado pelo método $_GET['idproduto'], assim <?php $mysqli=new mysqli("localhost","root","","venda"); $idproduto=$_GET['idproduto']; $query=$mysqli->query("insert into tbcesta (idproduto) values ($idproduto)); // para mostrar o conteúdo da cesta $query=$mysqli->query("select * from tbcesta"); while ($row=$query->fetch_assoc()){ echo $row['idproduto'];} Esse é um rascunho bem básico. Espero que lhe ajude.
-
Redirecionar página após executar o comando "readfile"
pergunta respondeu ao alugopejr de Frank K Hosaka em Repositório de Scripts - PHP
Acredito que não é possível fazer esse tipo de serviço no PHP. Eu pensei em fazer uma lista de 15 itens de produtos de cada vez e continuar listando com a intervenção do usuário, mas não encontrei nenhuma função que aguarde a resposta do usuário. Se você colocar coisa do tipo <input> e em seguida header('páginaprincipal.php'), o usuário nunca vai ver o <input>. Como não dá para ir para a Página Principal depois do backup, o único jeito é apresentar as duas opções na mesma página. Claro que dá para implantar outra solução, do tipo restringir o acesso à Página Principal só depois de verificar que o safado do usuário fez o backup, mas isso seria improdutivo, o safado do usuário iria ficar o dia inteiro no Facebook ou no Fórum do Script Brasil, alegando que não conseguiu entrar na Página Principal. <?php $arquivo="Dump20220714.sql" echo "Use o botão do direito do mouse e selecione a opção salvar como nesse link <a href=$arquivo>Dump do MySQL</a>"; echo "<a href='principal.php'>Ir para a Página Principal</a>; -
No meu projeto ainda não existe autenticação de usuário e senha, eu fiz um login bem safado, usando a tecnologia do $_SESSION. Ontem, no entanto, encontrei no Google, o seguinte código: astudy2.php <?php if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Texto enviado caso o usuário clique no botão Cancelar'; exit; } else { echo "<p>Olá, {$_SERVER['PHP_AUTH_USER']}.</p>"; echo "<p>Você digitou {$_SERVER['PHP_AUTH_PW']} como sua senha.</p>"; } ?> O código é pequeno e bem difícil de entender. Tentei executar novamente, mas não consegui. Para executar esse código, eu precisei fechar o navegador. Para ver se era possível executar o mesmo código sem precisar fechar o navegador, eu criei o seguinte código: astudy.php <?php header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Fale com o administrador para recuperar a sua senha'; $usuario=$_SERVER['PHP_AUTH_USER']; $senhausuario=$_SERVER['PHP_AUTH_PW']; $autorizados=["João","Maria","José"]; $senhas=["1234","4321","1111"]; if ($usuario==$autorizados[0]&&$senhausuario==$senhas[0]){header("location:joao.php");} if ($usuario==$autorizados[1]&&$senhausuario==$senhas[1]){header("location:maria.php");} if ($usuario==$autorizados[2]&&$senhausuario==$senhas[2]){header("location:jose.php");} ?> Esse código só funciona uma vez. Para trazer de volta a tela de login é necessário fechar o navegador. Esse é um recurso bacana, mas entender o código é bem complicado. Na minha opinião, o primeiro header abre a janela de autenticação, onde o usuário digita a sua conta e senha, e ele vai ficar preso nessa tela até acertar. O segundo header é um protocolo de comunicação do PHP com o navegador, sem esse protocolo, o navegador não executa o primeiro header. O primeiro echo mostra uma mensagem para o usuário que desistir de logar. As outras instruções ajudam ao autenticador a identificar qual o usuário está autorizado a entrar no sistema. Eu gostei. Mas para mudar de usuário, você vai precisar fechar o navegador. Ou encontrar alguém que conheça o PHP bem a fundo, o que não é o meu caso.
-
amigos estou com um problemina na minha aplicaçao
pergunta respondeu ao edimar_1212 de Frank K Hosaka em Repositório de Scripts - PHP
Acredito que o problema está no $_FILES, você usa o índice ['txtfoto1'], mas o que eu vi por aí é que ele usa dois índices: PHP: POST method uploads - Manual -
Função echo não está imprimindo todos os caracteres do banco.
pergunta respondeu ao Diegonp18 de Frank K Hosaka em PHP
Eu fiz o teste baseado no código fornecido, e não encontrei nenhum problema. astudy.php <?php session_start(); $_SESSION['nome']="frank k hosaka o bonitão"; $_SESSION['email']="frankhosaka@gmail.com"; $_SESSION['unidade']="loja que barato"; echo "usuário: ".$_SESSION['nome']." | email: ".$_SESSION['email']." | unidade: ".$_SESSION['unidade']; resultado: usuário: frank k hosaka o bonitão | email: frankhosaka@gmail.com | unidade: loja que barato -
Script de Autenticação
pergunta respondeu ao Thiagoml de Frank K Hosaka em Repositório de Scripts - PHP
Encontrei esse exemplo em PHP: Autenticação HTTP com PHP - Manual <?php if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Texto enviado caso o usuário clique no botão Cancelar'; exit; } else { echo "<p>Olá, {$_SERVER['PHP_AUTH_USER']}.</p>"; echo "<p>Você digitou {$_SERVER['PHP_AUTH_PW']} como sua senha.</p>"; } ?> Eu achei a sintaxe bem sofisticada, mas o código força o usuário a se logar, feito isto a variável $_SERVER['PHP_AUTH_USER] pega o nome do usuário e a variável $_SERVER['PHP_AUTH_PW'] pega a senha. Eu não entendi como funciona o header('HTTP/1.0 401 Unauthorized'), uma vez que a validação da conta e senha só acontece depois que o suposto usuário tentar se identificar. Depois de conhecido o usuário e a senha, o encaminhamento seria assim: <?php if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Texto enviado caso o usuário clique no botão Cancelar'; exit; } else { $usuario=$_SERVER['PHP_AUTH_USER']; $senhausuario=$_SERVER['PHP_AUTH_PW']; $autorizados=["João","Maria","José"]; $senhas=["1234","4321","1111"]; if ($usuario==$autorizados[0]&&$senhausuario==$senhas[0]){ header("location:joao.php");} if ($usuario==$autorizados[1]&&$senhausuario==$senhas[1]){ header("location:maria.php");} if ($usuario==$autorizados[2]&&$senhausuario==$senhas[2]){ header("location:jose.php");} echo "Sinto muito, você digitou errado o nome do usuário, a senha ou os dois"; } ?> O grande problema desse código é que só funciona só uma vez. Para tentar de novo, é necessário fechar o navegador e depois reabrir. Ainda não sei como consertar isso. -
Ajuda com checkbox no php por favor
pergunta respondeu ao Gilmar Almeida de Frank K Hosaka em Repositório de Scripts - PHP
Para limitar as escolhas, isso vai precisar de JavaScript, coisa que eu domino bem pouco. Agora para pegar as escolhas ou criar um grupo que só pode ter uma escolha, eu sugiro usar o input type=checkbox e o input type=radio, respectivamente. Para mandar tudo para a outra página, o formulário tem que ser submetido,e para isso eu acrescentei o input type=submit. A seguir a minha sugestão: <html> <head> <title>Teste</title> </head> <body> <table> <form type=put action=proximapagina.html> <tr><td><h4>Faça o seu pedido</h4> <tr><td><input type=checkbox id=inp1 name=Arroz><label for=inp1>Arroz</label> <tr><td><input type=checkbox id=inp2 name=Feijao><label for=inp2>Feijao</label> <tr><td><input type=checkbox id=inp3 name='Salada de alface'><label for=inp3>Salada de alface</label> <tr><td>========================= <tr><td><h4>Apenas uma escolha</h4> <tr><td><input type=radio id=inp4 value="com passoca" name=sobremesa><label for=inp4>com passoca</label> <tr><td><input type=radio id=inp5 value="sem passoca" name=sobremesa><label for=inp5>sem passoca</label> <tr><td><input type=submit value=Confimar> </form> </table> </body> </html> -
Ontem eu decidi reescrever um código que eu fiz para a entrada no estoque, baseado no código do produto do fornecedor. Era do tempo que ainda não conhecia o método POST. Para usar o método POST eu criei um formulário genérico no menu.php com id=frmg e um input genérico com o id=inpg. O grande problema do POST é que não dá para mandar um vetor com um monte de variáveis, assim achei melhor trabalhar com um objeto para representar um produto. O conceito de objeto é bacana, o problema é que ele desaparece assim que você usa o método POST. Para salvar o máximo de informação dentro do objeto, eu utilizei o recurso do SESSION. <?php include("menu.php"); //o menu.php abre uma nova sessão function df($data) {$fmt = date('d/m/Y',strtotime($data)); return $fmt;} function floatvalue($val){$val = str_replace(",",".",$val); $val = preg_replace('/\.(?=.*\.)/', '', $val); return floatval($val);} $mysqli=new mysqli("localhost","root","","diario"); //criar objeto cProd se ele não existir if (!class_exists('cProd')){ class cProd { public $docto; public $codp; public $pessoa; public $dia; public $id; public $codprodf; public $codprod; public $prod; public $qt; public $custoatual; public $custototal; public $custoanterior; public function getDocto(){return this->docto;} public function getCodp(){return this->codp;} public function getPessoa(){return this->pessoa;} public function getDia(){return this->dia;} public function getId(){return this->id;} public function getCodprodf(){return this->codprodf;} public function getCodprod(){return this->codprod;} public function getProd(){return this->prod;} public function getQt(){return this->qt;} public function getCustoAtual(){return this->custoatual;} public function getCustoTotal(){return this->custototal;} public function getCustoAnterior(){return this->custoanterior;} } $cProd=new cProd(); $query=$mysqli->query("select * from tbsupervariavel"); $row=$query->fetch_assoc(); $cProd->docto=$row['docto']; $cProd->codp=$row['codp']; $cProd->pessoa=$row['pessoa']; $cProd->dia=$row['dia']; } //excluir item na tbentraprod if (isset($_POST['excluir'])){ $id=$_POST['excluir']; $query=$mysqli->query("delete from tbentraprod where id=$id"); echo "<script>window.replace('astudy.php')</script>";} //incluir novo item na tbentraprod, depois de selecionado o produto if (isset($_POST['incluir'])){ $codprod=$_POST['incluir']; $cProd=unserialize($_SESSION['cProd']); $cProd->codprod=$codprod; $query=$mysqli->query("select * from tbprod where codprod = $codprod"); $row=$query->fetch_assoc(); $cProd->prod=$row['prod']; $cProd->custoanterior=$row['custo']; $cProd->custoatual=round($cProd->custototal/$cProd->qt,2); $sql="insert into tbentraprod (codprodf,codprod,prod,dia,docto,qt,codp,custototal,custoanterior,custoatual) values ('$cProd->codprodf',$cProd->codprod,'$cProd->prod','$cProd->dia',$cProd->docto,$cProd->qt,$cProd->codp, $cProd->custototal, $cProd->custoanterior, $cProd->custoatual)"; $query=$mysqli->query($sql); echo "<script>location.replace('astudy.php')</script>";} //incluir novo item na tbentraprod if (isset($_POST['codprodf'])){ $cProd->codprodf=$_POST['codprodf']; $cProd->qt=floatvalue($_POST['qt']); $cProd->custototal=floatvalue($_POST['custototal']); $query=$mysqli->query("select * from tbprod where codforn like '%$cProd->codprodf%' order by prod"); $num_rows=mysqli_num_rows($query); if ($num_rows==1){ $row=$query->fetch_assoc(); $cProd->codprod=$row['codprod']; $cProd->prod=$row['prod']; $cProd->custoatual=round($cProd->custototal/$cProd->qt,2); $cProd->custoanterior=$row['custo']; $sql="insert into tbentraprod (codprodf,codprod,prod,dia,docto,qt,codp,custototal,custoanterior,custoatual) values ('$cProd->codprodf',$cProd->codprod,'$cProd->prod','$cProd->dia',$cProd->docto,$cProd->qt,$cProd->codp, $cProd->custototal, $cProd->custoanterior, $cProd->custoatual)"; $query=$mysqli->query($sql); echo "<script>window.replace('astudy.php')</script>";} if ($num_rows==0){ echo "<font color=red>Não há nenhum produto com o codprodf $cProd->codprodf."; echo "<input type=submit value=Continuar onclick=location.replace('astudy.php')>"; exit;} if ($num_rows>1){ $_SESSION['cProd']=serialize($cProd); echo "Há muitos produtos com codprodf $cProd->codprodf, escolha um<br><br>"; echo "<table>"; while ($row=$query->fetch_assoc()){ $codprod=$row['codprod']; $prod=$row['prod']; $lcodprod="<a onclick=inpg.value=$codprod;inpg.name='incluir';frmg.submit()>$codprod</a>"; echo "<tr><td>$lcodprod<td>$prod";} echo "</table>";exit;}} //exibe a tbentraprod $query=$mysqli->query("select * from tbentraprod"); echo "<br>Documento $cProd->docto de <a onclick=location.replace('diario.php')>".df($cProd->dia)."</a><br> Fornecedor <a onclick=location.replace('pessoa.php')>$cProd->pessoa</a> <table> <tr><th>CodProdF<th>Produto<th>Qt<th>Total<th>Unitario<th>Anterior"; while ($linha = $query->fetch_assoc()) { $id=$linha['id']; $codprodf = $linha['codprodf']; $java='inpg.value='.$id.';inpg.name="excluir";frmg.submit()'; $codprodf="<a onclick='$java'>$codprodf</a>"; $prod=$linha['prod']; $qt=dec($linha['qt']); $custototal = dec($linha['custototal']); $custoatual = $linha['custoatual']; $custoanterior = $linha['custoanterior']; if ($custoatual>$custoanterior) {$custoatual="<font color=red>".dec($linha['custoatual']);} if ($custoanterior>$custoatual) {$custoanterior="<font color=red>".dec($linha['custoanterior']);} if ($custoatual == $custoanterior) {$custoatual = dec($custoatual); $custoanterior = dec($custoanterior);} $custoatual=dec($custoatual); $lcodprodf="<a onclick=inpg.value=$id;inpg.name='excluir';frmg.submit()>$codprodf</a>"; echo "<tr><td>$lcodprodf<td align='left'>$prod<td align=right>$qt<td align=right>$custototal <td align=right>$custoatual<td align=right>$custoanterior";} //pega um novo item $query = $mysqli->query("select sum(custototal) as soma from tbentraprod"); $row = $query->fetch_assoc(); $soma = dec(floatval($row['soma'])); echo "<form id=frmincluir method=post> <tr><td><input id=codprodf name=codprodf size=5 autocomplete=off onchange=qt.focus() placeholder=codprodf> <td></td><td><input name=qt id=qt size=2 autocomplete=off onchange=custototal.focus() placeholder=qt> <td><input name=custototal id=custototal size=5 autocomplete=off onchange=frmincluir.submit() placeholder=custo></form> <script>codprodf.focus()</script> <tr><td><td><td><b>Total</b><td align=right><b>".$soma."</b><td> <form method=post><input name='encerrar' type='submit' value='encerrar'></form></table>";