Comecei a estudar PHP há mais ou menos uma semana, e venho tendo certo sucesso em meu projeto de aprendizado (um CMS).
Porém, existe uma coisa que está me travando.
Eu desenvolvi um sistema de gerenciamento dos links dos menus por MySQL bem simples. A página puxa os registros da tabela, ordena pelo valor de posição (QUE NÃO É O ID!) e joga no HTML.
O meu problema é que se eu decido adicionar um link no lugar de um, ambos ficam com o mesmo valor de posição.
O que eu precisava é que ele adicionasse +1 no valor de posição do link antigo e também nos registros subsequentes.
Explicando melhor,
eu tenho:
1- principal
2- conteudo
3- portfolio
4- contato
Eu decido adicionar o link FORUM, no segundo lugar do menu - então eu jogo o valor 2.
Ficaria assim:
1- principal
2- conteudo
2- forum
3- portfolio
4- contato
Conquanto, eu quero obter este resultado:
1- principal
2- forum
3- conteudo
4- portfolio
5- contato
Eu pensei no seguinte algoritmo:
- O que eu quero fazer? Organização de posições -Fluxograma - Definir variável com array total das posições do mysql - SE existir um registro na var definida que seja igual ao da atualizada, ir para procedimento (organizacao) - Caso contrário, adicionar registro do novo link Organização: - atualizar todos os registros que sejam >= ao numero igual ao da atualizada com um pos +1 - adicionar registro do novo linkPorém, não consigo pensar em como desenvolvê-lo!
Aqui vai meu arquivo de LISTAGEM dos links, que cria uma tabela com os links atuais:
<h1>Listagem de links</h1>
<?php
//Seleção e execução de variáveis SQL
include ("../connect.php");
$sql_links = "SELECT * FROM menu order by pos";
$query_links = mysql_query($sql_links);
//Dá início à tabela
$quebra = "</td><td class='quebra'>";
echo "<table><tr><td class='quebra'>" . "Editar" . $quebra . "Deletar" . $quebra . "Posição" . $quebra . "Nome" . $quebra . "Link" . $quebra . "Link Show" . $quebra . "Alt Text" . $quebra . "Menu ID" . "</td></tr>";
//Dá início ao loop de preenchimento
while ($elink = mysql_fetch_array($query_links)) {
echo "<tr><td class='quebra'>" . "<a href=?l=editlink&t=menu&id=" .$elink['menuid'] . "><img src='img/edit.png' class='nb' /></a>" . $quebra .
"<a href=?l=deletelink&t=menu&id=" .$elink['menuid'] . "><img src='img/delete.png' class='nb' /></a>" . $quebra . $elink['pos'] . $quebra . $elink['nome'] . $quebra . $elink['link'] . $quebra . $elink['linkShow'] . $quebra . $elink['alt'] . $quebra . $elink['menuid'] . "</td></tr>";
}
echo "</table>";
?>
<br />
<br />
<h1>Adição de links</h1>
<?php
//Definição de vars
$pos_ins = $_POST['pos'];
$nome_ins = $_POST['nome'];
$link_ins = $_POST['link'];
$linkShow_ins = $_POST['linkShow'];
$alt = $_POST['alt'];
if (isset($pos_ins,$nome_ins,$link_ins,$linkShow_ins,$alt)) {
//SQLs
$sql_adicao_links = "INSERT INTO menu (`pos`,`nome`,`link`,`linkShow`,`alt`) VALUES ('$pos_ins','$nome_ins','$link_ins','$linkShow_ins','$alt')";
$sql_adicao_query = mysql_query($sql_adicao_links);
header("Location: ?l=links");
}
?>
<?php
$num = mysql_num_rows($query_links);
$pos_m = $num + 1;
?>
<form method="post" action="<? $PHP_SELF ?>">
<table>
<tr>
<td>Posição</td>
<td>Nome</td>
<td>Link</td>
<td>Link Visível</td>
<td>Texto Alt</td>
</tr>
<tr>
<td><input type="text" name="pos" maxlenght="3" size="3" value="<? echo $pos_m; ?>"></td>
<td><input type="text" name="nome" maxlenght="50" size="20"></td>
<td><input type="text" name="link" maxlenght="50" size="20"></td>
<td><input type="text" name="linkShow" maxlenght="50" size="20"></td>
<td><input type="text" name="alt" maxlenght="100" size="20"></td>
</tr>
<tr>
<td><input type="submit" value="Adicionar Link"></td>
<td><input type="reset" value="Apagar"></td>
</tr>
</table>
</form>Aqui vai a página de edição dos links:
<?php
//Definindo variáveis
$tipo = $_GET['t'];
$menuid = $_GET['id'];
//SQL
$sql_recebe = "SELECT * FROM $tipo WHERE menuid = $menuid";
$sql_atualiza = "";
//QUERIES
$query_recebe = mysql_query($sql_recebe);
$query_atualiza = mysql_query($sql_atualiza);
while ($reg = mysql_fetch_array($query_recebe)){
$a_pos = $reg['pos'];
$a_nome = $reg['nome'];
$a_link = $reg['link'];
$a_linkshow = $reg['linkShow'];
$a_alt = $reg['alt'];
}
//SQL DELETE
$sql_delete = "DELETE * FROM $tipo WHERE menuid = $menuid";
?>
<?
//Atribuição de valores novos
$pos_ins = $_POST['pos'];
$nome_ins = $_POST['nome'];
$link_ins = $_POST['link'];
$linkShow_ins = $_POST['linkShow'];
$alt = $_POST['alt'];
if (isset($pos_ins,$nome_ins,$link_ins,$linkShow_ins,$alt)) {
//SQLs
$sql_atualizacao_links = "UPDATE $tipo SET pos='$pos_ins', nome='$nome_ins', link='$link_ins', linkShow='$linkShow_ins', alt='$alt' WHERE menuid='$menuid'";
$sql_atualizacao_query = mysql_query($sql_atualizacao_links) or die(mysql_error());;
echo "<script>window.alert('Registro atualizado com sucesso.'); document.location('?l=principal');</script>";
}
?>
<form method="post" action="<? $PHP_SELF ?>">
<table>
<tr>
<td>Posição</td>
<td>Nome</td>
<td>Link</td>
<td>Link Visível</td>
<td>Texto Alt</td>
</tr>
<tr>
<td><input type="text" name="pos" maxlenght="3" size="3" value="<? echo $a_pos; ?>"></td>
<td><input type="text" name="nome" maxlenght="50" size="20" value="<?echo $a_nome; ?>"></td>
<td><input type="text" name="link" maxlenght="50" size="20" value="<?echo $a_link;?>"></td>
<td><input type="text" name="linkShow" maxlenght="50" size="20" value="<?echo $a_linkshow;?>"></td>
<td><input type="text" name="alt" maxlenght="100" size="20 value="<?echo $a_alt;?>"></td>
</tr>
<tr>
<td><input type="submit" value="Atualizar"></td>
</tr>
</table>
Basicamente, o primeiro arquivo cria um link com o ID e POSIÇÃO do registro que eu quero alterar e me joga para a página de edição. Esta, recebe os valores, joga em variáveis e me dá o formulário de alteração.










