PHP MYSQL соединение с запросом внутри оператора IF - PullRequest
0 голосов
/ 30 октября 2011

решено:

Существует конфликт с моим объявлением переменных.Оказывается, я объявляю $ пароль в моей базе данных connect_database, но также и в моем скрипте учетной записи, что означает, что $ пароль всегда установлен и, следовательно, всегда пропускает па в конце, если ... в процессе работы, это тот же самый простой паролькак мой логин ...

ОРИГИНАЛ:

У меня проблема с запросами внутри операторов if в PHP.Я делаю сценарий обновления учетной записи.

Мне требуется соединение с базой данных сверху, а затем, в зависимости от результата POST, я делаю разные запросы в некоторых операторах if.

Если он запускает все операторы IF, он выполняет запрос в конце.

Если он перехватывается любым из операторов if, выполняется запрос, и я хочу, чтобы скрипт перенаправлял с кодом сообщения и завершал код с помощьювыход.

Проблема в том, что скрипт не завершится после выполнения.Он выполняет запрос, но работает до конца - без перенаправления и выхода ...

Я нашел обходной путь, который требует, чтобы база данных была обязательной внутри операторов if, а затем снова внизу вместотолько сверху, но моя первоначальная идея заключалась в том, чтобы просто включить его сверху и использовать соединение в операторе if, а затем снова внизу.

Может кто-нибудь объяснить, почему один работает, а другой нет?Это не имеет большого значения.Я просто не понимаю, почему ...

Большое спасибо

Это не работает ( Требуется база данных вне оператора IF ):

    <?php
session_start();
if(!isset($_SESSION["user"])) {
    header("location: ../../../login/login_form.php");
    exit;
}

$user = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
$id = $_SESSION['user_id'];

//Display if user and email is blank - try again---------------
if($user==NULL || $email==NULL){
    header('location: ../../../index.php?show=account&message=1');
    exit;
}

require_once('../../connect_database.php');

//Check if password is blank - meaning only updating user and email -----
if ($password==NULL){

    $query = "UPDATE user SET user='$user', email='$email' WHERE id=".$id;
    mysql_query($query) or die(mysql_error());

    header('location: ../../../index.php?show=account&message=0');
    mysql_close();
    exit;
}

//Display if password less than 8 characers----------------
if(strlen($password)<8 && $password!=NULL){
    header('location: ../../../index.php?show=account&message=2');
            mysql_close();
    exit;
}

//Run this if everything is to be changed incl. password-------

$query = "UPDATE user SET user='$user', password=md5('$password'), email='$email' WHERE id=".$id;
mysql_query($query) or die(mysql_error());

mysql_close();

header('location: ../../../index.php?show=account&message=0');

?>

Это работает ( Требуется база данных внутри оператора IF, а затем снова внизу ):

<?php
session_start();
if(!isset($_SESSION["user"])) {
    header("location: ../../../login/login_form.php");
    exit;
}

$user = mysql_real_escape_string($_POST['user']);
$password = mysql_real_escape_string($_POST['password']);
$email = mysql_real_escape_string($_POST['email']);
$id = $_SESSION['user_id'];

//Display if user and email is blank - try again---------
if($user==NULL || $email==NULL){
    header('location: ../../../index.php?show=account&message=1');
    exit;
}

//Check if password is blank - meaning only updating user and email ----
if ($password==NULL){

    require_once('../../connect_database.php');

    $query = "UPDATE user SET user='$user', email='$email' WHERE id=".$id;
    mysql_query($query) or die(mysql_error());

    header('location: ../../../index.php?show=account&message=0');
    mysql_close();
    exit;
}

//Display if password less than 8 characers------------------
if(strlen($password)<8 && $password!=NULL){
    header('location: ../../../index.php?show=account&message=2');
    exit;
}

//Run this if everything is to be changed incl. password----------
require_once('../../connect_database.php');

$query = "UPDATE user SET user='$user', password=md5('$password'), email='$email' WHERE id=".$id;
mysql_query($query) or die(mysql_error());

mysql_close();

header('location: ../../../index.php?show=account&message=0');

?>

Ответы [ 3 ]

1 голос
/ 30 октября 2011

Проблема в том, что скрипт не завершится после выполнения, если.

Вы не правы.Оператор exit прост и прост, а всегда работает.
Откуда вы знаете, что запрос был выполнен?У вас есть какой-нибудь отладочный вывод?

Есть много проблем с вашим кодом, но по крайней мере сделать его менее повторяющимся и согласованным с муаром

<?php 
session_start(); 
if(!isset($_SESSION["user"])) { 
  header("location: ../../../login/login_form.php"); 
  exit; 
} 

$user     = $_POST['user']; 
$password = $_POST['password']; 
$email    = $_POST['email']; 
$id       = $_SESSION['user_id']; 

//Display if user and email is blank - try again--------------- 
if (!$user || !$email) { 
  $message=1;
} 
//Display if password less than 8 characers---------------- 
elseif ($password && strlen($password)<8){ 
  $message=2;
} else {
  require_once('../../connect_database.php'); 
  $user  = mysql_real_escape_string($user); 
  $email = mysql_real_escape_string($email); 

  if ($password) { 
      $password = "password='".md5($password)."',";
  }
  $query = "UPDATE user SET user='$user',$password email='$email' WHERE id=".$id;
  mysql_query($query) or trigger_error(mysql_error()); 
  $message  = 0;
}
header("location: ../../../index.php?show=account&message=$message"); 

Также обратите внимание

  • вы не можете использовать mysql_real_escape_string перед соединением
  • , используя относительные пути (все эти точки), считающиеся плохой практикой, особенно с местоположением
0 голосов
/ 30 октября 2011

Хорошо, вот что я предлагаю: Заменить все exit на die() И если это не сработает, попробуйте заменить все заголовки Location следующим образом:

<script>
window.location='/path/to/your/redirection';
</script>

Дайте мне знать, если это поможет каким-либо образом:)

0 голосов
/ 30 октября 2011

Я считаю, что это местоположение чувствительно к регистру.Попробуйте изменить его на

header("Location:../../../index.php?show=account&message=0");
...