Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lady Z.ero

[Resolvido] php + mysql

Recommended Posts

usando duas tabelas parece complicado mais não é!

 

na hora do select basta fazer um relacionamento da seguinte forma com as tabelas

 

vamos dar nome de tabela1 e tabela2

 

no sql

 

SELECT * FROM tabela1 AS t1 INNER JOIN tabela2 AS t2 ON t1.codigo=t2.codigo

Pronto seria o mesmo que usar somente uma

SELECT * FROM tabela

 

A estrutura ficaria com a seguinte lógica

 

CREATE  TABLE IF NOT EXISTS `tabela1` (
  `codigo` INT NOT NULL AUTO_INCREMENT ,
  `nome_curso` VARCHAR(45) NULL ,
  `situacao` VARCHAR(45) NULL ,
  `carga_hr` VARCHAR(45) NULL ,
  PRIMARY KEY (`codigo`) )
ENGINE = InnoDB

CREATE  TABLE IF NOT EXISTS `tabela2` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `codigo` INT NOT NULL ,
  `instituicao` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB

 

 

 

Duvidas poste que nos ajudamos

 

t++++++++++++=

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao inves de ta inserindo o nº correto de linhas de acordo com o nº de add campo que eu optei , ta inserindo varias linhas com os valores todos misturados!!!

 

Segue o codigo do Salvar.php


<?php
@ini_set('display_errors', '1');
error_reporting(E_ALL);


$con = mysql_connect("localhost", "usuario", "senha");
     mysql_select_db("bd");

mysql_query("INSERT INTO dados_teste (nome_completo)
			VALUES ('$nome_completo')");


	foreach($_POST["nome_curso"] as $n)
	foreach($_POST["instituicao"] as $p){
    //Faz o tratamento de acordo com o teu banco daí. tipo...


mysql_query("INSERT INTO dados_teste_instituicoes (nome_completo, nome_curso, instituicao)
			VALUES ('$nome_completo', '$n', '$p')");
  }


echo "Salvo com sucesso";
?>

Na onde eu to errando!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
	@ini_set('display_errors', '1');
	error_reporting(E_ALL);

	mysql_connect("localhost", "root", "senha");
	mysql_select_db("bd");

	$nome_curso     = $_POST["nome_curso"];
	$instituicao    = $_POST["instituicao"];
	$situacao       = $_POST["situacao"];
	$carga_hr       = $_POST["carga_hr"];

	if(!is_array($nome_curso))
	{
		$sql = "INSERT INTO dados_teste ( codigo , nome_curso , instituicao, situacao, carga_hr) 
				VALUES ( NULL , '$nome_curso', '$instituicao', '$situacao', '$carga_hr')";
		$exe = mysql_query($sql);
	}
	else
	{
	   foreach($nome_curso as $cursos)
	   {
		  foreach($instituicao as $ins)
		  {
			 $sql = "INSERT INTO dados_teste ( codigo , nome_curso , instituicao, situacao, carga_hr) 
			 VALUES ( NULL , '$cursos', '$ins', '$situacao', '$carga_hr')";
		  }
		  $exe = mysql_query($sql);
	   }
	}

    echo "Salvo com sucesso";
?>

Os is_array() é um comando que verifica se é um Array de Dados ou Não a variável.

Porque se a pessoa tiver somente UM curso, não é Array. Se tiver mais que UM, ou seja, [], é Array.

 

Tenta ae!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É por que você tem que fazer um Foreach para Todos.

 

foreach($nome_curso as $cursos)
{
   foreach($instituicao as $ins)
   {
      foreach($situacao as $sit)
      {
          foreach($carga_hr as $ch)
          {
             $sql = "INSERT INTO dados_teste ( codigo , nome_curso , instituicao, situacao, carga_hr) 
             VALUES ( NULL , '$cursos', '$ins', '$sit', '$ch')";
             $exe = mysql_query($sql);
          }
      }
   }
}

Agora se mesmo assim estiver inserindo uma linha só, tem que debugar o que está acontecendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Intaum... "Dee" O comando que você me passou ta inserindo apenas o primeiro adicionar...

os campos iniciais: curso, instituição, situação e carga horaria estão sendo inseridos em uma linha e cada um em seu determinado campo(até aqui tudo bem...) mas quando eu clico em ADICIONAR CAMPO o campo adicionado não é enviado para o banco de dados, é mais ou menos como se ele não estivesse dentro da minha pagína?!

Agora deixa eu dizer o que acho que é... Aquele comando if é para o caso de que se o campo não for uma array desta forma ele segue aquela rotina, então ele não está aceitando a array e esta inserindo normalmente os campos iniciais?!!! Se for este o caso o que tenho que fazer para ele adicionar os outros campos?!!! Senão for este o caso, que ta acontendo intaum?!!!

 

Desde já agradeço pela ajuda de todos!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na sua página antes de clicar no botao de adicionar um campo, veja o código fonte e veja como está os NAME dos campos!

Depois clique no botão Adicionar Campo e veja novamente como está o NAME dos campos!.

 

Poste aqui o fonte dos dois modos.

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

não use foreach qndo tiver vários campos que precisam andar juntos !!

 

solução correta com for()

<?php
if( $_SERVER['REQUEST_METHOD']=='POST' )
{
	$id_aluno = 15;
	for( $i=0; $i<count($_POST['nome_curso']); $i++ )
	{
		$sql = "INSERT INTO cursos_aluno ( id_aluno, nome_curso, instituicao, situacao ) 
			VALUES ({$id_aluno}, '{$_POST['nome_curso'][$i]}', '{$_POST['instituicao'][$i]}', '{$_POST['situacao'][$i]}')";
			
		echo $sql.'<br />';
	}
		
		
}
?>
<html>
<head>
<style type="text/css">
label { display: block; }
</style>
</head>
<body>
	<form action="" method="post">
		<fieldset>
			<label><input type="text" name="nome_curso[]" value="Licenciatura em Matematica" /></label>
			<label><input type="text" name="instituicao[]" value="IME" /></label>
			<label><input type="text" name="situacao[]" value="Concluido" /></label>
		</fieldset>
		<fieldset>
			<label><input type="text" name="nome_curso[]" value="Doutorado em Agronomia" /></label>
			<label><input type="text" name="instituicao[]" value="USP" /></label>
			<label><input type="text" name="situacao[]" value="Cursando" /></label>
		</fieldset>
		
		<input type="submit" name="enviar" value="Enviar" />
	</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
if( $_SERVER['REQUEST_METHOD']=='POST' )
{
	$id_aluno = 15;
	for( $i=0; $i<count($_POST['nome_curso']); $i++ )
	{
		$sql = "INSERT INTO cursos_aluno ( id_aluno, nome_curso, instituicao, situacao ) 
			VALUES ({$id_aluno}, '{$_POST['nome_curso'][$i]}', '{$_POST['instituicao'][$i]}', '{$_POST['situacao'][$i]}')";
			
		echo $sql.'<br />';
	}
		
		
}
?>
entõa W.B, eu queria saber se assim como o exemplo que o Dee me passou, eu tabem vou precisar fazer este processo do FOR para todos os campos, digo para instituicao, situacao....

Foi mals aí, pela minha ignorancia!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa, pq o Count ele conta a quantidade de registros no array. E a variável $i do lados das variáveis $_POST faz o processo para todos os campos, é um indice.

 

você testou ? deu certo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puxa vida!!! Ta dando errado ainda, ele ta inserindo apenas quando eu não adiciono nada, e quando eu adiciono ele não altera em nada no banco de dados, quer dizer ele não envia nada ao banco de dados?!!! , corrigindo... tentei novamente sem adicionar nenhum campo , mas agora ele tbm não enviou nada para o banco de dados akiee?!!

e agora, qual dos codigos eu deveria usar?

Hey Dee apouco você me pediu para olhar no codigo fonte da minha pagina quando adiciono outro campo, mas o nome não altera em nada e sim o id, ex.:

antes de adicionar = id="nome_curso", depois de adicionado id="nome_curso14", mas so que o id é sempre aleatório, nunca sendo o mesmo numero como 14, pode ser qualquer um... 9, 2, 20 ... e agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eitah... estranho!!

É o seu script que quando adiciona o campo faz isso ? >> id="nome_curso14"

 

Na minha opiniao o certo seria o que está no script do William... name="nome_curso[]"

Com colchetes... para implicar em array()...

Por isso que está adicionando um Só! Pq a variável muda de nome... e no PHP você nao está pegando ela pelo nome nome do primeiro campo no FORM que é "nome_curso". Quando passa a ser "nome_curso2", "nome_curso14"... já nao funciona mais.

 

Então use os colchetes!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eitah... estranho!!

É o seu script que quando adiciona o campo faz isso ? >> id="nome_curso14"

 

Na minha opiniao o certo seria o que está no script do William... name="nome_curso[]"

Com colchetes... para implicar em array()...

Por isso que está adicionando um Só! Pq a variável muda de nome... e no PHP você nao está pegando ela pelo nome nome do primeiro campo no FORM que é "nome_curso". Quando passa a ser "nome_curso2", "nome_curso14"... já nao funciona mais.

 

Então use os colchetes!

 

Agora estamos nos entendendo, mas tem outro problema Dee, eu ja to usando "[]" nos names... quer que eu te envie com ficou meu codigo agora ou ta dando pra entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou entendendo mais ou menos.

Manda os códigos então.

E se você tiver o script que cria a tabela, manda tbm.. .dae eu simulo aqui. =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

tst.htm

<html>
<head>
<title>Untitled Document</title>
<script type="text/javascript" src="jquery-dynamic-form.js"></script>
<script type="text/javascript">

	$(document).ready(function(){	

		$("#informatica").dynamicForm("#informatica_mais", "#informatica_menos", {limit:5, createColor: 'yellow',removeColor: 'red'});


	});

</script>



</head>

<body>

<span class="style1">
</script>





<form id="form1" name="dados_pessoais" method="post" action="salvar.php" onSubmit="return validaForm()">

</span>
<table width="530" height="358" border="0" cellpadding="2" >
  <tr>
    <td height="35" class="texto-info style1"> </td>
  </tr>
  <tr>
    <td height="35" class="texto-info style1">
      <div id="informatica">
        <table width="575" border="0">
          <tr>
            <td width="33%" height="25" valign="bottom" align="right">  <span style="">Curso</span></td>
            <td width="65%" valign="bottom">            <input name="nome_curso[]" type="text" class="campo_formularios campo_formularios_min" id="nome_curso" size="36" style="background-color: #F0F0F0"

                             /></td>
          </tr>
          <tr>
            <td align="right">  <span style=""> Instituição</span></td>
            <td>
              <input name="instituicao[]" type="text" class="campo_formularios campo_formularios_min" id="infor_curso_instituicao" size="36" style="background-color: #F0F0F0"

                             /></td>
          </tr>
          <tr>
            <td width="33%" height="25" valign="bottom" align="right"> <font style=""> Situação</font></td>
            <td width="65%" valign="bottom">
			<select name="situacao[]" id="situacao" class="campo_formularios campo_formularios_min" size="1" style="background-color: #F0F0F0">
              <option value="" >Selecione</option>
              <option value="completo">Completo</option>
              <option value="incompleto">Incompleto</option>
              <option value="Cursando">Cursando</option>
              <option value="Interrompido">Interrompido</option>
            </select></td>
          </tr>
          <tr>
            <td height="25" valign="bottom" align="right">  <span style="">Carga horária</span></td>
            <td>              <input name="carga_hr[]" type="text" id="carga_hr" tabindex="1" onKeyPress="return mascara(event,this,'##/####');" size="10" maxlength="10" style="background-color: #F0F0F0">            </td>
          </tr>
          <tr>
            <td> </td>
            <td> </td>
          </tr>
        </table>
      </div>
      <input name="button" type="button" id="informatica_menos" style="background-color: #060; font-weight:bold; color:#fff; border:2px solid #030; padding:3px;" value="Remover campo" />
      <input name="button" type="button" id="informatica_mais" style="background-color: #060; font-weight:bold; color:#fff; border:2px solid #0300; padding:3px;" value="Adicionar campo" />
    </td>
  </tr>
						<td class="style1"></tr>
						<tr>
							<td height="15" colspan="2" align="center" class="style1">
							<p></p>
							<p></p>
							<p></p>
							<p></p>
							<p></p>
							<p align="center"> 
							<input type="submit" value="Enviar" name="Submit" style="color: #99CCFF; border: 3px ridge #99CCFF; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; text-transform:uppercase; font-weight:bold; letter-spacing:1pt">
							</td>
						</tr>

</table>
</body>
</html>

agora o salvar.php

<?php
        @ini_set('display_errors', '1');
        error_reporting(E_ALL);

        mysql_connect("localhost", "user", "senha");
        mysql_select_db("bd");


if( $_SERVER['REQUEST_METHOD']=='POST' )
{
        $id_aluno = 15;
        for( $i=0; $i<count($_POST['nome_curso']); $i++ )
        {
                $sql = "INSERT INTO dados_teste ( id_aluno, nome_curso, instituicao, situacao , carga_hr ) 
                        VALUES ({$id_aluno}, '{$_POST['nome_curso'][$i]}', '{$_POST['instituicao'][$i]}', '{$_POST['situacao'][$i]}', '{$_POST['carga_hr'][$i]}')"
						or die("Falha ao conectar");
                        
                echo $sql.'<br />';
        }
                
                
}
?>

documento que cria a tabela

CREATE TABLE dados_teste (
	id_aluno SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
	nome_curso varchar(20) NOT NULL ,
	instituicao varchar(20) NOT NULL ,
	situacao varchar(20) NOT NULL ,
	carga_hr varchar(20) NOT NULL
) ENGINE = MYISAM ;

Ve se funciona ai!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está com erro de script primeiramente...

Eu preciso do Script seu... jquery-dynamic-form.js

Compartilhar este post


Link para o post
Compartilhar em outros sites

crie uma pasta com o nome de arquivo_js e joga esse arquivo lá dentro...

 

jquery-dynamic-form.js

 

/**
 * @author Stéphane Roucheray
 * @extends jQuery
 */

jQuery.fn.dynamicForm = function (plusElmnt, minusElmnt, options){
	var source = jQuery(this),
	minus = jQuery(minusElmnt),
	plus = jQuery(plusElmnt),
	template = source.clone(true),
	fieldId = 0,
	formFields = "input, checkbox, select, textarea",
	insertBefore = source.next(),
	clones = [],
	defaults = {
		duration:1000
  	};
	
  	// Extend default options with those provided
  	options = $.extend(defaults, options);
	
	isPlusDescendentOfTemplate = source.find("*").filter(function(){
		return this == plus.get(0);
	});
	
	isPlusDescendentOfTemplate = isPlusDescendentOfTemplate.length > 0 ? true : false;
	
	function normalizeElmnt(elmnt){
        elmnt.find(formFields).each(function(){
            var nameAttr = jQuery(this).attr("name"), 
			idAttr = jQuery(this).attr("id");

            /* Normalize field name attributes */
            if (!nameAttr) {
				jQuery(this).attr("name", "field" + fieldId + "[]");
			}
			
			if (!/\[\]$/.exec(nameAttr)) {
				jQuery(this).attr("name", nameAttr + "[]");
			}
			
            /* Normalize field id attributes */
            if (idAttr) {
				/* Normalize attached label */
				jQuery("label[for='"+idAttr+"']").each(function(){
					jQuery(this).attr("for", idAttr + fieldId);
				});
				
                jQuery(this).attr("id", idAttr + fieldId);
            }
            fieldId++;
        });
    };
	
	/* Hide minus element */
	minus.hide();
	
	/* If plus element is within the template */
	if (isPlusDescendentOfTemplate) {
		function clickOnPlus(event){
			var clone,
			currentClone = clones[clones.length -1] || source;
			event.preventDefault();
			
			/* On first add, normalize source */
			if (clones.length == 0) {
				normalizeElmnt(source);
				currentClone.find(minusElmnt).hide();
				currentClone.find(plusElmnt).hide();
			}else{
				currentClone.find(plusElmnt).hide();
			}
			
			/* Clone template and normalize it */
			clone = template.clone(true).insertAfter(clones[clones.length - 1] || source);
			normalizeElmnt(clone);
			
			/* Normalize template id attribute */
			if (clone.attr("id")) {
				clone.attr("id", clone.attr("id") + clones.length);
			}
			
			
			plus = clone.find(plusElmnt);
			minus = clone.find(minusElmnt);
			
			minus.get(0).removableClone = clone;
			minus.click(clickOnMinus);
			plus.click(clickOnPlus);
			
			if (options.limit && (options.limit - 2) > clones.length) {
				plus.show();
			}else{
				plus.hide();
			}
			
			clones.push(clone);
		}
		
		function clickOnMinus(event){
			event.preventDefault();
			
			if (this.removableClone.effect && options.removeColor) {
				that = this;
				this.removableClone.effect("highlight", {
					color: options.removeColor
				}, options.duration, function(){that.removableClone.remove();});
			} else {
			
				this.removableClone.remove();
			}
			clones.splice(clones.indexOf(this.removableClone),1);
			if (clones.length == 0){
				source.find(plusElmnt).show();
			}else{
				clones[clones.length -1].find(plusElmnt).show();
			}
		}
		
		/* Handle click on plus */
		plus.click(clickOnPlus);
		
		/* Handle click on minus */
		minus.click(function(event){
			
		});
		
	}else{
	/* If plus element is out of the template */
		/* Handle click on plus */
		plus.click(function(event){
			var clone;
			
			event.preventDefault();
			
			/* On first add, normalize source */
			if (clones.length == 0) {
				normalizeElmnt(source);
				jQuery(minusElmnt).show();
			}
			
			/* Clone template and normalize it */
			clone = template.clone(true).insertAfter(clones[clones.length - 1] || source);
			if (clone.effect && options.createColor) {
				clone.effect("highlight", {color:options.createColor}, options.duration);
			}
			normalizeElmnt(clone);
			
			/* Normalize template id attribute */
			if (clone.attr("id")) {
				clone.attr("id", clone.attr("id") + clones.length);
			}
			if (options.limit && (options.limit - 3) < clones.length) {
				plus.hide();
			}
			clones.push(clone);
		});
		
		/* Handle click on minus */
		minus.click(function(event){
			event.preventDefault();
			var clone = clones.pop();
			if (clones.length >= 0) {
				if (clone.effect && options.removeColor) {
					that = this;
					clone.effect("highlight", {
						color: options.removeColor, mode:"hide"
					}, options.duration, function(){clone.remove();});
				} else {
					clone.remove();
				}
			}
			if (clones.length == 0) {
				jQuery(minusElmnt).hide();
			}
			plus.show();
		});
	}
	
};
ve se funciona agora!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É vdd. só insere o primeiro. testando...

 

Ehh... i ID_aluno é auto increment

nao vai add dois alunos com o mesmo ID...

por isso que nao entra o segundo...

 

boa!!!

 

EDIT:

 

Faça o seguinte:

<?php
        mysql_connect("localhost", "user", "senha");
        mysql_select_db("bd");


if( $_SERVER['REQUEST_METHOD']=='POST' )
{
        for( $i=0; $i<count($_POST['nome_curso']); $i++ )
        {
                $sql = "INSERT INTO dados_teste (nome_curso, instituicao, situacao , carga_hr ) 
                        VALUES ('{$_POST['nome_curso'][$i]}', '{$_POST['instituicao'][$i]}', '{$_POST['situacao'][$i]}', '{$_POST['carga_hr'][$i]}')"
                                                or die("Falha ao conectar");
                        
                exe = mysql_query($exe);
        }
                
                
}
?>

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então existe um erro de modelagem SQL aqui.

 

 

deveria ser:

TABLE aluno,

id_aluno pk, autoincrement

nome_aluno varchar

 

 

TABLE cursos_aluno

id_aluno fk int

nome_curso

instituicao...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.