【发布时间】:2014-09-15 16:00:08
【问题描述】:
我正在使用 php + postgres 尝试制作一个网络应用程序。我的问题是当我尝试在表中插入数据时,因为它不会“死”,但也不会插入任何东西。
这是我的观点,在这里一切正常。
<form action="../../Controlador/agregarAlumno.php" method="post">
<label for="nombre">Nombre:</label>
<input id="nombre" type="text" name="nombre" placeholder="Nombre Coordinador" required="true" />
<label for="email">Rol:</label>
<input id="email" type="text" name="rol" placeholder="Rol USM" required="true" />
<label for="nombre">Rut:</label>
<input id="nombre" type="text" name="rut" placeholder="Rut" required="true" />
<label for="email">Área:</label>
<select name="area">
<option value="">Elige un área</option>
<?php
foreach($areas as $area)
{
echo '<option value="'. $area[0] .'">'. $area[1] .'</option>';
}
?>
</select>
<label for="nombre">Teléfono:</label>
<input id="nombre" type="text" name="telefono" placeholder="Ej: +56988182965" required="true" />
<label for="email">Talla Polera:</label>
<input id="email" type="text" name="talla" placeholder="Ej: S, M, L" required="" />
<label for="nombre">Carrera:</label>
<select name="carrera">
<option value="">Elige una carrera</option>
<?php
foreach($carreras as $carrera)
{
echo '<option value="'. $carrera[0] .'">'. $carrera[2] .'</option>';
}
?>
</select>
<label for="email">Correo Electrónico</label>
<input id="email" type="mail" name="correo" placeholder="Ejemplo@ejemplo.com" required="true" />
<label for="email">Contraseña</label>
<input id="email" type="text" name="contraseña" required="true" />
<input id="submit" type="submit" name="submit" value="Enviar" />
</form>
这是 agregarAlumno.php,这里的想法是插入一个用户,然后将其设为协调器,简单来说,我试图在一个视图中进行 2 次插入。
<?php
include("conexion.php");
include("../Modelo/alumno.php");
include("../Modelo/area.php");
include("../Modelo/coordinadoresArea.php");
$al = new alumno();
$alumnos = $al->obtenerAlumnos();
foreach ($alumnos as $alumno)
{
if($_POST[rol] != $alumno[0] )
{
$al->agregarAlumno($_POST[nombre],$_POST[rol],$_POST[rut],$_POST[telefono],$_POST[talla],$_POST[carrera],$_POST[correo],$_POST[contraseña]);
}
}
$cor = new coordinadoresArea();
$cor->agregarCoordinadorArea($_POST[rol],$_POST[area]);
//header("Location: ../Vista/Coordinadores Area/coordinadoresArea.php");
?>
这是 agregarAlumno 函数:
function agregarAlumno($nombre,$rol,$rut,$telefono,$talla,$id_carrera,$correo,$contraseña)
{
include("conexion.php");
$query = "INSERT INTO alumno VALUES('".$rol."','".$id_carrera."','".$nombre."','".$rut."','".$correo."','".$contraseña."','".$telefono."','".$talla."')";
return $result = pg_query($query);
pg_free_result($result);
pg_close($db);
}
这里是 agregarCoordinador 函数:
function agregarCoordinadorArea($rol,$id_area)
{
include("conexion.php");
echo "Rol:",$rol," ","Id Area:",$id_area;
$query = "INSERT INTO coordinador_area VALUES('".$rol."','".$id_area."')";
$result = pg_query($query);
pg_free_result($result);
// Closing connection
pg_close($db);
}
最后这是表 coordinador_area:
CREATE TABLE coordinador_area
(
id_coordinador_area serial NOT NULL,
rol character varying(20) NOT NULL,
id_area integer NOT NULL,
CONSTRAINT coordinador_area_pkey PRIMARY KEY (id_coordinador_area),
CONSTRAINT coordinador_area_id_area_fkey FOREIGN KEY (id_area)
REFERENCES area (id_area) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT coordinador_area_rol_fkey FOREIGN KEY (rol)
REFERENCES alumno (rol) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
很抱歉,如果我提出一个很长的问题,但我已经尝试了一切(我知道)。
【问题讨论】:
-
你在一个有 3 列的表中插入 2 个值,但没有指定这 2 列。
INSERT INTO coordinador_area(rol,id_area) VALUES... -
一个
COMMIT不见了。直到世界其他地方永远知道你插入了什么! -
你所有的 POST 参数必须用单引号,例如:
$_POST['nombre'],我看到你现在有$_POST[nombre] -
@Maheswaran Ravisankar 没有必要执行 COMMIT,因为它不处理事务,pg_query 就足够了 :)
-
@Mihai,非常感谢,它运行良好。
标签: php sql postgresql