Ajuda em php, xml e mysql

kabonga

Power Member
Boas,

Alguém que está disposto a ajudar-me num trabalho que use php, xml, xsd, xsl e mysql?

Se alguém estiver à vontade com estas ferramentas, e disposto a dar uma vista de olhos, agradecia.

Obrigado.
 
A primeira dúvida é como uso o php para gerar xml?

Já andei à procura e encontro muitos tutoriais... mas nenhum funciona para o meu caso! :(

O meu xml é este:

<Lancar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="lancar.xsd">
<cod_professor>
<nome></nome>
<morada></morada>
<cod_postal></cod_postal>
<localidade></localidade>
<biprofessor></biprofessor>
<contacto></contacto>
</cod_professor>
<cod_disciplina></cod_disciplina>
<cod_aluno></cod_aluno>
<nota></nota>
<data></data>
</Lancar>

Mas tem de ser gerado por um ficheiro php... e não sei como o fazer!
 
Aí já andei a ver... Mas como o prof nunca falou no parse... não usei!

Preciso mesmo que alguém me diga: usas este php...... para gerar esse xml!
 
Essa parte já consegui!

Agora precisava que depois de submeter um formulário numa base de dados surgisse um msg a dizer: "dados inseridos com sucesso" e um botão para começar o formulário outra vez.

o código que tenho é este:

Código:
<?php
	header ('Content-type: text/xml');
	echo '<?xml version="1.0" encoding="utf-8"?>';
	echo '<?xml-stylesheet type="text/xsl" href="lancar.xsl"?>';


$server = "localhost";
$server_ip = "localhost";
$user = "root";
$pass = "";
$db = "bdescola";

$cod_professor = $_POST["cod_professor"];
$cod_aluno = $_POST["cod_aluno"];
$cod_disciplina = $_POST["cod_disciplina"];
$nota = $_POST["nota"];
$data = $_POST["data"];

?>

<?php
	if ($_REQUEST['cod_professor'] and $_REQUEST['cod_disciplina'] and $_REQUEST['cod_aluno'] and $_REQUEST['nota'] and $_REQUEST['data'])
	{ 	
	
		$connection = mysql_connect($server, $user, $pass) or die ("Unable to connect!");
		mysql_select_db($db) or die ("Unable to select database!");

		$sql1  = "INSERT INTO lancarnotas (cod_professor,cod_aluno,cod_disciplina,nota,data) VALUES ('$cod_professor','$cod_aluno','$cod_disciplina','$nota','$data')";
		$resultado1 = mysql_query($sql1) or die (mysql_error());
		
		$sucesso="OK";
					
	} 
	
	
	if ($_REQUEST['cod_professor'] or $_REQUEST['cod_disciplina'] or $_REQUEST['cod_aluno'] or $_REQUEST['nota'] or $_REQUEST['data'])
	{ 	
		$sucesso="Faltam parametros";
	}
		
	
	
	echo "<Lancar>";
	echo "<cod_professor>$cod_professor</cod_professor>";
	echo "<cod_disciplina>$cod_disciplina</cod_disciplina>";
	echo "<cod_aluno>$cod_aluno</cod_aluno>";
	echo "<nota>$nota</nota>";
	echo "<data>$data</data>";
	echo "</Lancar>";
	
	

?>
 
Hmm, não te aconselho a fazeres output de XML como estás a fazer. A longo prazo, torna-se bastante difícil de manter.

Em relação à outra questão, se for possível, coloca aqui o formulário que estás a utilizar.
 
Se fosse com html... já tinha o trabalho quase feito! Mas o prof exige que seja o resultado sempre em XML!! Enfim...

O XSL associado a esse php é este:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="base.xsl"/>

<xsl:template match="Lancar">
<form action="lancar.php" method="post">
<xsl:apply-templates select="cod_professor"/>
<xsl:apply-templates select="cod_disciplina"/>
<xsl:apply-templates select="cod_aluno"/>
<xsl:apply-templates select="nota"/>
<xsl:apply-templates select="data"/><br/>
<input type="submit" name="botao" value="Enviar"/>
</form>
</xsl:template>

<xsl:template match="cod_professor">
Codigo do Professor: <input type="text" name="cod_professor" value="{text()}"/>
<br/>
</xsl:template>

<xsl:template match="cod_disciplina">
Codigo da Disciplina: <input type="text" name="cod_disciplina" value="{text()}"/>
<br/>
</xsl:template>

<xsl:template match="cod_aluno">
Codigo do Aluno: <input type="text" name="cod_aluno" value="{text()}"/>
<br/>
</xsl:template>

<xsl:template match="nota">
Nota: <input type="text" name="nota" value="{text()}"/>
<br/>
</xsl:template>

<xsl:template match="data">
Data: <input type="text" name="data" value="{text()}"/>
<br/>
</xsl:template>
</xsl:stylesheet>

Já consigo inserir os dados da base de dados, apenas quando os campos do formulário estão preenchidos, mas não consigo obter a mensagem: "dados enviados com sucesso!" ou, se faltar algum campo por preencher, visualizar a mensagem: "Campos por preencher".

Como posso obter essas mensagens?
 
Já consegui que surgissem as mensagens de erro... mas agora elas aparecem sempre! Na primeira vez que mostro o formulário... não convém que a msg "Faltam dados" surgisse! Como posso corrigir isso?
Código:
<?php
	header ('Content-type: text/xml');
	echo '<?xml version="1.0" encoding="utf-8"?>';
	echo '<?xml-stylesheet type="text/xsl" href="lancar.xsl"?>';


$server = "localhost";
$server_ip = "localhost";
$user = "root";
$pass = "";
$db = "bdescola";

$cod_professor = $_POST["cod_professor"];
$cod_aluno = $_POST["cod_aluno"];
$cod_disciplina = $_POST["cod_disciplina"];
$nota = $_POST["nota"];
$data = $_POST["data"];

?>
<Lancar>

<?php
	if($_REQUEST){
		if ($_REQUEST['cod_professor'] and $_REQUEST['cod_disciplina'] and $_REQUEST['cod_aluno'] and $_REQUEST['nota'] and $_REQUEST['data'])
		{ 	
		
			$connection = mysql_connect($server, $user, $pass) or die ("Unable to connect!");
			mysql_select_db($db) or die ("Unable to select database!");

			$sql1  = "INSERT INTO lancarnotas (cod_professor,cod_aluno,cod_disciplina,nota,data) VALUES ('$cod_professor','$cod_aluno','$cod_disciplina','$nota','$data')";
			$resultado1 = mysql_query($sql1) or die (mysql_error());
				
			
			echo '<msg>Dados enviados com Sucesso!</msg>';
			echo "<cod_professor></cod_professor>";
			echo "<cod_disciplina></cod_disciplina>";
			echo "<cod_aluno></cod_aluno>";
			echo "<nota></nota>";
			echo "<data></data>";
					
		}
		else
		{ 	
			echo '<erro>Campos por preencher!</erro>';
			echo "<cod_professor>$cod_professor</cod_professor>";
			echo "<cod_disciplina>$cod_disciplina</cod_disciplina>";
			echo "<cod_aluno>$cod_aluno</cod_aluno>";
			echo "<nota>$nota</nota>";
			echo "<data>$data</data>";
		}
		
}else{

			echo "<cod_professor></cod_professor>";
			echo "<cod_disciplina></cod_disciplina>";
			echo "<cod_aluno></cod_aluno>";
			echo "<nota></nota>";
			echo "<data></data>";

}
	
?>
</Lancar>
 
Já consegui resolver esse problema.
Mas agora apareceu outro e não sei como fazer!

Eu queria que, por exemplo, inserimos os dados todos no form e enviamos para a base de dados. Mas enganei-me na atribuição da nota: coloquei o 4 mas queria dar 3. Tornava a inserir os dados do aluno, mas colocava a nota correcta, e o php alterava a nota que já existia na base de dados.

Como posso fazer isso?
 
Back
Topo