【问题标题】:I can't insert data with postgres + php我不能用 postgres + php 插入数据
【发布时间】: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


【解决方案1】:

你所有的 POST 参数必须用单引号,例如:$_POST['nombre'],我看到你有$_POST[nombre]

另一个问题是变量或参数名称不能包含无效字符,如ñ

$al->agregarAlumno($_POST['nombre'],$_POST['rol'],$_POST['rut'],$_POST['telefono'],$_POST['talla'],$_POST['carrera'],$_POST['correo'],$_POST['contrasenia']);

希望它对你有用:)

【讨论】:

  • 它适用于 $_POST[nombre] 和字符 ñ,问题出在 $query = "INSERT INTO coordinador_area VALUES('".$rol."','".$id_area. "')"; .非常感谢。
猜你喜欢
  • 2017-03-22
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多