|
|
|
| Добрый день, подскажите пожалуйста, я новичок и никак не могу сообразить как мне сделать универсальную ссылку, вот код
<?php
$result=mysql_query('SELECT * FROM `users`');// делаем выборку из таблицы
while($row=mysql_fetch_array($result))// берем результаты из каждой строки
switch ( $_GET['page'] ) {
case ('edit'.$row['id_user'].''):
include ('design/prf_edit.tpl');
break;
default:
include ('design/prf.tpl');
}
?>
--- case ('edit'.$row['id_user'].''): - вот здесь хочу что бы открывалось? точнее была ссылка на все id, т.е. чтьо бы было ?page=edit33, ?page=edit10, т.е. что бы ?page=edit(тут были числа от 0 до 1000) подскажите как это организовать? | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 10:52)
| | С case никак. В case должны быть константы. А организовать можно так:
<?
$is_edit = ( substr( $_GET['page'] , 0 , 4 ) === 'edit' );
$num = substr( $_GET['page'] , 4 );
if( $is_edit && is_numeric( $num ) && $num >= 0 && $num <= 1000 ) include ('design/prf_edit.tpl');
else include ('design/prf.tpl');
|
Только т.к. $_GET['page'] у вас врядли меняется, то делать это лучше не в цикле (повторять сотню раз одно и то же вычисление), а перед циклом (один раз). Т.е. примерно так:
<?
$is_edit = ( substr( $_GET['page'] , 0 , 4 ) === 'edit' );
$num = substr( $_GET['page'] , 4 );
if( $is_edit && is_numeric( $num ) && $num >= 0 && $num <= 1000 ) $fName = 'design/prf_edit.tpl';
else $fName = 'design/prf.tpl';
$result=mysql_query('SELECT * FROM `users`');
while($row=mysql_fetch_array($result)) include $fName;
|
| |
|
|
|
|
|
|
|
для: Sfinks
(17.03.2012 в 11:26)
| | но походу мне это не даст результата, а подскажите пожалуйста ещё, вот у меня есть таблица, users, на странице я их вывожу из базы даных, а подскажите пожалуйста, как мне по id_users, сделать отдельно для каждого редактирование? т.е. у меня на странице они выведены, и на каждого пользователя идёт ссылка с номером его id, и не могу понять никак как мне сделать что бы щелкая по этой ссылке я переходил на редактирование именно этого пользователя? заранее благодарен | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 13:09)
| | Если в ссылке
?u=id-юзера
то
<?php
if(isset($_GET['u']) && (int)$_GET['u']) {
//получаете данные конкретного пользователя
$result=mysql_query('SELECT * FROM `users` WHERE `id_user=`' .(int)$_GET['u']);
//выводите эти данные в форме для редактирования
}
|
| |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 13:17)
| | У меня старая форма редактирования пользавателей
<?php
$id = $_SESSION['id'];
//делаем полную выборку из базы данных
$select = mysql_query("SELECT * FROM users WHERE id_user = '$id'") or die(mysql_error());
$assoc = mysql_fetch_assoc($select);
//выводим все данные
print "<center><h1>Ваши данные</h1><br />";
echo "<p><b>Имя:</b>{$assoc['name']}</p><br />";
//Проверим фамилию, если она не введенна то выведим то что юзер не заполнил поле фамилия
echo $assoc['firstname'] == false ?"<font color='red'>Вы не ввели фамилию</font>":"<p><b>Фамилия:</b>{$assoc['firstname']}</p><br />";
echo "<p><b>Email:</b> {$assoc['email']}</p><br />";
echo "<p><b>Информация о себе:</b> {$assoc['me']}</p><br />";
?>
<br />
<br />
<center>Изменить данные!<br />
<form method="post">
<p>E-mail:<br />
<input name="email" type="text" value="<?=$assoc['email'];?>" maxlength="25"/></p>
<p>Имя:<br />
<input name="name" type="text" maxlength="15" value="<?=$assoc['name'];?>"/></p>
<p>Фамилия:<br />
<input name="firstname" type="text" maxlength="25" value="<?=$assoc['firstname'];?>"/></p>
<p>О себе:<br /><textarea name="me" cols="65" rows="10" style="resize: none;" class="text" maxlength="300"><?=$assoc['me'];?></textarea></p> <br />
<input type="submit" value="Изменить" name="button" class="button">
</form>
|
заанне прошу прощения за мою тупость. | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 18:45)
| | у меня вся беда в том, что я не знаю мне оргазнизовать движок файла profil.php я хочу сделать что бы по ссылке переходить в этом же файле на profil.php?=page(id_юзера) и уже вторую ночь гадаю как это сделать, обьясните пожлауйста по подробнее если вам не трудно мой старый код был через который хотел сделать
<?php
$result=mysql_query('SELECT * FROM `users`');// делаем выборку из таблицы
while($row=mysql_fetch_array($result))// берем результаты из каждой строки
switch ( $_GET['page'] ) {
case ('edit'.$row['id_user'].''):
include ('design/prf_edit.tpl');
break;
default:
include ('design/prf.tpl');
}
?>
|
| |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 18:48)
| | а весь файл profil.tpl ввыглядит так
<?php include_once('include/config.php');?>
<?php include_once('include/function.php');?>
<div class="clear"></div>
<div id="content-outer">
<!-- start content -->
<div id="content">
<!-- start page-heading -->
<div id="page-heading">
<h1>Add product</h1>
</div>
<!-- end page-heading -->
<table border="0" width="100%" cellpadding="0" cellspacing="0" id="content-table">
<tr>
<th rowspan="3" class="sized"><img src="images/shared/side_shadowleft.jpg" width="20" height="300" alt="" /></th>
<th class="topleft"></th>
<td id="tbl-border-top"> </td>
<th class="topright"></th>
<th rowspan="3" class="sized"><img src="images/shared/side_shadowright.jpg" width="20" height="300" alt="" /></th>
</tr>
<tr>
<td id="tbl-border-left"></td>
<td>
<!-- start content-table-inner ...................................................................... START -->
<div id="content-table-inner">
<!-- start table-content -->
<div id="table-content">
<?php
$result=mysql_query('SELECT * FROM `users`');// делаем выборку из таблицы
while($row=mysql_fetch_array($result))// берем результаты из каждой строки
switch ( $_GET['page'] ) {
case ('edit'.$row['id_user'].''):
include ('design/prf_edit.tpl');
break;
default:
include ('design/prf.tpl');
}
?>
<!-- end content-table -->
<!-- start actions-box ............................................... -->
<div id="actions-box">
<a href="" class="action-slider"></a>
<div id="actions-box-slider">
<a href="" class="action-edit">Edit</a>
<a href="" class="action-delete">Delete</a>
</div>
<div class="clear"></div>
</div>
<!-- end actions-box........... -->
<div class="clear"></div>
</div>
<!-- end content-table-inner ............................................END -->
</td>
<td id="tbl-border-right"></td>
</tr>
<tr>
<th class="sized bottomleft"></th>
<td id="tbl-border-bottom"> </td>
<th class="sized bottomright"></th>
</tr>
</table>
<div class="clear"> </div>
</div>
<!-- end content -->
<div class="clear"> </div>
</div>
<!-- end content-outer........................................................END -->
<div class="clear"> </div>
|
| |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 18:57)
| | так выглядит файл prf.tpl
<!-- start product-table ..................................................................................... -->
<form id="mainform" action="">
<table border="0" width="100%" cellpadding="0" cellspacing="0" id="product-table">
<tr>
<th class="table-header-check"><a id="toggle-all" ></a> </th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Имя пользователя</a> </th>
<th class="table-header-repeat line-left minwidth-1"><a href="">Фамилия</a></th>
<th class="table-header-repeat line-left"><a href="">Email</a></th>
<th class="table-header-repeat line-left"><a href="">Последний IP</a></th>
<th class="table-header-repeat line-left"><a href="">Статус</a></th>
<th class="table-header-options line-left"><a href="">Опции</a></th>
</tr>
<?
$result=mysql_query('SELECT * FROM `users`');// делаем выборку из таблицы
while($row=mysql_fetch_array($result))// берем результаты из каждой строки
{ echo '<tr><td><input type="checkbox"/></td><td>'.$row['name'].'.</td><td> '.$row['firstname'] .' </td><td>'.$row['email'].'</td><td>'.$row['id_user'].'</td><td> '.$row['me'].'. </td> <td class="options-width">
<a href="?page=edit'.$row['id_user'].'" title="Edit" class="icon-1 info-tooltip"></a>
<a href="" title="Edit" class="icon-2 info-tooltip"></a>
</td></tr>';// выводим данные
}
?>
</table>
<!-- end product-table................................... -->
</form>
</div>
|
| |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 19:02)
| | если не трудно подскажите пожалуйста как мне всё правильно написать, заранее очень благодарен | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 18:45)
| | "как мне по id_users, сделать отдельно для каждого редактирование? т.е. у меня на странице они выведены, и на каждого пользователя идёт ссылка с номером его id"
Это ваши слова, из которых следует, что идет запрос по id пользователя. А от куда и зачем $_SESSION['id']? | |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 19:22)
| | я просто готовый переписываю, там возможность стоит редактирование только открытой сессии, т.е получается открывается для редактирования только пользователь который сейчас находится в сети а я хочу сделать что бы можно было любого редактировать | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 19:29)
| | вот и не могу придумать как вывести всех пользователей я сделал, а вот как сделать что бы можно было на любого щелкнуть из списка и открыть его для редактирования не знаю(((( в это вся и печаль((( | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 19:31)
| | А я вам ранее что писал, разве не запрос на вывод информации конкретного пользователя? | |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 19:40)
| | запрос, только не могу понять как его запустить и понять как мне тогда организовать в файле profil.tpl алгоритм, что бы сначала отображались все данные а по клику на любого пользователя перейти на его редактирование | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 19:44)
| | аааааа, всё извиняюсь за тупые вопросы))) понял теперь, только вот тепеь подскажите пожалуйста как организовать вывод по вашему запросу. а то что то не получается
<?php
if(isset($_GET['u']) && (int)$_GET['u']) {
//получаете данные конкретного пользователя
$result=mysql_query('SELECT * FROM `users` WHERE `id_user=`' .(int)$_GET['u']);
//выводите эти данные в форме для редактирования
//Обновляем данные
$update = mysql_query("UPDATE users SET email = '$email', name = '$name', firstname = '$firstname',
me = '$me' WHERE id_user = '$meid'") or die (mysql_error());
if($update){print " <!-- start message-green -->
<div id='message-green'>
<table border='0' width='100%' cellpadding='0' cellspacing='0'>
<tr>
<td class='green-left'>Product added sucessfully. <a href=''>Add new one.</a></td>
<td class='green-right'><a class='close-green'><img src='images/table/icon_close_green.gif' alt='' /></a></td>
</tr>
</table>
</div>
<!-- end message-green -->";}
}
?>
<?php
if(isset($_GET['u']) && (int)$_GET['u']) {
//получаете данные конкретного пользователя
$result=mysql_query('SELECT * FROM `users` WHERE `id_user=`' .(int)$_GET['u']);
//выводите эти данные в форме для редактирования
}
?>
<br />
<br />
<center>Изменить данные!<br />
<form method="post">
<p>E-mail:<br />
<input name="email" type="text" value="<?=$assoc['email'];?>" maxlength="25"/></p>
<p>Имя:<br />
<input name="name" type="text" maxlength="15" value="<?=$assoc['name'];?>"/></p>
<p>Фамилия:<br />
<input name="firstname" type="text" maxlength="25" value="<?=$assoc['firstname'];?>"/></p>
<p>О себе:<br /><textarea name="me" cols="65" rows="10" style="resize: none;" class="text" maxlength="300"><?=$assoc['me'];?></textarea></p> <br />
<input type="submit" value="Изменить" name="button" class="button">
</form>
|
| |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 19:44)
| | Я не буду разбираться в ваших шаблонах, но коли вы сумели вывести в них всех пользователей, то конкретно одного труда не соствит. Запрос не запускатеся вашей "командой", он просто выполняется, если описан. Повторяю еще раз:
Если ваши ссылки на пользователей выглядят к примеру так:
<a href="namescript.php?user=1">
<a href="namescript.php?user=2">
<a href="namescript.php?user=3">
....
|
То при при их выборе, ваш скрипт обработчик (не знаю как он у вас называется, для примера namescript.php), получит GET запрос с именем user с соответствущим значением. Это понятно?
Нужно только проверить это (если этот скрипт ожидает только переменную user, то не обязательно), а так же удостовериться, что над вами не шутят, а тем более не прикрепляют к запросу червя. И коли все ОК, то по значению переменной user, которое указывает на его id, сделать запрос к базе. Это понятно?
Вот это и выполняется:
<?php
//для того чтобы понять что тут внутри,
//выполните для уяснения эти две строки
//в отдельном скрипте
echo true && 0;
echo true && 1;
//проверям пришел ли запрос на конкретного пользователя
//и если да, убираем возможных червей из него
if($id = isset($_GET['user']) && (int)$_GET['user']) {
//если запрос и id не равно 0, то есть нет червей
//выполняем запрос к базе
$result=mysql_query('SELECT * FROM `users` WHERE `id_user=`' . $id);
//выводите эти данные в форме для редактирования
while($row = mysql_fetch_assoc($result)) {
//тут вывод формы, либо упаковка данных в массив, который будет передан шаблону
//либо вывод непосредственно шаблона
}
}
|
Что еще пояснять?
PS. <?=$assoc['email'];?> - такое возможно только, если разрешены короткие теги.
Замечание: если данные о пользователе, это одна строка (набор полей таблицы), то цикла не надо, естественно, а просто
<?
$row = mysql_fetch_assoc($result)
|
и далее либо как у вас подстановка в HTML, либо....
| |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 20:02)
| | у меня кроме 1111 больше ничего не выводится на экран почему то.... | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 20:40)
| | Что выводит, вот эти строки?
<?
echo true && 0;
echo true && 1;
|
Это для усянения, чтобы понять сущность работы проверки:
<?
if($id = isset($_GET['user']) && (int)$_GET['user'])
|
Если переменная user установлена (пришел запрос $_GET['user']) , то это даст true, но при этом требуется, чтобы преобразованное в integer значение этой переменной было больше 0, только в этом случае будет запрос к базе. Нулевого id в базе нет, а любые "строковые черви" вставленные в запрос при преобразовании дадут 0. В этом случае true && 0 = 0 - запроса не будет. В случае, если запрос истенен (значение равно 1 или более), то это даст 1...n (true && 1 = 1), в итоге вы получите номер id, который безопасно подставлять в SQL-запрос. | |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 20:55)
| | а для меня чайника можно по простее языком обьяснить, а то я никак догнать не могу) | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 21:09)
| | Выполните вот это в отдельном тест-скрипте:
<?php
if($id = (int)$_GET['user']) echo $id;
?>
<a href="?user=12">User</a>
|
Что получите? А теперь в url вместо значение 12 подставьте Петя. Что в этом случае при выборе ссылки получите?
Вам в запрос могут поставить SQL-инъекцию, и если вы не обработаете значение такого запроса перед помещением его в запрос к базе, то будут тяжкие последствия. Привидение значения переменной к integer как раз и обрезает такие возможные SQL-инъекции.
true - это таже 1, false - это тот же 0. Если пришла переменная user - isset($_GET['user']) вернет true. Если нет в запросе SQL-инъекции, то (int)$_GET['user']) вернет 12 (если как в примере),
а true && 12 = 12
Если же вместо 12 будет текст, то (int)$_GET['user']) вернет 0,
а true && 0 = 0
Совсем не обязательно проверять установлена переменная user для выполнения действия, если скрипт, к которому обращаются, обрабатывает только ее, в противном случае нужно проверять установку каждой переменной и производить необходимые операции. | |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 21:32)
| | Спасибо) вроде понял, но теперь проблема, отобрадает не именно этого юзера, а всех вот код
<?php
if($id = isset($_GET['user']) && (int)$_GET['user']) {
//если запрос и id не равно 0, то есть нет червей
//выполняем запрос к базе
$result=mysql_query('SELECT * FROM `users` WHERE `id_user=`' . $id);
//выводите эти данные в форме для редактирования
while($row = mysql_fetch_assoc($result)) {
//тут вывод формы, либо упаковка данных в массив, который будет передан шаблону
//либо вывод непосредственно шаблона
}
}
?>
<center><h1>Ваши данные</h1><br />
<p><b>Имя:</b><?=$row['name'];?></p><br />
|
| |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 22:43)
| | Если id_user, это уникальный идентификатор, то запрос выше получит запись касающуюся только пользователя с id_user = $id.
В противном случае означает, что все ваши пользователи имеют одинаковый идентификатор.
И как я понял, в вашем случае запись, это одна строка, и цикла не надо. | |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 23:12)
| | индентификатор разный, теперь тогда проблема в этом скрипте, он тогда не подходит для этого отбоа и пожтому видимо у меня отображаются все пользователи
<?
$is_edit = ( substr( $_GET['page'] , 0 , 4 ) === 'edit' );
$num = substr( $_GET['page'] , 4 );
if( $is_edit && is_numeric( $num ) && $num >= 0 && $num <= 1000 ) $fName = 'design/prf_edit.tpl';
else $fName = 'design/prf.tpl';
$result=mysql_query('SELECT * FROM `users`');
while($row=mysql_fetch_array($result)) include $fName;
|
А как его переписать под ссылку ?user=(id_users)? | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 23:15)
| | $is_edit = ( substr( $_GET['page'] , 0 , 4 ) === 'edit' );
$num = substr( $_GET['page'] , 4 );
Это что еще за монстр?
Сколько вам раз повторять, что для получения конкретной записи, нужно обратиться именно к этой записи. Вы приводите скрипт моего примера, утверждая, что он получает много записей, а на самом деле у вас работает совсем иное. А чего вы хотите, если запрос у вас и запрашивает все записи - 'SELECT * FROM `users`', в нем отсутствует условие.
Вы хотите чтобы я весь ваш код переписал, включая шаблоны? | |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 23:20)
| | ошибочка вышла, дико извиняюсь, думал это вы вначале написали... подставил теперь все как надо, т.е. по вашему методу и получилось Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in Z:\home\cms.lc\www\design\profile.tpl on line 44 | |
|
|
|
|
|
|
|
для: task
(17.03.2012 в 23:20)
| | да нафига мне его переписывать, вы мне конкретно подскажите если можете, я понимаю что я вас достал уже сильно, просто я сижу и понять вообще никак не могу, не аботает он нифига, не отображает и не перехожит никуда, нет дейсствий, из базы ничего не достаёт, мертво всё, всё тупо стоит нет никаких ни действий ни информации | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 23:35)
| | вылазит ошибка Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in Z:\home\cms.lc\www\design\profile.tpl on line 44 | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 23:39)
| | Ошибка говорит, что функция mysql_fetch_assoc() в указываемом для нее аргументе не находит валидного MySQL ресурса. | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 23:15)
| |
<?php
if( is_numeric( $_GET['user'] ) )
{
$result=mysql_query('SELECT * FROM `users` WHERE id_user=' . $_GET['user'] );
$row=mysql_fetch_array($result);
// в $row будут данные конкретного пользователя.
}
|
| |
|
|
|
|
|
|
|
для: Sfinks
(17.03.2012 в 23:24)
| | А что в этом скрипте он не открывает и ничего не делает, смсл от него? у меня смысл получается, отображаются данные, на эти данные нужно щелкнуть что бы перейти на страницу редактирования отдельного пользователя | |
|
|
|
|
|
|
|
для: Sega572
(17.03.2012 в 23:33)
| | Какой смысл в данных? Хм....
Ну тогда я прошу прощения, что вмешался в чужой разговор....
task, это в первую очередь вам адресовано ) У меня терпения меньше чем у вас ) | |
|
|
|
|
|
|
|
для: Sfinks
(17.03.2012 в 23:37)
| | походу своей тупостью я уже всех тут достал включая себя самого, извиняюсь | |
|
|
|