#php #sql
#php #sql
Вопрос:
Я не получаю ошибок, и все мои операторы печати говорят мне, что я делаю хорошую работу, но мое поле под нужным столбцом остается неизменным.
что происходит (или, скорее, не происходит)?
if ($current amp;amp; $new) {// the validation code is left out
$sqlTekst = "UPDATE gebruikers SET pasW = ". $_POST[nieuwPasw] ." WHERE gebruikersNr = ". $_POST[gebruikersNr];
print 'huidig POST gebruikersNr = $_POST[gebruikersNr]';
// server koppeling
$db = mysql_connect("localhost", "internet", "geheim");
// database koppeling
mysql_select_db("site_met_aanmelden", $db)
or die("Kan database gebruikers niet openen".mysql_error());
$resultaat = mysql_query($sqlTekst, $db);
}
Комментарии:
1. Как вы проверяете, что вы запускаете скрипт и что данные обновляются?
Ответ №1:
Вы «зафиксировали» изменения в базе данных?
Комментарии:
1. Все, что я сделал, это проверил мою таблицу в phpMyAdmin, выполнив запрос. Я действительно не знаю, что вы подразумеваете под «фиксацией»
2. Не похоже, что он установил для autocommit значение false.
3. MySQL автоматически фиксирует один запрос по умолчанию, если таблица создана с использованием движка InnoDB. Я не знаю ни одного человека, который изменил бы это поведение.
4. @Nemoden: mysql автоматически фиксирует все запросы, независимо от типа таблицы, если вы специально не отключите поведение или явно не запустите транзакцию.
Ответ №2:
добавьте обработку ошибок для фактического выполнения запроса,
позаботьтесь о возможных sql-инъекциях,
проверьте затронутые строки, чтобы увидеть, работает ли ваше WHERE-условие или нет,
отформатируйте и сделайте отступ в вашей инструкции sql, и вы получите немного более значимое сообщение об ошибке
распечатайте вашу инструкцию sql, чтобы вы могли проверить все параметры используйте $array[‘строка’] вместо $array [строка]
if ($current amp;amp; $new) { // the validation code is left out
$db = mysql_connect("localhost", "internet", "geheim") or die("connect failed. ".mysql_error());
mysql_select_db("site_met_aanmelden", $db) or die("Kan database gebruikers niet openen".mysql_error());
$sql_pasW = mysql_real_escape_string($_POST['nieuwPasw'], $db);
$sql_gebruikersNr = mysql_real_escape_string($_POST['gebruikersNr'], $db);
$sqlTekst = sprintf("
UPDATE
gebruikers
SET
pasW='%s'
WHERE
gebruikersNr ='%s'
", $sql_pasW, $sql_gebruikersNr
);
echo 'Debug '.__FILE__.__LINE__.': ', $sqlTekst, "n";
$resultaat = mysql_query($sqlTekst, $db) or die('query failed: '.mysql_error());
echo 'affected rows: ', mysql_affected_rows($db);
}
Комментарии:
1. Это выглядит плотно и полезно. Собираюсь проверить это завтра, сегодня у меня не было времени. Приветствия!
Ответ №3:
Я бы исправил это следующим образом:
$sqlTekst = "UPDATE gebruikers SET pasW = '". $_POST["nieuwPasw"] ."' WHERE gebruikersNr = ". $_POST["gebruikersNr"];
Предполагая, что ваш Nr
ссылается на число, которое не нуждается в кавычках при выборе.
Ответ №4:
Я предполагаю, что по крайней мере ваше $_POST['nieuwPasw']
или $_POST['gebruikersNr']
является строкой, и вы не заключаете ее в ‘ в своем запросе.
Ваш рабочий запрос будет
$sqlTekst = "UPDATE gebruikers SET pasW = '". $_POST['nieuwPasw'] ."' WHERE gebruikersNr = '". $_POST['gebruikersNr']."'";
Просто замените строку.
вы также можете получить информацию, если в вашем запросе возникла ошибка, используя функцию mysql_error .
Добавить
if (!$resultaat) {
echo mysql_error();
}
это привело бы к ошибке печати, возникшей во время запроса.
Я бы также предложил заключать ключи массивов в апострофы (двойное или единственное число — на самом деле не имеет значения).
Комментарии:
1. Да, но дело в том, что я не получаю никакой ошибки. И для ‘ Я сделал оба, и в обоих случаях моя таблица не обновляется
2. О, хорошо, почему я не подумал о том, что ошибка mysql может быть настолько широко применима. Имеет смысл. Достаточно интересно: ошибка говорит, что что-то не так рядом с » в строке 1. Опубликованный мной код начинается со строки 28….
3. $_POST[‘gebruikersNr’] не установлен? 🙂 просто сделайте
print $sqlTekst
, вы, вероятно, увидите это. И не забудьте поделиться здесь, если ваша проблема остается нерешенной.4. $_POST[$’gebruikersNr’] определенно установлен 🙂 И да, я подтвердил это, выполнив тот же print
$sqlTekst
5. И забыл поделиться
print $sqlTekst
результатами 😉
Ответ №5:
Попробуйте вот так:
$sqlTekst = "UPDATE gebruikers SET pasW = '". $_POST[nieuwPasw] ."' WHERE gebruikersNr = '". $_POST[gebruikersNr]."'";